用Python代码批量提取PDF文件中的表格

PDF文档中常常包含大量数据,尤其是官方报告、学术论文、财务报表等文档,往往包含了结构化的表格数据。表格作为承载关键信息的载体,其内容的准确提取对于数据分析、研究论证乃至业务决策具有重大意义。然而,PDF格式虽保证了文档的跨平台一致性,却给数据的直接提取和利用设置了障碍。掌握如何用Python高效地从PDF文档中提取表格,可以提升我们的数据处理能力、加速信息流转的能力。本文介绍如何利用Python来快速提取PDF文档中的表格数据 ,以及将表格数据保存到Excel文件

  • 用Python提取PDF文档中的表格数据
  • 提取PDF文档中的表格并保存到Excel文件

本文所使用的方法需要用到Spire.PDF for Python,可通过PyPI安装:pip install Spire.PDF

提取PDF文档中的表格数据

PdfTableExtractor(PdfDocument) 类可以用于处理PDF文档表格提取工作。创建好此类的实例之后,再使用 PdfTableExtractor.ExtractTable(int: page index) 方法就可以提取到指定页面上的所有表格了。获取到表格之后,我们就可以使用 PdfTable.GetText(int: row index, int column index) 方法提取表格数据保存到其他位置了。

以下是提取PDF表格并保存到文本的操作步骤:

  1. 导入所需模块。
  2. 创建 PdfDocument 实例,并使用 PdfDocument.LoadFromFile() 方法载入PDF文档。
  3. 创建一个列表储存表格数据,再使用文档创建一个 PdfTableExtractor 实例。
  4. 遍历文档页面,使用 PdfTableExtractor.ExtractTable(int: page index) 方法提取页面上的表格。
  5. 遍历每个提取到的表格,为每个表格创建字符串对象,再使用 PdfTable.GetText(int: row index, int column index) 方法获取表格数据并添加到字符串中。
  6. 将每个表格保存为一个文本文件。
  7. 释放资源。

代码示例:

python 复制代码
from spire.pdf import *
from spire.pdf.common import *

# 创建PdfDocument类的实例
pdf = PdfDocument()

# 加载PDF文件
pdf.LoadFromFile("示例.pdf")

# 创建列表
list = []

# 创建PdfTableExtractor对象
extractor = PdfTableExtractor(pdf)

# 遍历文档的页面
for pageIndex in range(pdf.Pages.Count):
    # 从页面提取表格
    tableList = extractor.ExtractTable(pageIndex)

    # 检查表格列表是否不为空且列表不为空
    if tableList is not None and len(tableList) > 0:
        # 遍历列表中的表格
        for table in tableList:
            tableData = ''
            # 获取行数和列数
            row = table.GetRowCount()
            column = table.GetColumnCount()

            # 遍历表格的行和列
            for i in range(row):
                for j in range(column):
                    # 从单元格获取文本
                    text = table.GetText(i, j)

                    # 将文本添加到列表中
                    tableData += text + " "
                tableData += "\n"
        list.append(tableData)

# 将每个表格保存为txt文件
for i in range(len(list)):
    fileName = "output/Tables/ExtractedPDFTables{0}.txt".format(i)
    with open(fileName, "w") as f:
        f.writelines(list[i])

# 释放资源
pdf.Close()

提取结果:

提取PDF文档中的表格并保存到CSV文件

在提取表格数据时,我们可以结合Spire.XLS for Python库(pip install Spire.XLS)来直接将表格数据写入Excel文件中。以下是操作步骤:

  1. 导入所需模块。
  2. 创建一个 PdfDocument 类的实例。
  3. 使用 PdfDocument.LoadFromFile() 方法加载一个示例PDF文档。
  4. 创建一个 Workbook 类的实例,并清除其中的默认工作表。
  5. 遍历PDF文档中的页面。
  6. 使用 PdfTableExtractor.ExtractTable() 方法从页面中提取表格。
  7. 遍历提取出的表格。
  8. 对于每个表格,使用 Workbook.Worksheets.Add() 方法向工作簿中添加一个工作表。
  9. 使用 PdfTable.GetText() 方法获取表格中单元格的文本。
  10. 使用 Worksheet.Range[rowIndex, columnIndex].Value 属性将文本写入工作表中的特定单元格。
  11. 使用 Workbook.SaveToFile() 方法将结果工作簿保存为Excel文件。
  12. 释放资源。

代码示例:

python 复制代码
from spire.pdf import *
from spire.xls import *

# 创建一个PdfDocument对象
doc = PdfDocument()

# 加载示例PDF文件
doc.LoadFromFile("示例.pdf")

# 创建一个Workbook对象
workbook = Workbook()

# 清除默认的工作表
workbook.Worksheets.Clear()

# 创建一个PdfTableExtractor对象
extractor = PdfTableExtractor(doc)

sheetNumber = 1

# 循环遍历页面
for pageIndex in range(doc.Pages.Count):
    # 从特定页面提取表格
    tableList = extractor.ExtractTable(pageIndex)

    # 判断表格列表是否不为空
    if tableList is not None and len(tableList) > 0:
        # 循环遍历列表中的表格
        for table in tableList:
            # 添加一个工作表
            sheet = workbook.Worksheets.Add(f"sheet{sheetNumber}")

            # 获取某个表格的行数和列数
            row = table.GetRowCount()
            column = table.GetColumnCount()

            # 循环遍历行和列
            for i in range(row):
                for j in range(column):
                    # 从特定单元格获取文本
                    text = table.GetText(i, j)

                    # 将文本写入指定的单元格
                    sheet.Range[i + 1, j + 1].Value = text

            # 自动调整列宽
            sheet.AllocatedRange.AutoFitColumns()

            sheetNumber += 1

# 保存到文件
workbook.SaveToFile("output/Tables/PDF表格到Excel文件.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

提取的表格:

本文演示了如何使用Python提取PDF文档中的表格数据,并将其保存到文本文件或Excel文件。

更多PDF文档操作技巧请前往Spire.PDF for Python教程

申请免费许可加粗样式

相关推荐
databook6 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar8 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户8356290780518 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_8 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机15 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机16 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机16 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机16 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i16 小时前
drf初步梳理
python·django
每日AI新事件16 小时前
python的异步函数
python