Convert Markdown files to PDF with styles.
The easiest way to go is to use pip:
$ pip install md2pdf
Usage:
md2pdf [options] INPUT.MD OUTPUT.PDF
Options:
--css=STYLE.CSS
For example, try to generate the project documentation with:
$ md2pdf README.md README.pdf
Optionally, you may load an external style (restricted to CSS2):
$ md2pdf --css tests/resources/input.css README.md README.pdf
You can use md2pdf
in your python code, like:
from md2pdf.core import md2pdf
md2pdf(pdf_file_path,
md_content=None,
md_file_path=None,
css_file_path=None,
base_url=None)
Function arguments:
pdf_file_path
: output PDF file pathmd_content
: input markdown raw string contentmd_file_path
: input markdown file pathcss_file_path
: input styles path (CSS)base_url
: absolute base path for markdown linked content (as images)
Install Docker
Pull the image:
$ docker pull jmaupetit/md2pdf
Now run your image:
$ docker run --rm -v $PWD:/app jmaupetit/md2pdf --css styles.css INPUT.MD OUTPUT.PDF
Ensure, Weasyprint is fully functional before using md2pdf. 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:
- Install XQuartz from: https://xquartz.macosforge.org
- Install all dependencies at once with homebrew and go grab a coffee (this may take a while):
$ brew install cairo pango gdk-pixbuf libxml2 libxslt libffi
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.
Clone this project first:
$ git clone git@github.com:jmaupetit/md2pdf.git
Install it with its dependencies (ideally in a virtual environment):
$ cd md2pdf
$ python -m venv venv
$ source venv/bin/activate
(venv) $ pip install -r requirements-dev.txt
(venv) $ python setup.py develop
To run the test suite with your active python version (virtual environment):
(venv) $ pytest
Lint the code via:
(venv) $ flake8
Upload a new release to PyPI:
$ python setup.py sdist bdist_wheel
$ twine upload dist/* --username 'johndoe' --password 'secret'
md2pdf
is released under the MIT License. See the bundled LICENSE file for
details.