如何从 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 里的表格提取到 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 积分。
相关工具
PDF to Markdown Converter
Convert PDF to Markdown online for free. Preserves headings, lists, tables, and code blocks. No signup required — try it instantly or automate via API.
PDF to JSON Converter
Convert PDF to JSON online for free. Get text, title, and metadata as structured JSON — ready for your app, database, or AI pipeline. API included.
Extract Text from PDF
Extract text from PDF files online for free. Supports scanned documents, multi-page PDFs, and complex layouts. No installation needed — works in your browser.
Related guides
How to Convert PDF to Markdown in Python
Convert PDF to Markdown in Python: PyMuPDF4LLM, Marker, MarkItDown, and a hosted API compared — with working code, accuracy notes, and when to pick each.
How to Copy Text from a PDF
Learn 4 proven ways to copy text from any PDF file — regular, scanned, or protected. Includes free methods, step-by-step instructions, and troubleshooting tips.