Batch Markdown to PDF converter using Pandoc + Tectonic + Mermaid-CLI
Project description
MD2PDF Pro
批量Markdown转PDF转换器 | Batch Markdown to PDF Converter
功能特性
- Markdown转PDF - 支持单文件或批量转换
- Mermaid图表 - 自动渲染Mermaid代码块为PDF图片
- LaTeX数学公式 - 原生支持数学公式渲染
- 代码高亮 - 多语言语法高亮
- 中文排版 - 完整的中文支持
- 并行处理 - 高效批量转换
- 文件监控 - 自动监听文件变化并转换
安装
1. 安装Python包
pip install md2pdf-pro
或从源码安装:
git clone https://github.com/one1d/md2pdf-pro.git
cd md2pdf-pro
pip install -e .
2. 安装系统依赖
macOS:
brew install pandoc tectonic graphviz librsvg node
npm install -g @mermaid-js/mermaid-cli
Linux (Ubuntu/Debian):
sudo apt-get install pandoc texlive-base graphviz librsvg2-bin nodejs npm
sudo npm install -g @mermaid-js/mermaid-cli
# 安装 Tectonic: https://tectonic.typesafe.org/
Windows:
# 安装 Chocolatey
choco install pandoc graphviz nodejs
# 安装 Tectonic: https://tectonic.typesafe.org/
# 安装 Mermaid-CLI: npm install -g @mermaid-js/mermaid-cli
3. 验证安装
md2pdf doctor
快速开始
单文件转换
md2pdf convert document.md -o output/
批量转换
# 转换当前目录所有md文件
md2pdf batch "*.md" -o output/
# 递归转换
md2pdf batch "docs/*.md" -o output/ -r
监听模式
# 监听文件变化自动转换
md2pdf watch ./docs -o output/
使用指南
命令行选项
convert - 单文件转换
md2pdf convert <input.md> [OPTIONS]
选项:
-o, --output PATH 输出PDF路径
-c, --config PATH 配置文件路径
-t, --template PATH Pandoc模板
-w, --workers N 并发数 (默认: 8)
batch - 批量转换
md2pdf batch "<pattern>" [OPTIONS]
选项:
-o, --output PATH 输出目录
-c, --config PATH 配置文件路径
-r, --recursive 递归处理子目录
-i, --ignore TEXT 忽略的模式
-w, --workers N 并发数 (默认: 8)
--dry-run 模拟运行
watch - 监听模式
md2pdf watch <directory> [OPTIONS]
选项:
-o, --output PATH 输出目录
-r, --recursive 监听子目录 (默认: True)
-d, --debounce N 防抖延迟ms (默认: 500)
-w, --workers N 并发数 (默认: 8)
config - 配置管理
# 初始化配置文件
md2pdf init
# 显示当前配置
md2pdf config-show
# 指定配置文件
md2pdf config-show -c custom.yaml
doctor - 环境检查
md2pdf doctor
配置文件
详细配置说明请参考 配置文档。
创建 md2pdf.yaml 配置文件:
version: "1.0.0"
mermaid:
theme: default # default, dark, forest, neutral
format: pdf # pdf, svg
width: 1200
pandoc:
pdf_engine: tectonic # tectonic, xelatex, lualatex
highlight_style: tango
math_engine: mathspec
processing:
max_workers: 8
timeout: 300
output:
output_dir: ./output
temp_dir: /tmp/md2pdf
optimize_pdf: true
font:
cjk_primary: "PingFang SC"
示例
带Mermaid图表的Markdown
```markdown
我的文档
流程图
```mermaid flowchart TD A[开始] --> B{判断} B -->|是| C[处理1] B -->|否| D[处理2] ```
### 带数学公式
\`\`\`markdown
## 数学公式
行内公式: $E = mc^2$
块公式:
$$
\\int_{-\\infty}^{\\infty} e^{-x^2} dx = \\sqrt{\\pi}
$$
\`\`\`
项目结构
md2pdf-pro/
├── src/md2pdf_pro/
│ ├── __init__.py # 包初始化
│ ├── config.py # 配置管理 (Pydantic)
│ ├── preprocessor.py # Mermaid预处理
│ ├── converter.py # Pandoc转换引擎
│ ├── parallel.py # 并行处理
│ ├── watcher.py # 文件监控
│ └── cli.py # CLI入口
├── tests/
│ ├── conftest.py # pytest配置
│ ├── unit/ # 单元测试
│ └── integration/ # 集成测试
├── pyproject.toml # 项目配置
├── requirements.txt # Python依赖
├── Makefile # 构建脚本
└── .gitignore
开发
# 安装开发环境
make dev
# 运行测试
make test
# 代码检查
make lint
# 格式化代码
make format
许可证
MIT License - see LICENSE for details.
感谢
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file md2pdf_pro-1.0.0.tar.gz.
File metadata
- Download URL: md2pdf_pro-1.0.0.tar.gz
- Upload date:
- Size: 21.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e4d12a500ec0e766e6065b47bed8dd2dc25bbcb9f2fcb5586ecd2cdf140344f1
|
|
| MD5 |
061e001605c9e5e9319696f76260826d
|
|
| BLAKE2b-256 |
932115826e67d7ce9b232ca6a04a14802d6d05cf3da8a231f7f86156915c0be6
|
Provenance
The following attestation bundles were made for md2pdf_pro-1.0.0.tar.gz:
Publisher:
publish.yml on one1d/md2pdf-pro
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
md2pdf_pro-1.0.0.tar.gz -
Subject digest:
e4d12a500ec0e766e6065b47bed8dd2dc25bbcb9f2fcb5586ecd2cdf140344f1 - Sigstore transparency entry: 1004786631
- Sigstore integration time:
-
Permalink:
one1d/md2pdf-pro@aeb451eed6e40603b15ea06b4ebba78df369767f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/one1d
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@aeb451eed6e40603b15ea06b4ebba78df369767f -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file md2pdf_pro-1.0.0-py3-none-any.whl.
File metadata
- Download URL: md2pdf_pro-1.0.0-py3-none-any.whl
- Upload date:
- Size: 22.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
53d4b38db93da80d7a9915a3d5466355a2a76e28c66b8b3cd4ac7363feeb5be1
|
|
| MD5 |
5258481038535edcd989c9132f2ef2db
|
|
| BLAKE2b-256 |
36f6a0294e3971c5db2ac170348bfa4e30d3cce909c45c8a6fab50051856c0a8
|
Provenance
The following attestation bundles were made for md2pdf_pro-1.0.0-py3-none-any.whl:
Publisher:
publish.yml on one1d/md2pdf-pro
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
md2pdf_pro-1.0.0-py3-none-any.whl -
Subject digest:
53d4b38db93da80d7a9915a3d5466355a2a76e28c66b8b3cd4ac7363feeb5be1 - Sigstore transparency entry: 1004786632
- Sigstore integration time:
-
Permalink:
one1d/md2pdf-pro@aeb451eed6e40603b15ea06b4ebba78df369767f -
Branch / Tag:
refs/heads/main - Owner: https://github.com/one1d
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@aeb451eed6e40603b15ea06b4ebba78df369767f -
Trigger Event:
workflow_dispatch
-
Statement type: