当前位置: 首页 > news >正文

用Python将PDF表格提取到文本、CSV和Excel文件中

从PDF文档中提取表格并将其转换为更易于处理的格式(如文本、CSV和Excel文件),是数据分析和信息管理中的常见需求。此过程可显著简化表格数据的处理,使数据的操作、分析和与其他数据集的集成更加便捷。无论是财务报表、研究论文,还是包含结构化信息的其他文档,掌握这些表格准确转换的方法对于充分发挥数据潜力至关重要。

本文将介绍如何使用简单的Python代码从PDF文档中提取表格数据并将其写入文本、CSV和Excel文件,从而轻松实现PDF表格的自动化提取。

文章目录

    • 如何使用Python提取PDF表格数据
    • 用Python将PDF表格数据提取为文本文件
    • 用Python将PDF表格数据提取为CSV文件
    • 用Python将PDF表格数据提取到Excel工作表
    • 使用Python直接将PDF转换为Excel文件

本文所需的库为Spire.PDF for Python。可通过PyPI安装:pip install spire.pdf

用于操作的示例PDF
Python提取PDF表格

如何使用Python提取PDF表格数据

库中的PdfTableExtractor类用于处理PDF文档的表格提取。可以通过PdfTableExtractor.ExtractTable(pageIndex: int)方法从PDF页面中提取表格,并以Utilities_PdfTable对象的集合形式返回表格数据。接着,可通过遍历表格并使用Utilities_PdfTable.GetCellText(rowIndex: int, columnIndex: int)方法获取每个单元格中的数据。

提取PDF表格数据的一般步骤如下:

  • 创建一个PdfDocument实例并使用PdfDocument.LoadFromFile()方法加载PDF文档。
  • 使用该文档创建PdfTableExtractor实例。
  • 使用PdfTableExtractor.ExtractTable(pageIndex: int)方法提取文档中每页的表格。
  • 遍历每个表格并使用Utilities_PdfTable.GetCellText(rowIndex: int, columnIndex: int)方法获取单元格值。
  • 将提取的表格数据写入其他文件。

注意:当使用提取的表格数据构建字符串时,如果单元格文本中包含换行符,最终生成的文本文件中可能会多出额外的换行符。为了避免造成混淆,应将这些换行符去除或替换为空格。

用Python将PDF表格数据提取为文本文件

提取PDF文档中的表格数据后,可直接将每个表格的数据写入字符串并保存到文本文件中,从而实现将PDF表格数据导出为文本文件。

具体步骤如下:

  1. 导入所需模块:PdfDocumentPdfTableExtractor
  2. 创建PdfDocument实例并使用PdfDocument.LoadFromFile()方法加载PDF文档。
  3. 使用该文档创建PdfTableExtractor实例。
  4. 使用PdfTableExtractor.ExtractTable(pageIndex: int)方法提取每页中的表格。
  5. 遍历提取的表格:
    • 创建一个str对象以存储表格数据。
    • 使用Utilities_PdfTable.GetCellText(rowIndex: int, columnIndex: int)方法获取单元格值。
    • 将单元格值追加到str对象中。
    • str对象写入文件。
  6. 释放资源。

代码示例

from spire.pdf import PdfDocument, PdfTableExtractor# 创建一个 PdfDocument 对象
pdf = PdfDocument()
# 加载一个 PDF 文档
pdf.LoadFromFile("Sample.pdf")# 创建一个 PdfTableExtractor 对象
extractor = PdfTableExtractor(pdf)# 遍历所有页面
for pageIndex in range(pdf.Pages.Count):# 从每个 PDF 页面中提取表格tables = extractor.ExtractTable(pageIndex)# 如果存在多个表格,则遍历这些表格if tables is not None:for tableIndex in range(len(tables)):# 获取一个表格table = tables[tableIndex]# 创建一个字符串对象来存储表格数据tableData = ""# 遍历表格的行和列for rowIndex in range(table.GetRowCount()):for colIndex in range(table.GetColumnCount()):# 获取单元格文本text = table.GetText(rowIndex, colIndex)text = text.replace("\n", " ")# 将单元格文本添加到表格数据中tableData += textif colIndex < table.GetColumnCount() - 1:tableData += "\t"tableData += "\n"# 将表格数据写入文本文件with open(f"output/Tables/Page{pageIndex+1}-Table{tableIndex+1}.txt", "w", encoding="utf-8") as f:f.write(tableData)# 释放资源
pdf.Dispose()

输出结果
Python提取PDF表格到文本文件

用Python将PDF表格数据提取为CSV文件

同样,可以使用类似方法从PDF文档中提取表格数据,并利用Python标准库中的CSV模块将每个表格写入CSV文件。在此过程中也需注意去除或替换换行符,以改善CSV文件的结果。具体步骤如下:

  1. 导入所需模块:PdfDocumentPdfTableExtractorCSV
  2. 创建PdfDocument实例并使用PdfDocument.LoadFromFile()方法加载PDF文档。
  3. 使用该文档创建PdfTableExtractor实例。
  4. 使用PdfTableExtractor.ExtractTable(pageIndex: int)方法提取每页中的表格。
  5. 遍历提取的表格:
    • 创建CSV文件。
    • 遍历表格中的行并创建列表以存储行数据。
    • 使用Utilities_PdfTable.GetCellText(rowIndex: int, columnIndex: int)方法获取每行的单元格值并追加到列表中。
    • 使用csv.writer().writerow()方法将每行写入CSV文件。
  6. 释放资源。

代码示例

from spire.pdf import PdfDocument, PdfTableExtractor
import csv# 创建一个 PdfDocument 对象
pdf = PdfDocument()
# 加载一个 PDF 文档
pdf.LoadFromFile("Sample.pdf")# 创建一个 PdfTableExtractor 对象
extractor = PdfTableExtractor(pdf)# 遍历所有页面
for pageIndex in range(pdf.Pages.Count):# 从每个 PDF 页面中提取表格tables = extractor.ExtractTable(pageIndex)# 如果存在多个表格,则遍历这些表格if tables is not None:for tableIndex in range(len(tables)):# 获取一个表格table = tables[tableIndex]# 创建一个 CSV 文件with open("output/Tables/Page" + str(pageIndex+1) + "-Table" + str(tableIndex+1) + ".csv", "w", newline='', encoding='utf-8') as csvFile:writer = csv.writer(csvFile)# 遍历表格的行和列for rowIndex in range(table.GetRowCount()):row = []for colIndex in range(table.GetColumnCount()):# 获取单元格文本text = table.GetText(rowIndex, colIndex)text = text.replace('\n', ' ')row.append(text)writer.writerow(row)# 释放资源
pdf.Dispose()

输出结果
Python提取PDF表格到CSV

用Python将PDF表格数据提取到Excel工作表

可使用另一库Spire.XLS for Python将提取的PDF表格数据写入Excel工作表。通过PyPI获取Spire.PDF for Python:pip install spire.xls
具体步骤如下:

  1. 导入所需模块:PdfDocumentPdfTableExtractorWorkbookspire.xls.FileFormat
  2. 创建PdfDocument实例并使用PdfDocument.LoadFromFile()方法加载PDF文档。
  3. 创建Workbook实例用于存储表格,并使用Workbook.Worksheets.Clear()方法清除默认工作表。
  4. 使用该文档创建PdfTableExtractor实例。
  5. 使用PdfTableExtractor.ExtractTable(pageIndex: int)方法提取每页中的表格。
  6. 遍历提取的表格:
    • 使用Workbook.Worksheets.Add(sheetName: str)方法为每个表格添加工作表。
    • 使用Utilities_PdfTable.GetCellText(rowIndex: int, columnIndex: int)方法获取表格的单元格值。
    • 通过Worksheet.Range[rowIndex + 1, colIndex + 1].Text属性将单元格值写入相应的工作表单元格。
  7. 使用Workbook.SaveToFile()方法保存工作簿。
  8. 释放资源。

代码示例

from spire.pdf import PdfDocument, PdfTableExtractor
from spire.xls import Workbook, FileFormat, HorizontalAlignType# 创建一个 PdfDocument 对象
pdf = PdfDocument()
# 加载一个 PDF 文档
pdf.LoadFromFile("Sample.pdf")# 创建一个 Workbook 对象
workbook = Workbook()
# 清除默认的工作表
workbook.Worksheets.Clear()# 创建一个 PdfTableExtractor 对象
extractor = PdfTableExtractor(pdf)# 从每个 PDF 页面中提取表格
for pageIndex in range(pdf.Pages.Count):tables = extractor.ExtractTable(pageIndex)# 如果存在多个表格,则遍历这些表格if tables is not None:for tableIndex in range(len(tables)):# 获取一个表格table = tables[tableIndex]# 为表格创建一个工作表sheet = workbook.Worksheets.Add(f"Page{pageIndex + 1}-Table{tableIndex + 1}")# 遍历表格的行和列for rowIndex in range(table.GetRowCount()):for colIndex in range(table.GetColumnCount()):# 获取单元格值text = table.GetText(rowIndex, colIndex)cellText = text.replace("\n", "")# 将单元格值写入工作表的相应单元格sheet.Range[rowIndex + 1, colIndex + 1].Text = cellText# 可选:自定义表格的外观# 设置标题行样式sheet.Rows.get_Item(0).Style.Font.FontName = "Yu Gothic UI"sheet.Rows.get_Item(0).Style.Font.Size = 12sheet.Rows.get_Item(0).Style.Font.IsBold = Truesheet.Rows.get_Item(0).Style.HorizontalAlignment = HorizontalAlignType.Center# 设置数据行样式for i in range(1, sheet.Rows.Count):sheet.Rows.get_Item(i).Style.Font.FontName = "Yu Gothic UI"sheet.Rows.get_Item(i).Style.Font.Size = 12sheet.Rows.get_Item(i).Style.HorizontalAlignment = HorizontalAlignType.Left# 自动调整列宽for j in range(1, sheet.Columns.Count):sheet.AutoFitColumn(j)# 保存工作簿
workbook.SaveToFile("output/PDFTableToExcel.xlsx", FileFormat.Version2016)
# 释放资源
workbook.Dispose()
pdf.Close()

输出结果
Python提取PDF表格到Excel工作表

使用Python直接将PDF转换为Excel文件

还可以使用PdfDocument.SaveToFile(fileName: str, FileFormat.XLSX)方法将PDF文档直接转换为Excel文件。此方法适用于以表格为主的PDF文档,有助于尽可能保留表格的原始外观。
为减少转换后Excel表格中的空白,可以在转换前去除PDF文档的边距。参考以下文章:
Python删除PDF文档的页边距

直接将PDF文档转换为Excel文件的具体步骤如下:

  1. 导入所需模块:PdfDocumentFileFormat
  2. 创建一个PdfDocument实例。
  3. 使用PdfDocument.LoadFromFile()方法加载PDF文档。
  4. 将文档转换为Excel文件并使用PdfDocument.SaveToFile(fileName: str, FileFormat.XLSX)方法保存。
  5. 释放资源。

代码示例

from spire.pdf import PdfDocument, FileFormat# 创建一个 PdfDocument 实例
pdf = PdfDocument()# 加载一个 PDF 文档
pdf.LoadFromFile("Sample.pdf")# 将 PDF 文档转换为 Excel 文件
pdf.SaveToFile("output/PDFToExcel.xlsx", FileFormat.XLSX)# 关闭 PDF 文档
pdf.Close()

输出结果
Python转换PDF为Excel

本文展示了如何用Python将PDF表格提取到文本、CSV和Excel文件,并将PDF文档转换为Excel工作簿。

申请免费License

相关文章:

用Python将PDF表格提取到文本、CSV和Excel文件中

从PDF文档中提取表格并将其转换为更易于处理的格式&#xff08;如文本、CSV和Excel文件&#xff09;&#xff0c;是数据分析和信息管理中的常见需求。此过程可显著简化表格数据的处理&#xff0c;使数据的操作、分析和与其他数据集的集成更加便捷。无论是财务报表、研究论文&am…...

AIGC在游戏设计中的应用及影响

文章目录 一、AIGC的基本概念与背景AIGC的主要应用领域AIGC技术背景 二、AIGC在游戏设计中的应用1. 自动化游戏地图与关卡设计示例&#xff1a;自动生成2D平台游戏关卡 2. 角色与物品生成示例&#xff1a;使用GAN生成虚拟角色 3. 游戏剧情与任务文本生成示例&#xff1a;基于GP…...

给初学者的 Jupyter Notebook 教程

目录 一、什么是Jupyter Notebook&#xff1f; 1. 简介 2. 组成部分 ① 网页应用 ② 文档 3. Jupyter Notebook的主要特点 二、安装Jupyter Notebook 0. 先试用&#xff0c;再决定 1. 安装 ① 安装前提 ② 使用Anaconda安装 ③ 使用pip命令安装 三、运行Jupyter No…...

搜维尔科技:Xsens和BoB助力生物力学教育

Xsens和BoB助力生物力学教育 搜维尔科技&#xff1a;Xsens和BoB助力生物力学教育...

Vue动态计算Table表格的高度

因为每个用户不同的电脑屏幕宽高度&#xff0c;造成了Table表格的高度不一致&#xff0c;因此想要动态计算出table的高度&#xff0c;让其能够正常的铺满整个屏幕 代码 完整代码如下&#xff1a;首先计算 窗口的高度 - 搜索框的高度 - 固定数值 mounted () {// 计算搜索框的高…...

【MongoDB】MongoDB的聚合(Aggregate、Map Reduce)与管道(Pipline) 及索引详解(附详细案例)

文章目录 MongoDB的聚合操作&#xff08;Aggregate&#xff09;MongoDB的管道&#xff08;Pipline操作&#xff09;MongoDB的聚合&#xff08;Map Reduce&#xff09;MongoDB的索引 更多相关内容可查看 MongoDB的聚合操作&#xff08;Aggregate&#xff09; 简单理解&#xff…...

数组和字符串的es6新方法使用和综合案例

文章目录 一、数组1.forEach() 对数组中的每个元素执行回调函数&#xff0c;无返回值。2.map() 通过对数组中的每个元素执行回调函数生成新的数组3.filter() 过滤返回一个符合条件的新数组4.find() 返回符合条件的第一个数组元素&#xff0c;如果不存在则返回undefined5.every(…...

JS语法进阶第一课!—DOM(重点)

1、DOM概念 DOM 是 JavaScript 操作网页的接口&#xff0c;全称为“文档对象模型”&#xff08;Document Object Model&#xff09; 当网页被加载时&#xff0c;浏览器将网页转为一个DOM&#xff0c;并用JS进行各种操作。比如&#xff1a;改变页面中的HTML 元素及其属性&#x…...

Swift 开发教程系列 - 第5章:集合类型

Swift 提供了几种常用的集合类型&#xff0c;用于存储和管理一组数据。这些集合类型包括数组&#xff08;Array&#xff09;、字典&#xff08;Dictionary&#xff09;和集合&#xff08;Set&#xff09;。本章将介绍它们的使用方法及常见操作。 5.1 数组&#xff08;Array&am…...

Spring:Bean(创建方式,抽象继承,工厂Bean,生命周期)

1&#xff0c;Bean的创建 1.1&#xff0c;调用构造器创建Bean 调用Bean类的无参构造函数来创造对象&#xff0c;因此要求提供无参构造函数。在这种情况下class元素是必须的&#xff0c;值就是Bean对象的实现类。 如果采用设值注入&#xff0c;Spring容器将使用默认的构造器来创…...

Flutter中的Extension关键字

目录 前言 一、什么是扩展(Extension) 二、扩展的语法 三、示例:为String 添加扩展方法 四、使用扩展的场景 五、复杂示例:为DateTime添加扩展 前言 在 Dart 和 Flutter 中&#xff0c;extension 关键字允许开发者为现有的类添加新的功能&#xff0c;而无需修改原有类的代…...

transformers 框架使用详解,bert-base-chinese

以 bert-base-chinese 模型为例&#xff0c;模型目录 model_name "C:/Users/Administrator.DESKTOP-TPJL4TC/.cache/modelscope/hub/tiansz/bert-base-chinese" bert-base-chinese 模型大小只有400多兆&#xff0c;参数的量级在百万级别&#xff0c;与现在动辄几十…...

STM32——ADC

目录 1、ADC的介绍 2、ADC主要特征 3、ADC结构与引脚 4、ADC配置流程 5、示例&#xff08;光敏电阻的ADC采样&#xff09; 6、提示 7、结语&#xff1a; 1、ADC的介绍 12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道&#xff0c;可测量16个外部和2个内部 信号…...

Unity SRP学习笔记(二)

Unity SRP学习笔记&#xff08;二&#xff09; 主要参考&#xff1a; https://catlikecoding.com/unity/tutorials/custom-srp/ https://docs.unity.cn/cn/2022.3/ScriptReference/index.html 中文教程部分参考&#xff08;可选&#xff09;&#xff1a; https://tuncle.blog/c…...

数据库第五次作业

一要求 二建库建表 触发器 存储过程 三查询 触发器 1 建立触发器&#xff0c;订单表中增加订单数量后&#xff0c;商品表商品数量同步减少对应的商品订单出数量,并测试 测试 2 建立触发器&#xff0c;实现功能:客户取消订单&#xff0c;恢复商品表对应商品的数量 测试 3…...

健身房业务流程优化:SpringBoot解决方案

3系统分析 3.1可行性分析 通过对本健身房管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本健身房管理系统采用SSM框架&#xff0c;JAVA作为开发语言&a…...

【产品经理】工业互联网企业上市之路

树根互联2022年6月2日提交招股书之后&#xff0c;因财务资料超过六个月有效期加三个月延长期&#xff0c;2022年9月30日上市审核中止&#xff1b;2022年12月26日树根互联更新了2022年半年度财务资料&#xff0c;又九个月过去了&#xff0c;其上市进程将面临再一次中止。 处于上…...

Java学习教程,从入门到精通,Java对象和类语法知识点(20)

1、Java对象和类语法知识点 类的定义 使用class关键字定义类。类名通常使用大写驼峰命名法&#xff08;PascalCase&#xff09;。类与对象 类是创建对象的模板或蓝图&#xff0c;它定义了对象的属性和行为。对象是类的实例&#xff0c;它包含了类定义的数据&#xff08;属性&am…...

金融场中的量化交易:民锋数据驱动策略的优势解析市

随着科技的发展&#xff0c;量化交易成为金融市场的重要组成部分。民锋公司通过智能算法和大数据分析&#xff0c;设计了一系列量化交易策略&#xff0c;帮助投资者实现科学投资。本文将探讨民锋在数据驱动策略上的优势&#xff0c;并展示如何通过量化模型在复杂的市场中获得收…...

Docker 配置镜像加速

docker 拉取代码时出现 ERROR: failed to solve: node:16: unexpected status from HEAD request to https:// xxxxxx.mirror.aliyuncs.com/v2/library/node/m…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

LRU 缓存机制详解与实现(Java版) + 力扣解决

&#x1f4cc; LRU 缓存机制详解与实现&#xff08;Java版&#xff09; 一、&#x1f4d6; 问题背景 在日常开发中&#xff0c;我们经常会使用 缓存&#xff08;Cache&#xff09; 来提升性能。但由于内存有限&#xff0c;缓存不可能无限增长&#xff0c;于是需要策略决定&am…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合

作者&#xff1a;来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布&#xff0c;Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明&#xff0c;Elastic 作为 …...

MySQL的pymysql操作

本章是MySQL的最后一章&#xff0c;MySQL到此完结&#xff0c;下一站Hadoop&#xff01;&#xff01;&#xff01; 这章很简单&#xff0c;完整代码在最后&#xff0c;详细讲解之前python课程里面也有&#xff0c;感兴趣的可以往前找一下 一、查询操作 我们需要打开pycharm …...

Modbus RTU与Modbus TCP详解指南

目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...