在数据处理与办公自动化场景中,pdf 表格因格式稳定被广泛使用,但不可直接编辑的特性,给数据统计、分析和二次加工带来诸多不便。手动复制粘贴不仅效率低下,还容易出现数据错位、遗漏等问题。
本文将分享一种高效的解决方案—基于python结合spire系列库,实现 pdf 表格数据的精准提取,并分别导出为 txt 文本和 excel 表格格式。该方案无需复杂的正则表达式或ocr识别,代码简洁易上手,适合批量处理各类pdf表格文件。
一、准备工作:安装所需 python 库
本次实战需要两个核心库,分别负责 pdf 表格提取和 excel 文件生成,功能分工明确:
- spire.pdf for python:一款轻量级 pdf 处理库,支持直接识别 pdf 中的表格结构,精准提取单元格数据,无需依赖额外的 ocr 工具。
- spire.xls for python:专业的 excel 操作库,可实现 excel 文件的创建、数据写入、格式优化等功能,完美适配各类 excel 版本。
打开命令行终端,执行以下pip命令完成安装(建议在虚拟环境中操作,避免版本冲突):
pip install spire.pdf pip install spire.xls
二、实战1:提取 pdf 表格数据到 txt 文件
txt 文件具有体积小、兼容性强的特点,适合快速查看和传输数据。使用 spire.pdf for python 提取数据并写入 txt 的核心逻辑,是按页面→表格→行→列的层级遍历 pdf 内容,最终将数据格式化输出。
实现步骤拆解
- 加载 pdf 文档:通过
pdfdocument类的loadfromfile()方法读取目标 pdf 文件,支持相对路径和绝对路径。 - 初始化提取工具:创建
pdftableextractor对象,用于识别并提取 pdf 页面中的表格数据。 - 层级遍历数据:依次遍历 pdf 的每一页、每页中的每个表格、表格的每一行和每一列,通过
gettext(rowindex, columnindex)方法获取单元格文本。 - 写入 txt 文件:将提取的数据按“列用空格分隔、行用换行分隔”的格式整理,写入txt文件并指定 utf-8 编码,避免中文乱码。
完整代码示例(含详细注释)
from spire.pdf.common import *
from spire.pdf import *
# 1. 加载pdf文档,替换为你的目标pdf文件路径
pdf_doc = pdfdocument()
pdf_doc.loadfromfile("表格.pdf")
# 2. 创建列表存储提取的数据,便于后续拼接
data_list = []
# 3. 初始化表格提取器
table_extractor = pdftableextractor(pdf_doc)
# 4. 遍历pdf的每一页
for page_idx in range(pdf_doc.pages.count):
# 提取当前页面的所有表格
tables = table_extractor.extracttable(page_idx)
# 判断当前页面是否存在表格,避免空指针异常
if tables is not none and len(tables) > 0:
# 遍历每个表格
for table in tables:
row_num = table.getrowcount() # 获取表格总行数
col_num = table.getcolumncount() # 获取表格总列数
# 遍历表格的每一行
for i in range(row_num):
row_data = []
# 遍历该行的每一列
for j in range(col_num):
# 获取单元格文本
cell_text = table.gettext(i, j)
row_data.append(cell_text)
# 用空格分隔列数据,拼接成一行
data_list.append(" ".join(row_data))
# 不同表格之间添加空行,区分数据边界
data_list.append("")
# 5. 将数据写入txt文件
with open("提取pdf表格.txt", "w", encoding="utf-8") as f:
f.write("\n".join(data_list))
# 6. 释放资源,避免内存占用
pdf_doc.close()
三、实战2:提取 pdf 表格数据到 excel 文件
excel 文件支持数据筛选、公式计算、图表生成等高级功能,是数据分析的首选格式。本示例需要结合 spire.pdf for python 和 spire.xls for python,在提取数据的基础上,实现 excel 文件的创建和数据写入。
实现步骤拆解
数据提取的步骤与 txt 示例一致,额外增加 excel 文件操作的3个核心步骤:
- 创建excel工作簿:实例化
workbook对象,清空默认工作表,为后续添加新表格做准备。 - 数据写入单元格:excel 的行列索引从1开始(与python的0索引不同),因此需要将表格的行、列索引分别+1,确保数据写入正确位置。
- 优化表格格式:调用
autofitcolumns()方法设置列宽自适应内容,提升表格可读性,最后保存为指定版本的excel文件。
完整代码示例(含详细注释)
from spire.pdf import *
from spire.xls import *
# 1. 加载pdf文档
pdf_doc = pdfdocument()
pdf_doc.loadfromfile("表格.pdf")
# 2. 创建excel工作簿并清空默认工作表
excel_workbook = workbook()
excel_workbook.worksheets.clear()
# 3. 初始化表格提取器
table_extractor = pdftableextractor(pdf_doc)
# 4. 工作表编号,用于命名新工作表
sheet_index = 1
# 5. 遍历pdf的每一页
for page_idx in range(pdf_doc.pages.count):
tables = table_extractor.extracttable(page_idx)
if tables is not none and len(tables) > 0:
# 遍历当前页面的每个表格
for table in tables:
# 创建新工作表,命名为“sheet+编号”
worksheet = excel_workbook.worksheets.add(f"sheet{sheet_index}")
row_num = table.getrowcount()
col_num = table.getcolumncount()
# 遍历表格单元格
for i in range(row_num):
for j in range(col_num):
cell_text = table.gettext(i, j)
# excel索引从1开始,需将i和j分别+1
worksheet.range[i + 1, j + 1].value = cell_text
# 设置列宽自适应内容,优化显示效果
worksheet.allocatedrange.autofitcolumns()
# 工作表编号递增
sheet_index += 1
# 6. 保存excel文件,指定保存路径和excel版本
excel_workbook.savetofile("导出pdf表格到excel.xlsx", excelversion.version2016)
# 7. 释放资源
pdf_doc.close()
excel_workbook.dispose()
四、关键注意事项
文件路径问题:若运行代码时提示“文件不存在”,请检查 pdf 文件路径是否正确,建议使用绝对路径(如 c:/data/表格.pdf)避免路径错误。
中文乱码处理:写入 txt 文件时,务必指定 encoding="utf-8";导出 excel 文件时,spire.xls for python 默认支持中文,无需额外配置。
资源释放:使用 close() 和 dispose() 方法释放 pdf 和 excel 对象,避免长时间运行导致内存泄漏。
五、总结
基于spire系列库,能够快速实现 pdf 表格数据的提取与格式转换,相比传统的手动操作,效率提升数十倍。该方案适用于各类场景,如批量提取财务报表、科研数据、政务文件中的 pdf 表格,为数据自动化处理提供了可靠的技术支撑。
到此这篇关于python提取pdf表格数据并导出为txt、excel 格式的文章就介绍到这了,更多相关python提取pdf表格数据内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论