写技术文档的时候,经常需要把 Markdown 转成 PDF 分享。Markdown 写起来顺手,但直接导出 PDF 总是差点意思。
今天记录一下我常用的几种方法,各有优劣。
Pandoc 是万能文档转换器,配合无头浏览器可以输出高质量 PDF。
步骤:
pandoc article.md -o output.html
chromium --headless --print-to-pdf=output.pdf \
--print-to-pdf-no-header \
--print-to-pdf-landscape=false \
output.html
优点:
- 渲染效果和浏览器一致,CSS 支持完整
- 代码高亮、表格、图片都能正确处理
- 支持自定义 CSS 样式
缺点:
- 需要安装 Chromium/Edge
- 跨平台可能需要调整
如果你需要输出学术风格的 PDF,LaTeX 是最好的选择。
步骤:
pandoc article.md -o output.pdf \
--pdf-engine=xelatex \
-V mainfont="Songti SC" \
-V geometry:margin=1in
需要的包:
texlive或MacTeX- 中文字体支持(
xeCJK或ctex)
优点:
- 排版质量最高
- 支持复杂公式、交叉引用
- 学术 / 出版级输出
缺点:
- 安装包很大(几个 GB)
- 样式定制需要 LaTeX 知识
- Windows 上配置复杂
如果你用 Node.js 技术栈,这个工具很顺手。
安装:
npm install -g markdown-pdf
使用:
markdown-pdf article.md -o output.pdf
支持的功能:
- 代码语法高亮
- 自定义 CSS
- 页眉页脚
- 页面大小、边距
// 自定义配置
const markdownPdf = require('markdown-pdf')
const fs = require('fs')
markdownPdf({
cssPath: './style.css',
pageSize: 'A4',
margins: {top: '1cm', bottom: '1cm'}
}).from('./article.md').to('./output.pdf', () => {console.log('PDF generated')
})
优点:
- 零配置,上手简单
- Node.js 生态集成方便
- 可以编程化处理
缺点:
- CSS 支持有限
- 复杂布局可能出问题
用 Python 的 reportlab 库可以完全控制 PDF 生成。
from markdraft import Markdraft
md = Markdraft()
pdf = md.convert('article.md')
pdf.save('output.pdf')
或者用更底层的:
import markdown
from reportlab.lib.pagesizes import A4
from reportlab.platypus import SimpleDocTemplate, Paragraph, Preformatted
from reportlab.lib.styles import getSampleStyleSheet
with open('article.md', 'r') as f:
content = f.read()
html = markdown.markdown(content)
doc = SimpleDocTemplate('output.pdf', pagesize=A4)
styles = getSampleStyleSheet()
story = [Paragraph(html, styles['Normal'])]
doc.build(story)
优点:
- 完全可控
- 可以批量处理
- 适合自动化 pipeline
缺点:
- 需要写代码
- 样式定制工作量大
| 方法 | 质量 | 难度 | 依赖 | 适用场景 |
|---|---|---|---|---|
| Pandoc + 浏览器 | ⭐⭐⭐⭐ | 低 | Chrome/Edge | 日常文档、技术博客 |
| Pandoc + LaTeX | ⭐⭐⭐⭐⭐ | 高 | TeX Live | 学术论文、正式出版 |
| markdown-pdf | ⭐⭐⭐ | 低 | Node.js | 快速转换、简单文档 |
| Python 脚本 | ⭐⭐⭐ | 高 | Python | 批量处理、自动化 |
- 日常使用 :Pandoc + 浏览器,零配置,效果好
- 正式文档 :Pandoc + LaTeX,一次配置,长期受益
- 自动化场景 :Python 脚本,接入 CI/CD pipeline
- 快速预览 :markdown-pdf,随时随地转换
END
如果你有其他好用的方法,欢迎分享。
正文完