许多财务和会计文件,如财务报表、预算报告和交易清单等,广泛以 PDF 格式存储。这些 文件通常包含大量有价值的表格数据。通过提取这些表格数据,我们能够便捷地对其进行统计分析,并生成详尽的报告。这篇文章将介绍如何使用 Spire.PDF for Python 和 Spire.XLS for Python 提取 PDF 文档中的表格数据。
安装 Spire.PDF for Python 和 Spire.XLS for Python
本教程需要用到 Spire.PDF for Python 和 Spire.XLS for Python。Spire.PDF for Python 用于从 PDF 表格中提取数据,Spire.XLS for Python 用于将提取的表格数据写入到 Excel 表格。
您可以通过以下 pip 命令将它轻松安装到 Windows 中:
pip install Spire.PDF
pip install Spire.XLS
如果您不清楚如何安装,请参考:
Python 提取 PDF 表格数据并保存到文本文件
Spire.PDF for Python 提供了 PdfTableExtractor.ExtractTable(pageIndex) 方法,支持从 PDF 文档页面中获取表格。获取后,遍历表格中的行和列并使用 PdfTable.GetText(rowIndex, columnIndex) 方法即可获取每个表格单元格中的文本。具体步骤如下:
- 创建 PdfDocument 类的实例。
- 使用 PdfDocument.LoadFromFile() 方法加载 PDF 文档。
- 遍历 PDF 文档中的页面。
- 使用 PdfTableExtractor.ExtractTable() 方法获取页面中的表格。
- 遍历提取的表格。
- 使用 PdfTable.GetText() 方法获取表格单元格中的文本并保存到列表中。
- 将列表的内容写入 .txt 文件。
- Python
from spire.pdf.common import *
from spire.pdf import *
# 创建PdfDocument对象
doc = PdfDocument()
# 加载PDF文件
doc.LoadFromFile("示例.pdf")
# 创建用于存储表格数据的列表
builder = []
# 创建PdfTableExtractor对象
extractor = PdfTableExtractor(doc)
# 遍历PDF文件中的页面
for pageIndex in range(doc.Pages.Count):
# 从当前页面中提取表格
tableList = extractor.ExtractTable(pageIndex)
# 遍历表格
if tableList is not None and len(tableList) > 0:
for table in tableList:
# 获取当前表格的行数和列数
row = table.GetRowCount()
column = table.GetColumnCount()
# 遍历表格的行和列
for i in range(row):
for j in range(column):
# 获取当前单元格中的文本
text = table.GetText(i, j)
# 将文本添加到列表
builder.append(text + " ")
builder.append("\n")
builder.append("\n")
# 将列表的内容保存到文本文件中
with open("表格.txt", "w", encoding="utf-8") as file:
file.write("".join(builder))
Python 提取 PDF 表格数据并保存到 Excel 表格
获取表格单元格的文本后,你可以使用 Spire.XLS for Python 提供的 Worksheet.Range[rowIndex, columnIndex].Value 属性将其写入 Excel 工作表。具体步骤如下:
- 创建 PdfDocument 类的实例。
- 使用 PdfDocument.LoadFromFile() 方法加载示例 PDF 文档。
- 创建 Workbook 类的实例并清除其中默认的工作表。
- 遍历 PDF 文档中的页面。
- 使用 PdfTableExtractor.ExtractTable() 方法提取页面中的表格。
- 遍历提取的表格。
- 对于每个表格,使用 Workbook.Worksheets.Add() 方法向工作簿中添加一个工作表。
- 使用 PdfTable.GetText() 方法获取表格单元格中的文本。
- 使用 Worksheet.Range[rowIndex, columnIndex].Value 属性将文本写入工作表的特定单元格。
- 使用 Workbook.SaveToFile() 方法将结果工作簿保存到 Excel 文件。
- 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
# 遍历PDF文件中的页面
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
sheetNumber += 1
# 将工作簿保存为Excel文件
workbook.SaveToFile("表格.xlsx",
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。