Skip to main content

md2weasypdf

Print PDFs from Markdown files and a HTML layout using Weasyprint.

Installation

pip install md2weasypdf

Usage

python -m md2weasypdf <input_folder_or_file> <output_path>

When a layout is not specified in the files frontmatter (see below), the --layout option has to be passed.

Watch Mode

The watch mode is intended for creation of layouts. The given layouts directory and input directory will be watched for changes.

For VSCode the extension vscode-pdf can be recommended, as it refreshes the displayed PDF automatically.

python -m md2weasypdf <input_folder_or_file> <output_path> --watch

Input

Input files are expected in markdown format with several markdown extensions. The markdown documents can utilize Jinja2 for templating inside the document (e. g. reusing texts).

Bundling

The bundling feature allows to bundle multiple documents into one PDF. This is useful when you want to create one PDF file from multiple source files. The bundling feature is enabled by adding the --bundle flag to the command. The specified input folder will be searched recursively for *.md files, files starting with an underscore will be ignored.

When using the bundle option, a layout has to be specified using --layout and a title for the whole document using --title.

Options

YAML Frontmatter can be used to customize the document layout or add other options which will be passed to the template. The following example shows how a document with frontmatter section could look like:

---
title: My Document Title
layout: doc1
---
Lorem ipsum...

Templating

Markdown files may contain Jinja2 templating, such as including other files.

In addition to just markdown files, yaml files are also rendered when there is a _template.md file present in the same or parent folder, which then uses Jinja2 to render its contents with values passed from the yaml file.

Output / Layout

The document layout must be given via the command option --layout or in the frontmatter of the single file. As layout a directory name inside the ./layouts directory (default, can be changed using --layouts-dir) is expected. In the layout directory, a index.html.j2 or index.html file is expected, which is loaded as entrypoint. The file is parsed using Jinja2.

Variables

Document

A document is, when --bundle option is used, a collection of articles, otherwise contains just one article.

The following variables are passed to the Jinja2 renderer:

  • date: current date in ISO format
  • commit: the current commit (with suffix -dirty when the working directory has uncommitted changes)
  • articles: list of articles, will be a list of only one article when not using --bundle option
  • title: the current filename of the article stripped by it's suffix, values in braces () removed and underscores _ replaced with spaces ; or the value passed in --title (required and used value when --bundle option is set)
  • meta: metadata as provided in the articles frontmatter and/or as passed in --meta (will be combined with frontmatter taking precedence)

Article

The article represents the single file which is used as input.

It has the following attributes for use in the document rendering:

  • title: see above
  • content rendered HTML, use with | save in Jinja2 to prevent unwanted escaping
  • source path to the file
  • meta see above
  • hash git object hash of the file or, when other files were included in the article, a new hash over all used files
  • modified_date date of last modification of the file or, when other files were included in the article, the latest date of all used files
  • has_custom_headline indicates if the document starts with an h1 level heading

Markdown Extensions

Table of Contents

Insert a table of contents using [TOC]. The table of contents will be generated automatically based on the headlines (lines starting with one or multiple #) in the document.

Which levels of headlines should be included in the TOC can be defined by declaring toc_depth in meta passed or the articles frontmatter.

Table of Abbreviations

Insert a table of abbreviations using [TOA]. The table of abbreviations will be generated automatically based on defined abbreviations (using *[Abbreviation]: Explanation) in the document.

Footnotes

Footnotes let you reference relevant information without disrupting the flow of what you're trying to say:

Here's a simple footnote,[^1] and here's a longer one.[^bignote]

[^1]: This is the first footnote.

[^bignote]: Here's one with multiple paragraphs and code.

    Indent paragraphs to include them in the footnote.

    `{ my code }`

    Add as many paragraphs as you like.

It is possible to reference to the same footnote by using the same footnote label.

Subscript

Use tildes ~ around text to create a subscript formatting.

Checkboxes

Use [ ] to create a checkbox. Use [x] to mark a checkbox as checked.

Fields

Use [>input_id] to create a text input. To create a textarea, add |textbox after the input id. To create a date field, add |YYYY-MM-DD after the input id.

To add a placeholder, append the placeholder text within parens to the end of the input id: [>input_id] (placeholder text).

Mermaid.js

Mermaid.js can be used in code blocks with the language mermaid. To convert the mermaid code into an image, mermaid-rs-renderer (mmdr) is required to be installed on the system (cargo install mermaid-rs-renderer).

Metadata

Release files for md2weasypdf 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for md2weasypdf 0.1.0
File Size Uploaded
md2weasypdf-0.1.0.tar.gz 24.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for md2weasypdf 0.1.0
File Interpreter ABI Platform
md2weasypdf-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 50.4 kB

Release files / md2weasypdf-0.1.0.tar.gz

Download URL md2weasypdf-0.1.0.tar.gz
Size 24.6 kB
Tags Source
SHA-256 checksum
How to use checksums
2337e704c401e5347c6c7b2d59411e0b1f3754f26f33403cfc7f8926f3433bde
BLAKE2b-256 checksum
How to use checksums
d94c2b46ca59eda0057ff8368a75d0f5f95aa3c644455349797d20f738819823
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / md2weasypdf-0.1.0-py3-none-any.whl

Download URL md2weasypdf-0.1.0-py3-none-any.whl
Size 25.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
fc7d0c7ae0b9b0c3eeacbe1022ea5d3deaab38248880bc12b09a106c5641ccfc
BLAKE2b-256 checksum
How to use checksums
33a5feefb081256934da876d31a0b795a7e20e29b5aceeb8e43110e6bd70957b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

0.0.49

2 release files

0.0.45

2 release files

0.0.44

2 release files

0.0.43

2 release files

0.0.42

2 release files

0.0.41

2 release files

0.0.40

2 release files

0.0.39

2 release files

0.0.37

2 release files

0.0.36

2 release files

0.0.31

2 release files

0.0.30

2 release files

0.0.28

2 release files

0.0.27

2 release files

0.0.26

2 release files

0.0.25

2 release files

0.0.24

2 release files

0.0.23

2 release files

0.0.22

2 release files

0.0.21

2 release files

0.0.20

2 release files

0.0.19

2 release files

0.0.18

2 release files

0.0.15

2 release files

0.0.14

2 release files

0.0.13

2 release files

0.0.12

2 release files

0.0.9

2 release files

0.0.8

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page