Skip to main content

Convert Markdown to PDF with Japanese support and MermaidJS diagrams

Project description

gospelo-md2pdf

Convert Markdown to PDF with Japanese support and MermaidJS diagrams.

Features

  • Japanese Text Support: Full support for Japanese fonts (Noto Sans CJK JP, Hiragino Sans, Yu Gothic)
  • MermaidJS Diagrams: Automatically renders Mermaid diagrams as PNG images via Kroki API
  • Custom CSS: Use your own stylesheets or the built-in professional style
  • Markdown Extensions: Tables, fenced code blocks, TOC, metadata, and more
  • Special HTML Classes: Summary boxes, warnings, pros/cons sections, page breaks
  • Agent Skills: Built-in support for AI coding assistants (Claude Code, VS Code Copilot)

Installation

pip install gospelo-md2pdf

System Dependencies

WeasyPrint requires system libraries. Install them first:

macOS:

brew install pango glib gdk-pixbuf libffi

Ubuntu/Debian:

sudo apt install libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf2.0-0

Japanese Fonts (Recommended)

For Japanese text rendering:

macOS:

brew install font-noto-sans-cjk-jp

Ubuntu/Debian:

sudo apt install fonts-noto-cjk

MermaidJS Support

Mermaid diagrams are rendered using the Kroki API (no local installation required). Supported Mermaid version depends on Kroki's implementation (currently Mermaid v11.x).

For Web Claude: Add kroki.io to allowed domains:

  1. Settings (gear icon) → Capabilities
  2. Find "Additional allowed domains"
  3. Add kroki.io

Quick Start

# Basic usage
gospelo-md2pdf report.md

# Specify output file
gospelo-md2pdf report.md output.pdf

# Specify output directory
gospelo-md2pdf report.md -o ./pdf

# Use custom CSS
gospelo-md2pdf report.md --css custom-style.css

# Keep intermediate files for debugging
gospelo-md2pdf report.md --debug

Usage

gospelo-md2pdf <input.md> [output.pdf] [options]

Arguments:
  input.md              Input Markdown file
  output.pdf            Output PDF file (optional)

Options:
  -o, --output-dir DIR  Output directory (default: current directory)
  -c, --css FILE        Custom CSS file
  --debug               Keep intermediate files (HTML, mermaid) in tmp/ directory
  --lang LANG           HTML lang attribute (default: ja)
  -q, --quiet           Suppress output messages
  --verbose             Print verbose output
  -v, --version         Show version
  -h, --help            Show help

Environment Variables

Variable Description Default
MD2PDF_OUTPUT_DIR Output directory Current directory

Note: --output-dir option takes precedence over the environment variable.

Markdown Features

Basic Syntax

# Heading 1
## Heading 2
### Heading 3

Paragraph with **bold** and *italic* text.

- Bullet list
- Another item
  - Nested item

1. Numbered list
2. Another item

> Blockquote

`inline code`

[Link](https://example.com)

Tables

| Column 1 | Column 2 | Column 3 |
|----------|----------|----------|
| A        | B        | C        |
| D        | E        | F        |

Code Blocks

```python
def hello():
    print("Hello, World!")
```

MermaidJS Diagrams

```mermaid
graph TD
    A[Start] --> B[Process]
    B --> C{Decision}
    C -->|Yes| D[Result A]
    C -->|No| E[Result B]
```

Supported diagram types:

  • Flowcharts (graph TD, graph LR)
  • Sequence diagrams (sequenceDiagram)
  • Class diagrams (classDiagram)
  • State diagrams (stateDiagram-v2)
  • ER diagrams (erDiagram)
  • And all other Mermaid diagram types

Note: Tall diagrams are automatically scaled to fit within a single page (max-height: 700px) while preserving aspect ratio.

Special HTML Classes

Use these HTML classes in your Markdown for special styling:

Summary Box (Green)

<div class="summary">
Important summary points here.
</div>

Warning Box (Orange)

<div class="warning">
Warning message here.
</div>

Info Box (Blue)

<div class="info">
Additional information here.
</div>

Pros/Cons

<div class="pros">
Pros: High scalability
</div>

<div class="cons">
Cons: Initial cost
</div>

Disclaimer

<div class="disclaimer">
This report is for informational purposes only.
</div>

Page Break

<div class="page-break"></div>

Python API

from gospelo_md2pdf import convert_md_to_pdf

# Basic usage
convert_md_to_pdf("report.md")

# With options
convert_md_to_pdf(
    input_file="report.md",
    output_file="output.pdf",
    output_dir="./pdf",
    css_file="custom.css",
    keep_html=True,
    lang="ja",
    verbose=True
)

Troubleshooting

Japanese text not rendering

Check if Japanese fonts are installed:

fc-list :lang=ja | head -5

WeasyPrint library errors on macOS

Set the library path:

export DYLD_LIBRARY_PATH=/opt/homebrew/lib:$DYLD_LIBRARY_PATH

Add to ~/.zshrc for persistence:

echo 'export DYLD_LIBRARY_PATH=/opt/homebrew/lib:$DYLD_LIBRARY_PATH' >> ~/.zshrc
source ~/.zshrc

Mermaid diagrams not rendering

  1. Verify network connectivity to kroki.io
  2. For Web Claude: Add kroki.io to allowed domains (Settings → Capabilities → Additional allowed domains)
  3. Check error messages for "Cannot connect to Kroki"

Requirements

  • Python >= 3.10
  • weasyprint >= 60.0
  • markdown >= 3.5.0
  • System: pango, glib, gdk-pixbuf (see Installation)
  • Network: Access to kroki.io (for Mermaid diagrams)

Dependencies and Acknowledgements

This project uses the following open-source libraries. Full license texts are included in the LICENSE file.

Library License Description
WeasyPrint BSD 3-Clause HTML/CSS to PDF converter
Python-Markdown BSD 3-Clause Markdown to HTML converter
Kroki MIT Diagram rendering API

System Libraries (Dynamically Linked)

Library License Description
Pango LGPL 2.0+ Text rendering
GLib LGPL 2.1+ Core utilities
GDK-Pixbuf LGPL 2.1+ Image loading

Note: System libraries are dynamically linked and not bundled with this package.

Fonts (Recommended)

Font License Description
Noto Sans CJK JP OFL 1.1 Japanese font by Google

Note: Fonts are not bundled with this package. Users install them separately.

License

MIT License - see LICENSE for details.

Author

NoStudio LLC (goro-hayakawa@no-studio.net)

Documentation

Links

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

gospelo_md2pdf-1.2.1.tar.gz (20.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gospelo_md2pdf-1.2.1-py3-none-any.whl (16.4 kB view details)

Uploaded Python 3

File details

Details for the file gospelo_md2pdf-1.2.1.tar.gz.

File metadata

  • Download URL: gospelo_md2pdf-1.2.1.tar.gz
  • Upload date:
  • Size: 20.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for gospelo_md2pdf-1.2.1.tar.gz
Algorithm Hash digest
SHA256 8c5bf715baef332a81713bae6a54bbf5ee2639485bc880b73d352dfb4a5f501e
MD5 84e182b456412457e80414efd1779f84
BLAKE2b-256 30eec54c77723aa7eec62faedf0dce5a28143c87fde7e836a3382703ca471228

See more details on using hashes here.

File details

Details for the file gospelo_md2pdf-1.2.1-py3-none-any.whl.

File metadata

  • Download URL: gospelo_md2pdf-1.2.1-py3-none-any.whl
  • Upload date:
  • Size: 16.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.8

File hashes

Hashes for gospelo_md2pdf-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1f80d19481773ccad94f89d1c15eaae422db09decb7146fd5d52f8e92e9adbcb
MD5 cd0861a954d3fb39b0ca3139eac2a61a
BLAKE2b-256 03dd55c056bf19050afe68db5e4eddf7462ace68271531b14a59c3c75fe824db

See more details on using hashes here.

Supported by

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