Skip to main content

txt2pdf, a Markdown to PDF conversion tool

Project description

txt2pdf : Convert Markdown files to PDF with styles.

Initially forked from https://github.com/jmaupetit/md2pdf

Installation

Available through pip:

$ pip install txt2pdf

Usage

As a CLI

Usage:
    txt2pdf [options] INPUT.MD OUTPUT.PDF

Options:
    --css=STYLE.CSS

For example, try to generate the project documentation with:

$ txt2pdf README.md README.pdf

Optionally, you may load an external style (restricted to CSS2):

$ txt2pdf --css tests/resources/input.css README.md README.pdf

You may also include a HTML header and footer :

$ txt2pdf --header tests/resources/header.html README.md README.pdf
$ txt2pdf --footer tests/resources/footer.html README.md README.pdf

Optional debug by printing HTML to stdout, includes optional header and footer :

$ txt2pdf --html-to-stdout README.md README.pdf

As a library

from txt2pdf.core import txt2pdf

txt2pdf(
    pdf_file_path,
    md_content=None,
    md_file_path=None,
    css_file_path=None,
    html_header_content=None,
    html_header_file_path=None,
    html_footer_content=None,
    html_footer_file_path=None,
    base_url=None,
    print_html_to_stdout=False,
)

Function arguments:

  • pdf_file_path: output PDF file path
  • md_content: input markdown raw string content
  • md_file_path: input markdown file path
  • css_file_path: input styles path (CSS)
  • html_header_content: input HTML header raw string content
  • html_header_file_path: input HTML header file path
  • html_footer_content: input HTML footer raw string content
  • html_footer_file_path: input HTML footer file path
  • base_url: absolute base path for markdown linked content (as images)
  • print_html_to_stdout: print HTML to stdout for debug purposes

With Docker

Install Docker

Build the image:

$ docker build -t txt2pdf .

Now run your image:

$ docker run --rm -v $PWD:/app txt2pdf --css styles.css INPUT.MD OUTPUT.PDF

Troubleshooting on MacOSX

Ensure, Weasyprint is fully functional before using txt2pdf. You will find installation instructions in the project documentation: https://weasyprint.readthedocs.io/en/latest/install.html

In a few words, here are the few steps you will need to follow:

$ brew install cairo pango gdk-pixbuf libxml2 libxslt libffi

Misc

Using custom fonts in styles

WeasyPrint does not support the @font-face property yet (see project issue 28). If you use want to use custom fonts, you should use system fonts and define them with the font-family CSS property, like:

font-family: 'Neutraface Condensed';

Note that you should only define one single custom font, not a substitution list.

Using code blocks

Generate default css defining a class for every code item type:

(venv) $ pygmentize -S default -f html -a .codehilite

Contributing

Hacking

Clone this project first:

$ git clone git@github.com:c4ffein/txt2pdf.git

Install it with its dependencies (ideally in a virtual environment):

$ cd txt2pdf
$ python -m venv venv
$ . venv/bin/activate
(venv) $ pip install .[dev]

Running the test suite

To run the test suite with your active python version (virtual environment):

(venv) $ pytest

Lint the code via:

(venv) $ black -l 120

Release a new version

(venv) $ pip install .[deploy]  # install flit if needed
(venv) $ flit publish --format sdist

License

txt2pdf is released under the MIT License. See the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

txt2pdf-0.7.1.tar.gz (14.1 kB view details)

Uploaded Source

File details

Details for the file txt2pdf-0.7.1.tar.gz.

File metadata

  • Download URL: txt2pdf-0.7.1.tar.gz
  • Upload date:
  • Size: 14.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.26.0

File hashes

Hashes for txt2pdf-0.7.1.tar.gz
Algorithm Hash digest
SHA256 29c9d448bca248f990d577d19dcdd1b72cf4c2b95cdaa96e9f0de0a82d35780c
MD5 886e3077f20e69ddb13a8b6410430bf0
BLAKE2b-256 43e4363024599ba8d94b6061f82932f00aad934158186d5fc5bcd2bfb14362b6

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page