带表格的Markdown转PDF:打印出来依然清楚好读
作者 pdftomd.tools 团队 · 更新于 · 阅读约 6 分钟
想把带表格的Markdown转PDF又不把表格弄乱,就写简单的 GFM 表格,宽度控制在页面以内,再用一个绝不把一行拦腰切断的渲染器导出,比如我们的 MD转PDF 工具。导出后打开 PDF 检查三件事:每一列都看得到,分页处的行保持完整,单元格里的文字能选中、能搜索。

简短回答:GFM 表格 + 不切断行的渲染器
Markdown 表格来自 GitHub Flavored Markdown 的扩展语法:一行表头、一行分隔线,再加若干数据行,用竖线分开。像样的导出工具都能识别。真正的差别出现在表格碰到页面边缘的时候:要么是右边(列太多),要么是底部(行太多)。
打印出来的表格好不好读,取决于三点:表格相对页面有多宽,分页时发生了什么,导出的是不是真正的文字。下面逐一讲,数据来自我们自己的导出器,测于 2026 年 10 月 18 日。

怎样写出打印效果好的表格
Markdown表格转PDF出问题,多半是源文件里就埋下了。养成几个习惯就能避开大部分:
- 单元格要短。 长说明放到表格下方的段落里,单元格里只留一个短关键词。
- 数字要对齐。 分隔行写成
---:就是右对齐,打印出来数字一眼就能比较。 - 一定要有表头。 GFM 规定必须有,而且表格延续到第二页时,读者找的就是这一行。
- 避免没有空格的长字符串。 网址和文件路径没法在空格处换行,会把整列撑宽。缩短它们,或者挪到表格下面做成脚注式列表。
- 单元格里的竖线要转义,写成
\|,否则这一行会多出一列。
| Task | Owner | Status |
| :------------- | :---- | --------: |
| Draft the brief | Dana | Done |
| Review tables | Lee | In review |
| Export the PDF | Sam | Next |导出前,先按接近打印的宽度看一眼表格。在我们的导出器里,A4 正文宽度大约是 680 个 CSS 像素。如果在窄预览里已经出现横向滚动条,印到纸上就会很挤。
宽表格:A4 放不下所有列时怎么办

宽表格是 PDF 导出最容易悄悄出错的地方。我们开始为这篇文章做测试时,用自己的工具导出一张 9 列的表格,9 个表头单元格里只有 5 个完整落在页面内,最后一列完全看不到,其余部分都跑到了右边距外面。我们当天就改了导出器。现在会超出页面的表格会让单元格文字自动换行来适配宽度,重新测试时 9 列全部在页面内,没有文字越过右边距。

适配总比丢列强,但不算好看:特别窄的单元格会把单词拆开。PDF 里的宽表格还有四种更好的处理方式,建议按这个顺序试:
- 删掉或合并列,去掉读者在纸上用不到的列。
- 拆成两张表,两张表共用一个关键列,比如编号或名称。
- 行列转置,让很多列变成行。
- 横向打印。 我们的导出器只生成纵向 A4。基于 Chromium 的导出工具支持
@page { size: A4 landscape; }这样的 CSS 规则(MDN:size)。
长表格跨页
长表格跨页有两种坏法:一行被切开,上半截在这一页、下半截在下一页;或者第二页没有表头,读者分不清哪一列是什么。只要表格超过一页,这两点在带表格的Markdown转PDF时都很关键。我们用一张 60 行、每行折成两行文字的表格做了测试。
| 导出工具 | 页数 | 被切开的行 | 带表头的页 |
|---|---|---|---|
| pdftomd.tools MD转PDF | 4 | 0 | 4 页中 1 页 |
| Chrome 打印为 PDF(Chrome 155.0.8059.84) | 3 | 0 | 3 页中 3 页 |

我们的导出器保证每一行完整,但不会在后续页重复表头。Chrome 两样都做到了。CSS 2.1 规范允许这样做,但没有强制要求:
“打印用户代理可以在表格所跨的每一页上重复表头行。”
如果现在用我们的工具就需要每页都有表头,可以把长表格拆成一页一段,自己在每段开头补上表头行。在基于 HTML 的导出工具里,tr { break-inside: avoid; }(MDN)会让浏览器尽量不切断行。
Markdown表格转PDF:浏览器工具 vs VS Code vs Pandoc
三条路都能把带表格的Markdown转PDF,区别在于安装门槛和可控程度。
| 方式 | 渲染原理 | 表格实际表现 |
|---|---|---|
| 我们的浏览器工具 | 在浏览器里排版,用 pdf-lib 写入文字 | 行保持完整;表头不重复;宽表格自动适配 |
| VS Code + Markdown PDF 扩展 | 通过 Chrome、Edge 或 Chromium 打印 | 支持自定义样式表和横向设置 |
| Pandoc | 默认经由 LaTeX 转换 | 使用 longtable 环境,表格可以跨多页 |
VS Code 方面,Markdown PDF 扩展 的文档写明了用于自定义 CSS 的 markdown-pdf.styles 设置,以及纵向、横向选项。它用 Chromium 浏览器打印,和上表 Chrome 那一行是同一个引擎;扩展本身我们没有测过。
Pandoc 方面,Pandoc 手册 说 LaTeX 输出默认使用 longtable,表格可以跨过分页继续。手册还说,如果管道表格里有一行超过列宽,各列的相对宽度会按分隔行里短横线的数量来分配。也就是说,不用 HTML 也能把某一列调宽。
pandoc report.md -o report.pdf检查 PDF:文字能选中,单元格能搜索

带表格的Markdown转PDF,最后一步要查的是文字层。只有单元格是真正的文字,导出表格才有意义。有些导出工具,包括我们工具的备用模式,会把每一页存成图片放进 PDF:看着没问题,但不能搜索、不能复制,读屏软件也读不出来。检查只要十秒:打开 PDF,按 Ctrl+F(或 Cmd+F),搜一个只出现在某个单元格里的词,再选中一行粘贴出来看看。
我们的导出器写入的是真正的文字,并嵌入字体子集。在往返测试里,我们把四张表格打印成 PDF,再用我们的 PDF转Markdown 工具 转回来,17 行中有 17 行和源文件完全一致,包括一个转义的竖线和右对齐的数字。反方向的做法,请看我们的 PDF表格转Markdown 指南。
参考来源
- GitHub Flavored Markdown Spec, 4.10 Tables (extension) — GitHub, 2019
- CSS 2.1 Specification, 17 Tables — W3C, 2011
- break-inside — MDN Web Docs
- size (@page descriptor) — MDN Web Docs
- Pandoc User’s Guide — pandoc.org
- Markdown PDF (VS Code extension) — yzane, Visual Studio Marketplace
常见问题
带表格的Markdown怎么转成PDF?
用竖线和表头写 GFM 表格,宽度控制在页面以内,再用不切断行的工具导出。导出后在 PDF 里检查有没有被截掉的列、被切开的行,文字能不能选中。
为什么 PDF 里表格的列被截掉了?
表格比可打印区域宽,导出工具又没有缩小它。可以删列或拆表、行列转置,或者横向打印。我们的导出器现在会让宽表格的文字换行,适配页面宽度。
表头会在每一页重复吗?
看导出工具。在我们的测试里,Chrome 打印为 PDF 时每页都重复了表头;我们的导出器只在第一页显示,所以如果读者需要,请把长表格拆开。
能横向打印 Markdown 表格吗?
我们的导出器不行,它只生成纵向 A4。基于 Chromium 的工具可以在样式表里写 @page { size: A4 landscape; },VS Code 的 Markdown PDF 扩展也有方向设置。
PDF 里的表格文字能搜索吗?
用我们的导出器可以:单元格是嵌入了字体的真正文字。有些工具存的是页面图片,搜一个单元格里的词就能确认。
把 PDF 再转回 Markdown,跨页的表格会自动合并吗?
不会。转回来是每页一张表;删掉重复的表头行和分隔行就能合并。具体做法见我们的 表格指南。

