| name | pdf-creator |
|---|---|
| description | Create PDF documents from markdown with proper Chinese font support. Supports theme system (default for formal docs, warm-terra for training materials) and dual backend (weasyprint or Chrome). Triggers include "convert to PDF", "generate PDF", "markdown to PDF", or any request for creating printable documents. |
Create professional PDF documents from markdown with Chinese font support and theme system.
# Default theme (formal: Songti SC + black/grey)
uv run --with weasyprint scripts/md_to_pdf.py input.md output.pdf
# Warm theme (training: PingFang SC + terra cotta)
uv run --with weasyprint scripts/md_to_pdf.py input.md --theme warm-terra
# No weasyprint? Use Chrome backend (auto-detected if weasyprint unavailable)
python scripts/md_to_pdf.py input.md --theme warm-terra --backend chrome
# List available themes
python scripts/md_to_pdf.py --list-themes dummy.mdStored in themes/*.css. Each theme is a standalone CSS file.
| Theme | Font | Color | Best for |
|---|---|---|---|
default |
Songti SC + Heiti SC | Black/grey | Legal docs, contracts, formal reports |
warm-terra |
PingFang SC | Terra cotta (#d97756) + warm neutrals | Course outlines, training materials, workshops |
To create a new theme: copy themes/default.css, modify, save as themes/your-theme.css.
The script auto-detects the best available backend:
| Backend | Install | Pros | Cons |
|---|---|---|---|
weasyprint |
pip install weasyprint |
Precise CSS rendering, no browser needed | Requires system libs (cairo, pango) |
chrome |
Google Chrome installed | Zero Python deps, great CJK support | Larger binary, slightly less CSS control |
Override with --backend chrome or --backend weasyprint.
uv run --with weasyprint scripts/batch_convert.py *.md --output-dir ./pdfsChinese characters display as boxes: Ensure Chinese fonts are installed (Songti SC, PingFang SC, etc.)
weasyprint import error: Run with uv run --with weasyprint or use --backend chrome instead.
Chrome header/footer appearing: The script passes --no-pdf-header-footer. If it still appears, your Chrome version may not support this flag — update Chrome.