ParseJet

如何从 PDF 提取表格

把 PDF 里的表格复制粘贴到 Excel,得到的往往是挤成一列的乱序数据 — 甚至什么都粘不出来。这不是您的问题:PDF 根本不存储表格。本指南对比了四种真正可行的方法,从快速的复制粘贴技巧到能处理扫描件的工具,帮您为手头的文件选对方案。

为什么 PDF 表格这么难提取

PDF 里没有“表格”这个概念。您看到的行与列,实际上只是一个个定位在 x/y 坐标上的文本片段,有时中间画了几条线。“表格”只存在于您的眼睛里 — 文件本身不存储单元格、行或表头。

因此,所有提取方法本质上都是重建:由算法猜测哪些文本片段属于同一个单元格、哪些单元格组成一行、列从哪里开始。有可见网格线的表格相对容易重建;仅靠空白分隔的表格、合并单元格、多行单元格和跨页表格,则是多数工具翻车的地方。

扫描版 PDF 又多了一层难度:页面只是一张照片,在 OCR 运行之前根本没有任何文字。请根据您的文档具体属于哪种情况来选择方法。

方法一:复制粘贴到 Excel(适合小型带线表格,最快)

对于简单、网格线清晰的表格,直接在 PDF 阅读器里选中、复制,然后粘贴到 Excel 或 Google Sheets。如果所有内容都挤进了一列,用“数据 → 分列”(Excel)或“数据 → 将文本拆分为列”(Google Sheets)重新拆分。

一个实用技巧:先粘贴到纯文本编辑器,看看保留下来的结构长什么样。如果各值之间是稳定的空格或制表符,分列功能就能恢复表格;如果各行已经交错或被截断,再怎么拆分也救不回来。

适用场景:单页、带网格线、单元格内容较短的表格。失效场景:合并单元格、单元格内多行文本、带千分位分隔符的数字被拆散,以及一切扫描版文档。

方法二:Excel Power Query 或 Word(系统自带,无需额外工具)

新版 Excel 可以直接导入 PDF 表格:数据 → 获取数据 → 来自文件 → 从 PDF。Excel 会扫描文档,列出检测到的所有表格并显示预览 — 选中目标表格点击“加载”,它就会以正规的表格区域进入工作表。这是 Windows 上最好的内置方案(需要 Microsoft 365 或 2021 及以上版本许可,Mac 版 Excel 并非所有版本都提供)。

Word 也能直接打开 PDF(文件 → 打开 → 选择该 PDF)。它会把文档转换成可编辑文件,简单表格通常能保留为真正的 Word 表格,可以直接复制进 Excel。

适用场景:数字原生、网格线清晰的 PDF。失效场景:仅靠空白分隔的表格经常被漏检或错误拆分,跨页表格会被导入为多个碎片,而扫描版 PDF 则什么都提取不到 — Power Query 不做 OCR。

方法三:Python 库 — camelot、tabula-py、pdfplumber(开发者)

如果需要以编程方式从大量 PDF 中提取表格,成熟的开源选项有:camelot(带线表格效果最好,提供两种检测模式)、tabula-py(Java 引擎 Tabula 的封装,对格式一致的版面表现稳定)和 pdfplumber(对文字、线条和矩形的底层控制 — 需要自定义逻辑时最合适)。

一个最简 camelot 示例:pip install camelot-py[cv],然后 tables = camelot.read_pdf("report.pdf", pages="all"),tables[0].df 就是一个 pandas DataFrame,用 .to_csv() 或 .to_excel() 即可导出。

坑在于:每个库都有自己偏好的版面风格,而真实世界的文档往往混合多种风格。您需要按文档类型逐一调参(camelot 的 flavor="stream" 与 "lattice"、tabula 的区域提示),而且它们都处理不了扫描版 PDF — 只能先跑 OCR,但版面信息也就随之丢失了。

如果想更全面地了解 Python 中的 PDF 解析(不止表格),可参阅我们的「用 Python 把 PDF 转成 Markdown」指南。

方法四:AI 智能提取(扫描件、混合版面、规模化)

最新的思路是使用文档理解模型,让它像人一样“看”页面 — 从视觉版面识别表格结构,而不是依赖网格线或坐标启发式规则。这是唯一能在一次处理中同时应对扫描文档、拍照页面和不规则版面的方法类别。

ParseJet 就是这样工作的:在 parsejet.com/tools/pdf-to-markdown 上传 PDF,表格会按阅读顺序以干净的 Markdown 表格返回 — 扫描页自动 OCR。如果想要数据而不是文本,API 可以把解析后的文档以结构化形式返回(参见 PDF 转 JSON 工具),每个文件一次 POST 请求,非常适合批量管道。

适用场景:扫描件和拍照文档、网格线与空白分隔混杂的版面,以及无法逐份调参的批量处理。代价是:它是托管服务 — 如果只是从一份干净 PDF 里取一次表格,方法一或方法二更快。

该选哪种方法?

一份小型带线表格,只提取一次:复制粘贴(方法一);粘出来乱了就退而用 Excel Power Query(方法二)。

版面固定的周期性报表:表格用户选 Power Query,开发者选 camelot 或 tabula-py(方法三)— 一次配置,之后每份文件都受益。

扫描件、照片或混乱的混合版面:AI 提取(方法四)现实中是唯一不用手动重新录入的选择。

成百上千份版面各异的文档:通过 API 使用方法四 — 方法三那些库的逐文档调参,超过几种版面类型就无法扩展了。

从任何 PDF 提取表格 — 包括扫描件

上传 PDF,所有表格按阅读顺序以干净的 Markdown 返回,扫描页自动 OCR。免费试用,无需注册。

试试 PDF 转 Markdown

常见问题

如何把 PDF 里的表格提取到 Excel?

先试 Excel 内置导入:数据 → 获取数据 → 来自文件 → 从 PDF,然后选择检测到的表格。如果 Excel 漏检或拆乱了 — 空白分隔和扫描版表格很常见 — 就改用 ParseJet 这类 AI 工具提取,再把 Markdown 表格粘贴进 Excel。

扫描版 PDF 里的表格能提取吗?

只有具备 OCR 能力的工具才行。复制粘贴、Power Query 和 Python 表格库都需要真实的文本。AI 提取工具会先对页面做 OCR 再重建表格 — 把扫描件上传到 ParseJet,表格就会以文本形式返回。

PDF 表格提取最好的 Python 库是哪个?

带线表格用 camelot,版面一致的报表用 tabula-py,需要自定义底层逻辑时用 pdfplumber。三者都需要按版面调参,且都处理不了扫描页,所以输入混乱的管道最终通常会改调解析 API。

为什么我粘贴的表格全挤在一列里?

您的 PDF 阅读器把表格行片段序列化成了用空格分隔的纯文本行,Excel 把每一整行粘进了一个单元格。可以用“分列”重新拆分,或改用能重建表格结构的方法(Power Query 或提取工具)。

带合并单元格的表格提取效果如何?

多数工具都提取得很糟 — 合并单元格破坏了所有启发式算法赖以工作的行列网格。结构感知的提取方式处理得最好;但无论用哪种方法,合并区域都建议人工核对。

能自动从大量 PDF 中提取表格吗?

能 — 把每个文件 POST 到解析 API 即可。用 ParseJet 的话,/v1/parse/auto/file 会返回表格以 Markdown(或结构化 JSON)呈现的文档,免费 API 账户每月含 300 积分。

免费开始提取文本

无需注册。几秒钟内解析您的第一个文件。

查看价格