Markdown 转 PDF 多语言横评:15 种文字、可复现的测试
简短回答
默认设置下,Pandoc 的 LaTeX 引擎要么直接报错(pdflatex),要么悄悄丢掉所有非拉丁文字(xelatex、lualatex)。基于 Chromium 的工具(md-to-pdf、MarkPDF)在装有相应字体的机器上 15 种文字都能正确显示。可以下载测试文件,用同样的命令检查你自己的环境。
测试文件与方法
测试文件:markpdf-multilingual-test.md(简体中文、繁体中文、日文、韩文、汉字字形差异、阿拉伯文、波斯文、乌尔都文、印地文、孟加拉文、泰文、泰米尔文、越南文、西里尔/希腊/拉丁扩展字母,以及代码、表格、链接和多页正文)。
- 环境:Windows 11,系统默认字体(含微软雅黑、Yu Gothic、Malgun Gothic、Nirmala UI、Leelawadee UI),测试日期 2026-11-06。
- 字形:用
pdftoppm渲染页面图片,人工检查。 - 文字提取:
pdftotext -enc UTF-8,每种文字搜索一个短语,再加文件最后一行。 - 页数和大小:
pdfinfo和文件大小。除表中注明外均为默认设置。
测试结果
| 工具与版本 | 命令 | 结果 | 文字可提取 | 页数 / 大小 |
|---|---|---|---|---|
| Pandoc 3.5 + pdflatex(MiKTeX 25.12) | pandoc test.md -o out.pdf | 报错退出:Unicode character 学 (U+5B66) not set up for use with LaTeX | – | – |
| Pandoc 3.5 + xelatex(XeTeX 4.16) | --pdf-engine=xelatex | 生成了 PDF,但中日韩、阿拉伯文、印度系文字、泰文、泰米尔文、西里尔和希腊字母全部空白 | 仅拉丁字母和越南文 | 4 / 28 KB |
| Pandoc 3.5 + xelatex + 中文字体 | --pdf-engine=xelatex -V CJKmainfont="Microsoft YaHei" | 波斯文中的零宽不连字导致 TeX 报错。只含中日韩的文件可以生成,但韩文缺失(该字体没有韩文字形) | – | – |
| Pandoc 3.5 + lualatex(LuaHBTeX 1.24) | --pdf-engine=lualatex | 与 xelatex 相同:非拉丁文字缺失 | 仅拉丁字母和越南文 | 4 / 40 KB |
| md-to-pdf 5.2.5(Chrome 157) | md-to-pdf test.md | 所有文字正常(使用 Windows 系统字体)。阿拉伯文段落按从左到右排列;汉字字形随 lang 属性变化 | 14 项全部 | 4 / 203 KB |
| MarkPDF 文字版(Chrome 157) | 转换器 → 下载 PDF(文字版) | 所有文字使用 Noto 字体正确显示;RTL 段落从右到左;lang="ja" 的文字为日文字形 | 14 项全部 | 5 / 511 KB |
| MarkPDF 图片版(html2canvas 1.4.1) | 转换器 → 快速下载(图片版) | 所有文字正常,与预览一致 | 无(页面是图片) | 6 / 1,883 KB |


在 MarkPDF 中试试同样的测试内容
打开转换器结果说明
- LaTeX 引擎需要为每种文字单独指定字体。 不指定时,xelatex 和 lualatex 不会报错,而是直接丢字,所以要逐页检查。可用的命令见 Pandoc “Unicode character … not set up” 报错 和 阿拉伯文、波斯文字母断开。
- 基于浏览器的工具依赖系统字体。 md-to-pdf 在这里全部正常,是因为 Windows 自带这些文字的字体;在精简的 Linux 服务器或 Docker 镜像里,同样的命令通常会显示方块,需要先安装中日韩和印度系字体。
- 分页:生成了 PDF 的工具都没有把一行文字切成两半。MarkPDF 图片版会把整块内容移到下一页,留白更多,也多了一页。
- MarkPDF 的局限:图片版没有文字层;文字版要通过浏览器的打印窗口,需要自己选择“另存为 PDF”;没有 LaTeX 那样的排版功能(交叉引用、参考文献)。
Typora、Obsidian、VS Code 插件等图形界面工具需要手动测试,测试后会连同版本号补充到本页。
常见问题
我能复现这些结果吗?
可以。下载测试文件,安装表中的版本,运行相同的命令即可。结果与系统字体有关,对比时请注明操作系统和已安装的字体。
为什么 md-to-pdf 在这里正常,在我的服务器上却出方块?
它用 Chromium 渲染,依赖机器上安装的字体。请在服务器或 Docker 镜像中安装中日韩和印度系字体(例如 Noto 字体包)。
为什么 MarkPDF 文字版文件更大?
它为每种文字嵌入了 Noto 字体的子集,这样 PDF 在任何设备上看起来都一样。