PDF表格转Markdown表格

作者 pdftomd.tools 团队 · 更新于 · 阅读约 6 分钟

PDF表格转Markdown,要用一个能从文字层重建单元格的转换器,再把结果和原页面对照一遍。有框线的网格和对得很齐的列转得很好;合并单元格、旋转的表格和跨页表格需要手动修改。我们的 在线PDF转MD工具 会输出可以直接编辑的 GFM 管道表格。

插图:PDF表格转Markdown,PDF 页面上的框线表格变成纯文本管道表格

PDF 表格为什么会乱:PDF 存的是带坐标的文字,不是单元格

在做PDF表格转Markdown之前,先弄清文件里到底有什么。电子表格知道“12 $”在第 3 行第 2 列,PDF 通常不知道。页面里只有放在 x、y 坐标上的文字片段,以及另外画出来的框线(如果有的话),PDF 标准 ISO 32000-2 描述的就是这种结构。带标签的 PDF 可以携带表格结构,但大多数导出的报告和发票要么没有标签,要么标签不可靠,转换器没法依赖。

插图:页面上带位置标记的零散文字被归拢成整齐的单元格网格
转换器得自己推断网格:左边是带坐标的文字,右边是单元格。

所以任何想把PDF表格转成Markdown的工具,都要做一番推理。它读取文字和坐标(我们用的是 pdf.js),寻找线条,再判断列和行在哪里。遇到合并单元格、换行不规则的文字,或者整张表侧过来放的时候,推断就更难了。

Markdown 表格能表达什么(GFM 管道表格)

基础 Markdown 没有表格。常用语法来自 GitHub Flavored Markdown:一张 GFM 管道表格由一行表头、一行短横线组成的分隔行,以及任意多行数据组成。分隔行里的冒号决定左对齐、右对齐还是居中。单元格里的竖线写作 \|。

| Plan     | Price | Seats     |
| :------- | ----: | :-------- |
| Free     |    $0 | 1         |
| Team     |   $12 | 10        |
| Business |   $49 | Unlimited |
一张 GFM 管道表格:表头行、带对齐方式的分隔行、数据行。
“块级元素不能插入表格中。”
GitHub Flavored Markdown Spec, 第 4.10 节,Tables (extension)(译文)

这条规则划定了所有转换的上限。单元格里可以放行内文字、链接和代码,但不能放列表、第二个段落或嵌套表格。也没有合并单元格、第二行表头或表格标题的语法。凡是超出一行表头加简单网格的内容,都得简化。

有框线、无框线和合并单元格:分别会怎样

插图:三种表格样式并排,有框线网格、无框线表格和带合并单元格的网格

表格有没有框线,决定了工具怎样找单元格。我们的工具会尝试两种策略:

  • 有框线的表格 在单元格之间画了线。这些线构成网格,行和列可以直接从线条读出来,是最稳定的一类。
  • 无框线的表格 没有线,只有排成列的文字。转换器会找至少三行空隙对齐的文字,同时防止把列表、双栏正文或碰巧对齐的段落误认成表格。
  • 合并单元格 横跨两列或更多列。Markdown 无法表示合并,所以文字放进第一个单元格,被覆盖的单元格留空。

单元格里文字换行是另一个常见陷阱。三行文字的单元格仍然只是一个单元格,粗糙的转换器却会把它变成三行。我们的转换器会把换行的文字重新合并成一个单元格,不论内容是顶端对齐还是垂直居中。

分步操作:在浏览器里把PDF表格转成Markdown

  1. 打开转换器,把文件拖进去。不会上传任何内容,页面在本地读取文件并立刻开始转换。
  2. 看一下预览下方的摘要。它会显示找到了几张表,少了一张马上就能发现。
  3. 把每张 Markdown 表格和原文对照。先数列数,再检查第一行和最后一行。
  4. 复制 Markdown 或下载 .md 文件,剩下的在编辑器里修改。
截图:我们的转换器把办公软件导出的 PDF 表格转成 Markdown 管道表格,单元格里的竖线已转义
截图:一张从办公软件导出的表格。单元格“Pen | blue”变成 Pen \| blue,表格依然有效。

大多数人会跳过第 3 步。一张表乍看没问题,其中一行却可能整体左移了一列。页面其余部分的检查方法,见我们的通用指南 保留格式地转换。

手动修表(以及用 CSV 兜底)

转换完成后,我们最常做的修改有这几种:

  • 合并单元格。 Markdown 不支持合并,可以在每个被覆盖的单元格里重复这个值,或者只留在第一个单元格,再在表格下方加一条备注。
  • 被分页切开的表格。 删掉多出来的表头行和分隔行,几段就能重新拼成一张表。在下面的测试里,每一行都完整跨过了分页,只有接缝处需要处理。
  • 缺少表头行。 如果第一行已经是数据,就自己加一行表头。没有表头的管道表格是无效的。
  • 列数不一致。 数一数每行的竖线。单元格少的行,GFM 渲染器会补空单元格;多的行会被截掉。
截图:带合并单元格的表格转成 Markdown,合并的文字在第一个单元格,后面跟一个空单元格
截图:PDF 里“Not reported”横跨两列。在 Markdown 里它放在第一个单元格,后面是一个空单元格。

如果表格太宽或太不规则,不适合写成管道表格,CSV 是个不错的退路。把这些行复制到电子表格里整理好,然后把 CSV 和 Markdown 文件放在一起,或者把简化后的表格贴回去。转换不必非此即彼。

我们的测试集:12 种表格版式及结果

为了检验PDF表格转Markdown的效果,我们维护着一套 12 个测试 PDF,用 reportlab 和 LibreOffice 生成,覆盖上面说到的版式,另外还有三个不应该识别出表格的文件。转换器每次改动都要跑一遍。这些是合成的测试文件,不是真实 PDF 的抽样,所以请把结果当成“每种版式会发生什么”的地图,而不是成功率。

我们的测试:各版式预期与实际找到的表格数(pdftomd.tools 团队,2026 年 10 月 18 日)
版式预期找到结果
有框线的网格11通过
办公软件导出的框线网格,单元格里有竖线11通过
无框线,数字右对齐11通过
有框线,单元格内文字换行11通过
无框线,单元格内文字换行11通过
无框线,多行单元格垂直居中11通过
只有表头下一条线,夹在正文和列表之间11通过
同一页上一张有框线表和一张无框线表22通过
有框线,一个单元格横跨两列11通过(合并单元格已拆开)
双栏正文(不应识别出表格)00通过
段落和编号列表(不应识别出表格)00通过
旋转 90 度的表格00通过
旋转的表格是已知限制:旋转 90 度的文字不会被识别为表格。

为这篇文章我们又做了两项测试。第一项是往返测试:用我们自己的工具把四张 Markdown 表格导出成 PDF,再转回来。四张都被识别出来,17 行中 17 行与原文一致,包括一个转义的竖线和右对齐的数字。第二项是一张 60 行的表格,我们的工具把它排成了四页。转回来得到四张表,每页一张,60 行一行不少;第二到第四页的第一行被提升成了表头,正是上面说的接缝问题。

什么时候需要版面分析模型

读取文字层的工具转换表格又快又不用上传,但有些表格超出了它的能力。扫描的表格在 OCR 加上文字之前,根本没有可读的文本。表头层层嵌套、单元格跨行跨列的密集学术表格,需要一个把页面当作图像来看的模型。

  • Docling 声称支持表格结构和阅读顺序,可以用 Python 在本地运行。
  • marker 会整理表格格式,据其文档,开启可选的 LLM 模式后能合并跨页表格。商用前请先确认其模型权重的许可证。

两者都要更多安装配置,而且仍然需要人工检查。如果每周只有几张表,就在浏览器里把PDF表格转成Markdown,手动修好接缝,把重型工具留给真正需要的文件。

常见问题

PDF表格能自动转成Markdown吗?

以文字形式保存的表格可以。有框线的网格和对齐良好的无框线表格,用读取文字层的转换器就能转好。扫描的表格要先做 OCR,合并单元格或旋转的表格需要手动修改。

Markdown 里合并单元格怎么处理?

Markdown 管道表格不能合并单元格。转换器会把文字放进第一个单元格,被覆盖的单元格留空。可以在每个单元格里重复这个值,或在表格下方加备注。

为什么我的表格被拆成了好几张?

PDF 是逐页读取的,所以跨页的表格会变成每页一张。删掉多余的表头行和分隔行就能合并;这是长报告里最常见的修改。

Markdown 表格的单元格里能放列表或换行吗?

GFM 里不行,单元格不允许块级内容。列表项可以用逗号连成一行,渲染器支持 HTML 时也可以用 <br>。

PDF表格转Markdown最快的方法是什么?

文件不多时,用浏览器转换器转换,再手动修正结果。如果有上百个扫描或复杂的文件,Docling 这类本地版面分析模型可能值得多花点时间配置。

表格太宽,不适合 Markdown 怎么办?

Markdown 没有宽度限制,但宽表格不好读也不好改。可以拆成两张共用一个关键列的表,或者把数据保存为 CSV 并加上链接。