Skip to content

Convert Markdown files to PDF in Python with optional custom CSS

License

Notifications You must be signed in to change notification settings

c4ffein/txt2pdf

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

txt2pdf : Convert Markdown files to PDF in Python with optional custom CSS

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 [email protected]: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. txt2pdf was based on md2pdf, original LICENSE kept in the licenses directory

About

Convert Markdown files to PDF in Python with optional custom CSS

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published