news 2026/3/27 8:24:49

Python 将 PDF 表格数据提取至 TXT 或 Excel

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 将 PDF 表格数据提取至 TXT 或 Excel

在数据处理与办公自动化场景中,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命令完成安装(建议在虚拟环境中操作,避免版本冲突):

/* by 01130.hk - online tools website : 01130.hk/zh/htmlescape.html */ pip install Spire.PDF pip install Spire.XLS

二、实战1:提取 PDF 表格数据到 TXT 文件

TXT 文件具有体积小、兼容性强的特点,适合快速查看和传输数据。使用 Spire.PDF for Python 提取数据并写入 TXT 的核心逻辑,是按页面→表格→行→列的层级遍历 PDF 内容,最终将数据格式化输出。

实现步骤拆解

  1. 加载 PDF 文档:通过PdfDocument类的LoadFromFile()方法读取目标 PDF 文件,支持相对路径和绝对路径。
  2. 初始化提取工具:创建PdfTableExtractor对象,用于识别并提取 PDF 页面中的表格数据。
  3. 层级遍历数据:依次遍历 PDF 的每一页、每页中的每个表格、表格的每一行和每一列,通过GetText(rowIndex, columnIndex)方法获取单元格文本。
  4. 写入 TXT 文件:将提取的数据按“列用空格分隔、行用换行分隔”的格式整理,写入TXT文件并指定 UTF-8 编码,避免中文乱码。

完整代码示例(含详细注释)

/* by 01130.hk - online tools website : 01130.hk/zh/htmlescape.html */ 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 PythonSpire.XLS for Python,在提取数据的基础上,实现 Excel 文件的创建和数据写入。

实现步骤拆解

数据提取的步骤与 TXT 示例一致,额外增加 Excel 文件操作的3个核心步骤:

  1. 创建Excel工作簿:实例化Workbook对象,清空默认工作表,为后续添加新表格做准备。
  2. 数据写入单元格:Excel 的行列索引从1开始(与Python的0索引不同),因此需要将表格的行、列索引分别+1,确保数据写入正确位置。
  3. 优化表格格式:调用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()

四、关键注意事项

  1. 文件路径问题:若运行代码时提示“文件不存在”,请检查 PDF 文件路径是否正确,建议使用绝对路径(如C:/data/表格.pdf)避免路径错误。
  2. 中文乱码处理:写入 TXT 文件时,务必指定encoding="utf-8";导出 Excel 文件时,Spire.XLS for Python 默认支持中文,无需额外配置。
  3. 资源释放:使用Close()Dispose()方法释放 PDF 和 Excel 对象,避免长时间运行导致内存泄漏。

五、总结

基于Spire系列库,能够快速实现 PDF 表格数据的提取与格式转换,相比传统的手动操作,效率提升数十倍。该方案适用于各类场景,如批量提取财务报表、科研数据、政务文件中的 PDF 表格,为数据自动化处理提供了可靠的技术支撑。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/17 8:02:38

我发现联邦学习加自监督学习破解跨境罕见病早筛数据孤岛

📝 博客主页:Jax的CSDN主页 目录医疗AI的魔幻现实:当咖啡店排队逻辑遇上三甲医院 一、AI看病的“薛定谔的准确率” 二、医院里的“AI咖啡店”现象 三、AI医生的“中年危机” 四、数据隐私的“薛定谔的加密” 五、未来十年的“医疗AI生存指南”…

作者头像 李华
网站建设 2026/3/25 0:33:56

PyTorch-CUDA-v2.7镜像中如何安装额外的Python包

PyTorch-CUDA-v2.7 镜像中如何安装额外的 Python 包 在深度学习项目开发中,一个稳定、可复现的运行环境往往比模型本身更早成为瓶颈。尤其是当团队成员各自搭建环境时,CUDA 版本不匹配、PyTorch 编译选项差异、甚至 Python 小版本不同都可能导致“在我机…

作者头像 李华
网站建设 2026/3/26 17:48:55

谁说英文更精准?汉字的细腻,才是语言界的“像素级”表达!

谁说英文更精准?汉字的细腻,才是语言界的“像素级”表达!一、生活场景:汉字的 “像素级” 精准碾压英文(一)病痛描述:中文让痛感 “有迹可循”当我们身体不适前往医院时,语言在准确传…

作者头像 李华
网站建设 2026/3/27 8:14:35

学工平台怎么买才是真划算?看懂这几点,不再花冤枉钱

✅作者简介:合肥自友科技 📌核心产品:智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…

作者头像 李华
网站建设 2026/3/13 13:23:35

如何用以太网温湿度变送器构建数据中心动环监控系统?

数据中心动环监控(DCIM)对温湿度的实时性、准确性和告警响应速度要求极高。传统串口设备难以满足大规模部署需求,而以太网温湿度变送器因其原生网络能力,成为现代IDC环境监控的首选方案。技术实现上,以太网温湿度变送器…

作者头像 李华
网站建设 2026/3/26 12:24:56

Turfjs+Cesium.js:三维地球中的空间分析实战

在 WebGIS 领域,二维地图已无法满足复杂的空间分析需求 —— 三维地球(3D Globe)能直观展示地理要素的空间位置、高度关系和地形特征。Cesium.js 是目前最主流的开源三维地球开发框架,支持高精度地形、影像和矢量要素渲染&#xf…

作者头像 李华