python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python提取PDF表格

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

作者:秋天的落叶铺满小路

在数据分析工作中,我们经常遇到需要从 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表格内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文