用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. 释放资源。

代码示例:

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. 释放资源。

代码示例:

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教程。

申请免费许可加粗样式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/840056.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue从入门到实战Day12

一、Pinia快速入门 1. 什么是Pinia Pinia是Vue的最新状态管理工具,是Vuex的替代品 1. 提供更加简单的API(去掉了mutation) 2. 提供符合组合式风格的API(和Vue3新语法统一) 3. 去掉了modules的概念,每一…

人工智能应用-实验7-胶囊网络分类minst手写数据集

文章目录 🧡🧡实验内容🧡🧡🧡🧡代码🧡🧡🧡🧡分析结果🧡🧡🧡🧡实验总结🧡🧡 &#x1f9…

Python TCP编程简单实例

客户端:创建TCP链接时,主动发起连接的叫做客户端 服务端:接收客户端的连接 连接其他服务器 可以通过tcp连接其他服务器。 示例: import socket# 1.创建一个socket # 参数1:指定协议 AF_INET(ipv4&#…

LeetCode1466重新规划路线

题目描述 n 座城市,从 0 到 n-1 编号,其间共有 n-1 条路线。因此,要想在两座不同城市之间旅行只有唯一一条路线可供选择(路线网形成一颗树)。去年,交通运输部决定重新规划路线,以改变交通拥堵的…

vite项目怎么build打包成不同环境的代码?从而适配不同环境api接口

在开发 Web 应用的过程中,我们需要在不同的环境中运行和测试我们的应用程序(如开发环境、测试环境和生产环境)。每个环境都有其特定的 API 接口和配置。Vite,一个基于 ESBuild 的前端构建工具,可以帮助我们实现这个需求…

ganglia的安装使用

1.集群内分别安装epel-release依赖,更新yum源 sudo yum -y install epel-release 2.各节点上分别安装gmond sudo yum -y install ganglia-gmond 3.监控节点上安装gmetad和web(这里安装在node1上) sudo yum -y install ganglia-gmetad sudo yum -y insta…

现代密码学——消息认证和哈希函数

1.概述 1.加密-->被动攻击(获取消息内容、业务流分析) 消息认证和数字签名-->主动攻击(假冒、重放、篡改、业务拒绝) 2.消息认证作用: 验证消息源的真实性, 消息的完整性(未被篡改…

第七步 实现打印函数

文章目录 前言一、如何设计我们的打印函数?二、实践检验! 查看系列文章点这里: 操作系统真象还原 前言 现在接力棒意见交到内核手中啦,只不过我们的内核现在可谓是一穷二白啥都没有,为了让我们设计的内核能被看见被使用…

数据防泄露解决方案分享

在当今高度数字化和互联的商业环境中,数据防泄密已成为企业保护财产、维护客户隐私和遵守合规要求的重要一环。数据防泄密不仅关乎企业的经济利益,更涉及用户个人信息安全、商业机密保护以及国家安全等核心问题。能做好数据防泄露,对于提升企…

启动docker报错:Failed to listen on Docker Socket for the API.

说明: 1、安装部署docker完成后,启动docker报错:Failed to listen on Docker Socket for the API,如下图所示: 2、将SocketGroupdocker更改成:SocketGrouproot即可 一、解决方法: 1、执行命令…

舵机(结构,原理,控制方法)

介绍 舵机,全称为伺服马达(Servo Motor),是一种能够精确控制角度或位置的电动机。它广泛应用于模型制作、机器人技术、工业自动化等领域。舵机通过接收控制信号,将其转化为机械运动,从而实现精确的控制。 …

代码随想录算法训练营第三天| 203.移除链表元素、 707.设计链表、 206.反转链表

203.移除链表元素 题目链接: 203.移除链表元素 文档讲解:代码随想录 状态:没做出来,做题的时候定义了一个cur指针跳过了目标val遍历了一遍链表,实际上并没有删除该删的节点。 错误代码: public ListNode re…

文档解析新纪元:TextIn产品体验与解决难题的深度剖析

前言 在数字化浪潮席卷各行各业的今天,作为一名数据分析师,每天我都需要处理和分析大量的文档。然而,传统的文档解析工具在面对我的专业需求时,往往显得力不从心。 我的工作常常涉及到各种格式的文档,包括PDF、Word、…

在洁净实验室设计装修中怎么选择合适实验室家具?

在现代科学研究和技术开发中,洁净实验室装修设计成为了确保实验准确性和安全性的重要因素。洁净实验室需要提供一个无尘、无菌、受控的环境,而在洁净实验室装修设计这个过程中,如何选择合适的实验室家具就显得尤为重要,因为它直接…

Web前端一套全部清晰 ⑨ day5 CSS.4 标准流、浮动、Flex布局

我走我的路,有人拦也走,没人陪也走 —— 24.5.24 一、标准流 标准流也叫文档流,指的是标签在页面中默认的排布规则,例如:块元素独占一行,行内元素可以一行显示多个。 二、浮动 作用: 让块级元素水平排列。 属性名:floa…

练习题(2024/5/22)

1N 皇后 II n 皇后问题 研究的是如何将 n 个皇后放置在 n n 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回 n 皇后问题 不同的解决方案的数量。 示例 1: 输入:n 4 输出:2 解释:如上…

民国漫画杂志《时代漫画》第18期.PDF

时代漫画18.PDF: https://url03.ctfile.com/f/1779803-1248612707-27e56b?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了,截止1937年6月战争来临被迫停刊共发行了39期。 ps:资源来源网络!

春秋CVE-2022-23906

简介 CMS Made Simple v2.2.15 被发现包含通过上传图片功能的远程命令执行 (RCE) 漏洞。此漏洞通过精心制作的图像文件被利用。 正文 1.进入靶场2.进入登录界面,弱口令admin/123456 3.进入后台,文件上传点 4.上传一句话木马图片 5.复制图片&#xf…

细胞冻存——让你的细胞“长生不老”

《星际穿越》电影中提到漫长的太空旅程中,宇航员可以进入休眠水床休眠,并自行设定唤醒时间。在《异形》《深空失忆》《三体》等科幻作品中,都出现此类技术。《三体》中,休眠后来成为人类最普遍的一项技术。技术上的人类低温休眠&a…

OpenCV:入门(五)

图像梯度 图像梯度计算的是图像变化的速度。对于图像的边缘部分,其灰度值变化较大,梯度值也 较大;相反,对于图像中比较平滑的部分,其灰度值变化较小,相应的梯度值也较小。一般情 况下,图像梯度计…