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 hashes)

Uploaded Source

Supported by

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