Markdown 非常适合写作,但收到文档的人往往希望看到的是网页或 PDF。好消息是:转换 Markdown 很简单,大多数情况下并不需要复杂的工具链。
下面介绍四种方法,从最快捷到最可定制,另外还有一些能让输出效果更专业的技巧。
快速对比
| 方法 | HTML | 需要安装 | 最适合 | |
|---|---|---|---|---|
| 浏览器编辑器导出 | ✅ | ✅(打印) | 无 | 日常文档、快速分享 |
| VS Code + 扩展 | ✅ | ✅ | 编辑器 + 扩展 | 已经在用 VS Code 写作的人 |
| Pandoc | ✅ | ✅ | Pandoc(+ PDF 引擎) | 书籍、论文、自动化流程 |
| 脚本(markdown-it、marked) | ✅ | — | Node.js | 自定义网站和构建步骤 |
1. 从浏览器编辑器中导出
最快的途径是使用能直接导出的编辑器。在 Markdown Preview Editor 中打开或粘贴您的文档——无论是在线版还是您自己部署的副本——然后使用顶部栏中的按钮:
- HTML 会生成一个独立的
.html文件。样式、代码高亮、公式、图表以及与文档一起打开的图片都会被嵌入其中,因此文件在任何电脑上都能正确显示,可以直接作为邮件附件发送或上传到任何地方。 - 打印 会打开浏览器的打印对话框。将目标打印机选为另存为 PDF,即可得到 PDF 文件。只会打印渲染后的文档——不包含工具栏,也不包含编辑器。
- 保存 会将 Markdown 源码下载为
.md文件。
由于一切都在浏览器中完成,那些您不想上传到在线转换工具的文档,也可以放心用这种方式转换。
从打印对话框获得干净的 PDF
- 根据每页想容纳的文字量,将边距设为默认或最小。
- 关闭页眉和页脚,去掉页面边缘的日期和网址。
- 如果想保留代码块背景和表格条纹,请开启背景图形。
- 打印时使用浅色主题——既省墨,在纸上也更易阅读。
2. VS Code 搭配扩展
VS Code 内置了 Markdown 预览,但没有导出按钮。Markdown PDF 或 Markdown Preview Enhanced 等扩展提供了导出 HTML 和 PDF 的命令。如果 VS Code 已经是您的主力编辑器,这种方式很方便;不过输出样式取决于所用的扩展,其中一些扩展在首次使用时还会下载一个无头浏览器。
3. Pandoc——万能转换工具
Pandoc 能在数十种格式之间相互转换,是书籍、学术论文和自动化文档的标准工具。安装后,只需一条命令即可完成转换:
bash# Markdown 转为完整的 HTML 页面
pandoc report.md -o report.html --standalone --metadata title="Report"
# Markdown 转为 PDF(需要 PDF 引擎,例如 LaTeX 发行版)
pandoc report.md -o report.pdf --pdf-engine=xelatex
# Markdown 转为 Word,如果有人非要不可的话
pandoc report.md -o report.docx
不加 --standalone 时,Pandoc 只会输出一段 HTML 片段——如果要把它插入现有页面,这样正好合适。输出 PDF 需要单独的引擎:LaTeX 发行版,或 WeasyPrint 这类基于 HTML 的引擎。Pandoc 的优势在于可控性:模板、引文、章节编号和交叉引用。
4. 几行 JavaScript 代码
如果 Markdown 是您自己网站或构建流程的一部分,使用库是最灵活的选择。以 markdown-it 为例:
jsimport MarkdownIt from 'markdown-it';
import { readFileSync, writeFileSync } from 'node:fs';
const md = new MarkdownIt({ linkify: true, typographer: true });
const body = md.render(readFileSync('README.md', 'utf8'));
writeFileSync('README.html', `<!doctype html><meta charset="utf-8"><title>README</title>${body}`);
通过插件可以添加脚注、任务列表、数学公式等功能。请记住,输出的安全性取决于输入:如果 Markdown 来自他人,发布前请先对 HTML 进行净化(例如使用 DOMPurify)。
让 HTML 和 PDF 输出更出色的技巧
从一个清晰的标题开始
转换工具会从文件名、第一个标题或显式的元数据中获取文档标题。为每个文档起一个有描述性的文件名,并只使用一个 # 标题,这样导出的 HTML 和 PDF 无论在下载文件夹还是浏览器标签页中都能一眼认出。
把图片放在文档旁边
使用 images/chart.png 这样的相对路径,并把文件放在同一个文件夹中。在 Markdown Preview Editor 中打开整个文件夹时,图片会被解析并嵌入到导出的 HTML 中。预览中未加载的远程图片同样不会被嵌入。
控制分页
Markdown 没有分页语法。对于要打印的文档,请用 ## 标题开始较大的章节,并让表格保持简短——浏览器会尽量避免把表格行拆开,但很长的表格仍然会延续到下一页。在 Pandoc 等允许原始 HTML 和内联样式的工具中,可以插入 <div style="page-break-after: always"></div>。
导出前检查公式和图表
在大多数工具中,数学公式和图表是由 JavaScript 库渲染的。请先在预览中检查它们——参阅我们的 Markdown 数学公式和 Mermaid 图表指南。在 Markdown Preview Editor 导出的 HTML 中,它们以现成的标记和图片形式保存,因此导出的文件不需要任何脚本。
有意识地选择主题
深色的 HTML 导出在屏幕上看着舒服,但并不适合打印在纸上。请根据读者使用的媒介来导出。
常见问题
如何免费将 Markdown 转换为 PDF?
在 Markdown Preview Editor 等 Markdown 预览工具中打开文档,点击打印,然后在打印对话框中选择另存为 PDF。如果需要自动化或书籍排版式的输出,可以使用免费的 Pandoc 命令行工具。
如何不安装任何软件就把 Markdown 转换为 HTML?
使用带有 HTML 导出功能的浏览器编辑器。Markdown Preview Editor 可以直接在浏览器中生成包含样式的独立 HTML 文件。
导出的 HTML 会包含图片吗?
与文档一起打开的本地图片会被嵌入 HTML 文件,因此该文件可以独立使用。仍存放在远程服务器上的图片不会被嵌入。
可以把 Markdown 转换为 Word(DOCX)吗?
可以,使用 Pandoc:pandoc input.md -o output.docx。也可以先导出 HTML,再用 Word 打开,大部分格式都能保留。