使用Python实现快速提取PDF中的表格

 更新时间:2026年06月01日 11:15:17   作者:秋天的落叶铺满小路  
在数据分析工作中,我们经常遇到需要从 PDF 文件中提取表格数据的场景,本文将手把手教你使用 Spire.PDF for Python 库,快速准确地识别并提取 PDF 中的表格,并将数据保存为 CSV、Excel 等常用格式

在数据分析工作中,我们经常遇到需要从 PDF 文件中提取表格数据的场景。然而,直接复制 PDF 中的表格往往会导致格式混乱、数据错位。本文将手把手教你使用 Spire.PDF for Python 库,快速准确地识别并提取 PDF 中的表格,并将数据保存为 CSV、Excel 等常用格式。

一、准备工作:安装必要的库

首先需要安装 Spire.PDF 库。打开终端或命令行,执行以下命令:

pip install Spire.PDF

如果你计划将提取的数据导出为 Excel 格式,建议同时安装 pandas 和 openpyxl:

pip install pandas openpyxl

二、核心代码:提取 PDF 中的表格

下面的代码演示了如何从 PDF 的第一页提取表格,并逐行打印单元格内容:

from spire.pdf import PdfDocument, PdfTableExtractor

# 1. 加载 PDF 文件
pdf = PdfDocument()
pdf.LoadFromFile("sample.pdf")

# 2. 创建表格提取器
table_extractor = PdfTableExtractor(pdf)

# 3. 提取第一页的所有表格
tables = table_extractor.ExtractTable(0)

# 4. 遍历每个表格
for table in tables:
    row_count = table.GetRowCount()
    column_count = table.GetColumnCount()

    # 逐行提取单元格内容
    for i in range(row_count):
        row_data = []
        for j in range(column_count):
            cell_text = table.GetText(i, j)
            row_data.append(cell_text)
        print(row_data)

代码说明

方法作用
LoadFromFile()加载指定路径的 PDF 文件
PdfTableExtractor()创建表格提取器实例
ExtractTable(页码)提取指定页面的所有表格,页码从 0 开始
GetRowCount() / GetColumnCount()获取表格的行数和列数
GetText(行, 列)获取指定单元格的文本内容

三、进阶处理:多页 PDF 批量提取

如果 PDF 包含多个页面,可以使用循环批量提取所有表格:

from spire.pdf import PdfDocument, PdfTableExtractor

pdf = PdfDocument()
pdf.LoadFromFile("multi_page_report.pdf")

# 遍历所有页面
for page_index in range(pdf.Pages.Count):
    extractor = PdfTableExtractor(pdf)
    tables = extractor.ExtractTable(page_index)

    print(f"\n=== 第 {page_index + 1} 页 共找到 {len(tables)} 个表格 ===")

    for t, table in enumerate(tables):
        print(f"--- 表格 {t+1} ---")
        rows = table.GetRowCount()
        cols = table.GetColumnCount()

        for i in range(rows):
            row = [table.GetText(i, j) for j in range(cols)]
            print(row)

四、导出数据:保存为 CSV 或 Excel 文件

提取的表格数据可以方便地转换为其他格式。以下示例将数据保存为 CSV 文件:

import csv
from spire.pdf import PdfDocument, PdfTableExtractor

pdf = PdfDocument()
pdf.LoadFromFile("sample.pdf")

extractor = PdfTableExtractor(pdf)
tables = extractor.ExtractTable(0)

if tables:
    table = tables[0]
    rows = table.GetRowCount()
    cols = table.GetColumnCount()

    # 收集所有数据
    data = []
    for i in range(rows):
        row_data = [table.GetText(i, j) for j in range(cols)]
        data.append(row_data)

    # 写入 CSV 文件
    with open("output.csv", "w", newline="", encoding="utf-8") as f:
        writer = csv.writer(f)
        writer.writerows(data)

    print(f"成功导出 {rows} 行 × {cols} 列 数据到 output.csv")

若想导出为 Excel 文件,可借助 pandas:

import pandas as pd
# 假设 data 是上面提取的二维列表
df = pd.DataFrame(data[1:], columns=data[0])  # 首行作为列标题
df.to_excel("output.xlsx", index=False)
print("数据已保存为 output.xlsx")

五、常见问题与技巧

  1. 表格识别不完整? 检查 PDF 中的表格是否有清晰的边框,扫描件或图片型 PDF 需要使用 OCR 技术,Spire.PDF 主要适用于文本型 PDF。
  2. 合并单元格处理 :Spire.PDF 会自动处理合并单元格,GetText() 会返回合并区域左上角单元格的内容,其他位置返回空字符串。
  3. 性能优化 :处理大型 PDF 时,建议逐页提取并即时保存,避免一次性加载全部表格到内存。

通过以上步骤,你已经掌握了使用 Python 提取 PDF 表格的完整流程。这个方案可以轻松集成到自动化数据处理流水线中,大幅提升工作效率。

到此这篇关于使用Python实现快速提取PDF中的表格的文章就介绍到这了,更多相关Python提取PDF表格内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • pytorch中节约显卡内存的方法和技巧

    pytorch中节约显卡内存的方法和技巧

    显存不足是很多人感到头疼的问题,毕竟能拥有大量显存的实验室还是少数,而现在的模型已经越跑越大,模型参数量和数据集也越来越大,所以这篇文章给大家总结了一些pytorch中节约显卡内存的方法和技巧,需要的朋友可以参考下
    2023-11-11
  • 解决tensorflow由于未初始化变量而导致的错误问题

    解决tensorflow由于未初始化变量而导致的错误问题

    今天小编就为大家分享一篇解决tensorflow由于未初始化变量而导致的错误问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • PyMongo 查询数据的实现

    PyMongo 查询数据的实现

    本文主要介绍了PyMongo 查询数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-06-06
  • Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例

    Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作示例

    这篇文章主要介绍了Python cookbook(数据结构与算法)同时对数据做转换和换算处理操作,涉及Python使用生成器表达式进行数据处理的相关操作技巧,需要的朋友可以参考下
    2018-03-03
  • Python实现查找字符串数组最长公共前缀示例

    Python实现查找字符串数组最长公共前缀示例

    这篇文章主要介绍了Python实现查找字符串数组最长公共前缀,涉及Python针对字符串的遍历、判断、计算等相关操作技巧,需要的朋友可以参考下
    2019-03-03
  • Pytorch创建张量的四种方法

    Pytorch创建张量的四种方法

    Pytorch创建张量的4种方法主要有:torch.Tensor()、torch.tensor()、torch.as_tensor()、torch.from_numpy(),本文通过实例代码介绍Pytorch创建张量的四种方法,需要的朋友可以参考下
    2023-05-05
  • 解决Django加载静态资源失败的问题

    解决Django加载静态资源失败的问题

    今天小编就为大家分享一篇解决Django加载静态资源失败的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Python利用lxml库实现XML处理

    Python利用lxml库实现XML处理

    lxml库是Python中处理XML和HTML文档的强大库,提供了丰富的API以进行各种操作,本文将讨论如何使用lxml库,包括如何创建XML文档,如何使用XPath查询,以及如何解析大型XML文档,需要的可以参考下
    2023-08-08
  • Python双向循环链表实现方法分析

    Python双向循环链表实现方法分析

    这篇文章主要介绍了Python双向循环链表,结合实例形式分析了Python双向链表的定义、遍历、添加、删除、搜索等相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • Python operator模块的使用详解

    Python operator模块的使用详解

    本文主要介绍了Python operator模块的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>
    2023-06-06

最新评论