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表格并保存到文本的操作步骤:
- 导入所需模块。
- 创建
PdfDocument
实例,并使用PdfDocument.LoadFromFile()
方法载入PDF文档。 - 创建一个列表储存表格数据,再使用文档创建一个
PdfTableExtractor
实例。 - 遍历文档页面,使用
PdfTableExtractor.ExtractTable(int: page index)
方法提取页面上的表格。 - 遍历每个提取到的表格,为每个表格创建字符串对象,再使用
PdfTable.GetText(int: row index, int column index)
方法获取表格数据并添加到字符串中。 - 将每个表格保存为一个文本文件。
- 释放资源。
代码示例:
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文件中。以下是操作步骤:
- 导入所需模块。
- 创建一个
PdfDocument
类的实例。 - 使用
PdfDocument.LoadFromFile()
方法加载一个示例PDF文档。 - 创建一个
Workbook
类的实例,并清除其中的默认工作表。 - 遍历PDF文档中的页面。
- 使用
PdfTableExtractor.ExtractTable()
方法从页面中提取表格。 - 遍历提取出的表格。
- 对于每个表格,使用
Workbook.Worksheets.Add()
方法向工作簿中添加一个工作表。 - 使用
PdfTable.GetText()
方法获取表格中单元格的文本。 - 使用
Worksheet.Range[rowIndex, columnIndex].Value
属性将文本写入工作表中的特定单元格。 - 使用
Workbook.SaveToFile()
方法将结果工作簿保存为Excel文件。 - 释放资源。
代码示例:
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教程。
申请免费许可加粗样式