Markdown 转 PDF 的 5 种方法对比(Pandoc、VSCode、在线工具)
基于当前官方资料,对比 5 种 Markdown 转 PDF 工作流:浏览器工具、Pandoc、VS Code Markdown PDF、浏览器打印与 md-to-pdf CLI,不再使用臆测的跑分数字。
单份文档优先考虑免安装的 /markdown-to-pdf;带引文和出版流程更适合 Pandoc;VS Code 与 CLI 更适合编辑器内操作和自动化。选择应取决于文档特性、可复现性与本地控制需求。
本文依据当前官方能力进行对比,不使用固定秒数或下载体积作为跑分,因为安装耗时与浏览器运行时体积会随系统和版本变化。
适合:一次性转换、代码高亮、数学公式、流程图、零安装。
怎么做:打开 /markdown-to-pdf,粘贴,点 PDF。
安装与首次运行:取决于操作系统、PDF 引擎、缓存状态和文档复杂度,请在自己的环境中实测。
优点:无需本地安装,可在浏览器使用;支持代码高亮、KaTeX、Mermaid、表格、图片和任务列表。免费输出带水印,登录后的免费用户目前总计有 5 次无水印导出。
缺点:单文件 1 MB 上限。一次处理一个文件 —— 批量任务请看 批量转换 Markdown 文件为 PDF。
何时使用:大多数 的一次性 Markdown → PDF 转换。
适合:学术论文、自定义 LaTeX 模板、参考文献引用、一份源文件输出多种格式(PDF + DOCX + EPUB)。
怎么做:
brew install pandoc
brew install --cask basictex # or mactex (platform-dependent)
pandoc input.md -o output.pdf
安装与首次运行:取决于操作系统、PDF 引擎、缓存状态和文档复杂度,请在自己的环境中实测。
优点:久经考验,可脚本化,LaTeX 模板灵活无上限。原生支持参考文献(--bibliography)。可离线运行。书本级排版品质。
缺点:LaTeX 安装包 依平台而定。默认输出是学术论文样式。自定义模板很难。代码高亮要单独 --syntax-highlighting 参数,且按 Web 标准看相当过时。Mermaid 需要插件。
何时使用:你要出书、写论文(带参考文献)、或者要维护三个以上 PDF 模板并希望它们进版本控制。
适合:每天都在 VSCode 里写 Markdown 的人。
怎么做:装 yzane 的「Markdown PDF」插件,右键文件 → Markdown PDF: Export (pdf)。
安装与首次运行:取决于操作系统、PDF 引擎、缓存状态和文档复杂度,请在自己的环境中实测。
优点:在你已经在写代码的地方一键导出。可以通过用户设置改 CSS。默认样式可用。
缺点:第一次导出慢,因为要下载 Chromium。PDF 视觉风格只能改 CSS,自由度有限。开箱不支持 KaTeX —— 需要先装一个 Markdown+Math 插件来渲染。Mermaid 块会按代码渲染,不会变成图。
何时使用:你每周要写 5 份以上 PDF 且编辑器是 VSCode。
适合:Markdown 已经在浏览器里渲染好的页面(GitHub README、GitLab Wiki、文档站)。
怎么做:⌘+P 或 Ctrl+P → 「另存为 PDF」。
安装与首次运行:取决于操作系统、PDF 引擎、缓存状态和文档复杂度,请在自己的环境中实测。
优点:已经在那儿了,不用装。任何渲染好的 HTML 都能用。
缺点:分页会以无法预测的方式切断表格和代码块。代码高亮在 Firefox 打印时容易丢色。默认页眉页脚是 URL + 页码,通常需要手动关掉。如果源页面没渲染 KaTeX 或 Mermaid,PDF 里也不会有。
何时使用:你现在就要一份某个已经渲染好的 Markdown 页面的 PDF,且不太在意品相。
适合:构建流水线、CI/CD、自动化文档。
怎么做:
npm install -g md-to-pdf
md-to-pdf input.md
安装与首次运行:取决于操作系统、PDF 引擎、缓存状态和文档复杂度,请在自己的环境中实测。
优点:可脚本化。每个文档可以用 YAML front-matter 改主题。watch 模式实时预览。装好之后离线可用。
缺点:依赖 Node + Chromium。主题定制只能 YAML + CSS,表达力不如 Pandoc/LaTeX。开箱不支持 Mermaid,需要 markdown-it 插件。
何时使用:你的文档站在 CI 里构建 PDF;你希望 PDF 跟源文件一起进版本控制。
注意:避开旧的 markdown-pdf 包(不带连字符)—— 自 2019 年后未维护,有已知安全公告。md-to-pdf 是后续维护版本。
| 方案 | 安装体积 | 首份 PDF | 代码高亮 | 数学公式 | Mermaid | 适合 |
|---|---|---|---|---|---|---|
/markdown-to-pdf | None | Browser request | yes | yes (KaTeX) | yes | One-offs |
| Pandoc | Pandoc + PDF engine | Setup-dependent | yes | yes | filter | Books, papers |
| VS Code Markdown PDF | Extension + renderer | Setup-dependent | yes | extension-dependent | no | Editor users |
| Browser print | None | Browser request | varies | source-dependent | source-dependent | Rendered pages |
md-to-pdf CLI | Node.js + browser runtime | Setup-dependent | yes | configurable | plugin | CI/CD |
- 大多数读者 →
/markdown-to-pdf,大多数 的场景这就是答案。 - 写学术论文带文献的 → Pandoc。
- 每天都在 VSCode → VSCode 插件。
- DocOps / CI 构建 →
md-to-pdfCLI。 - 现在就要 GitHub README 的 PDF → 浏览器打印,接受粗糙。
Markdown → PDF 工具最大的诱惑是过度工程。要转一份文档就别装东西。要转 1000 份就上 CLI 自动化。中间地带很少能正当化用 Pandoc 来给非学术场景用。
哪种方法保留代码高亮最好?
基于 headless Chromium 的几种(/markdown-to-pdf、VSCode 插件、md-to-pdf CLI),它们都通过真实 Chromium 渲染,所以任何 highlight.js / Prism 主题都能完整带过去。Pandoc 的 --syntax-highlighting 按 Web 标准看相当过时。深入看:保留代码高亮的 Markdown 转 PDF。
哪种支持批量转换?
CLI 天然支持(md-to-pdf chapter*.md)。如果用网页工具做批量,请看 批量把 Markdown 文件转 PDF。
为什么不用 markdown-pdf 而用 md-to-pdf?
markdown-pdf(不带连字符)自 2019 年后未维护,有已知安全公告。md-to-pdf 是当前维护中的方案。
哪种处理中文 / CJK 字体最好?
托管的 /markdown-to-pdf 使用服务端字体环境;本地 Chromium 工具使用其运行环境中的字体;Pandoc 配 XeLaTeX 通常需要显式指定 CJK 字体(如 mainfont:)。发布前务必用实际字符测试。
规模化跑哪种最便宜?
每周 100+ 份 PDF,CI 里跑 md-to-pdf 基本免费(只是算力)。偶尔用,浏览器版零成本。Pandoc 本身免费,但维护模板的工程时间是隐性成本。
该用哪种取决于你的用量。一份 PDF → 浏览器工具。1000 份 PDF → CI 里的 CLI。带文献的书 → Pandoc。在没尝过轻量方案的痛之前,别上重武器。
上文的产品限制与命令已按以下当前一手资料核对:
打开 MarkdownToImage 渲染 Markdown,再按工作流选择输出格式。批量自动化前,先用一份有代表性的文档验证。