用Python提取PDF表格到Excel文件
在对PDF中的表格进行再利用时,除了直接将PDF文档转换为Excel文件,我们还可以提取PDF文档中的表格数据并写入Excel工作表。这样做可以避免一些不必要的文本和格式带来的干扰,获得更易于分析和处理的表格数据,并方便进行更多的格式设置。利用Python,我们可以实现对PDF表格数据的批量提取,并写入Excel工作表中,实现高效的提取写入操作。本文将介绍如何使用Python提取PDF文档中的表格并写入Excel文件中。
本文所使用的方法需要用到Spire.PDF for Python和Spire.XLS for Python,PyPI:pip install spire.pdf, spire.xls。
申请免费License
Python提取PDF表格数据写入Excel工作表
提取表格需要用到Spire.PDF for Python中的PdfTableExtractor类。我们可以使用载入的PDF文档创建一个PdfTableExtractor对象,然后使用PdfTableExtractor.ExtractTable()方法直接提取指定页面的所有表格返回为列表。然后,我们可以使用PdfTable.GetText()来获取表格指定单元格的文本,再使用Spire.XLS for Python新建工作表并写入读取的数据到工作表中的相应位置。最后,对工作表进行合适的格式设置,即可完成PDF表格数据到Excel工作表的提取。
以下是详细操作步骤:
- 导入所需模块。
- 创建
PdfDocument对象,并使用PdfDocument.LoadFromFile()方法加载PDF文档。 - 创建一个
Workbook对象,并使用Workbook.Worksheets.Clear()方法清除默认工作表。 - 为加载的PDF文档创建一个
PdfTableExtractor对象。 - 使用
PdfTableExtractor.ExtractTable()方法提取文档中每一页的表格。 - 遍历每个表格
- 使用
Workbook.Worksheets.Add()方法为每个表格在工作簿中添加一个工作表。 - 使用
Table.GetText()方法遍历各行各列以获取单元格值,并通过Worksheet.Range[].Text属性将其插入工作表的相应位置。 - 设置单元格格式。
- 使用
- 使用
Workbook.SaveToFile()方法保存工作簿。 - 释放资源。
代码示例
from spire.pdf import *
from spire.xls import *# 创建一个 PdfDocument 对象
pdf = PdfDocument()
# 加载一个 PDF 文档
pdf.LoadFromFile("示例.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 = "HarmonyOS Sans SC"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 = "HarmonyOS Sans SC"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文件中。
更多PDF文档操作技巧请前往Spire.PDF for Python教程查看。
相关文章:
用Python提取PDF表格到Excel文件
在对PDF中的表格进行再利用时,除了直接将PDF文档转换为Excel文件,我们还可以提取PDF文档中的表格数据并写入Excel工作表。这样做可以避免一些不必要的文本和格式带来的干扰,获得更易于分析和处理的表格数据,并方便进行更多的格式设…...
Java基础|多线程:多线程分页拉取
前言: 通常我们都会遇到分页拉取的需求,比如与第三方系统同步数据,定时拉取全量数据做缓存,下面我们简单介绍下多线程分页写法 需求: 全量同步第三方系统数据,并在全部数据同步完后,统一做缓存…...
Android RecyclerView 实现 GridView ,并实现点击效果及方向位置的显示
效果图 一、引入 implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30 二、使用步骤 1.Adapter public class UnAdapter extends BaseQuickAdapter<UnBean.ResultBean, BaseViewHolder> {private int selectedPosition RecyclerView.NO_POSITIO…...
Centos中dnf和yum区别对比
dnf和yum是两种不同的包管理工具,它们各自具有独特的特点和优势,主要用于在Linux系统上安装、更新和卸载软件包。以下是dnf和yum之间的主要区别: 1. 依赖关系解决 dnf:dnf在处理依赖关系方面表现出更强的能力。它能够更高效地解…...
CVPT: Cross-Attention help Visual Prompt Tuning adapt visual task
论文汇总 当前的问题 图1:在VTAB-1k基准测试上,使用预训练的ViT-B/16模型,VPT和我们的CVPT之间的性能和Flops比较。我们将提示的数量分别设置为1、10、20、50,100,150,200。 如图1所示,当给出大量提示时,VPT显示了性能的显著下降…...
基于双向 LSTM 和 CRF 的序列标注模型
基于双向 LSTM 和 CRF 的序列标注模型 在自然语言处理中,序列标注是一项重要的任务,例如命名实体识别、词性标注等。本文将介绍如何使用 Keras 构建一个基于双向 LSTM 和 CRF 的序列标注模型。 一、引言 序列标注任务要求为输入序列中的每个元素分配一个标签。传统的方法可…...
为何美国与加拿大边界看似那么随意?
我们在《日本移民巴西超200万,会成第二个“巴勒斯坦”吗?》一文中探讨了日本移民巴西的历史,以及移民对巴西的风险与挑战。 今天我们来探讨美国与加拿大边界为什么那么随意,并整理了加拿大和美国的国界、省界、市界行政边界数据分享给大家&a…...
什么是触发器(Trigger)?触发器何时会被触发?
在数据库管理系统中,触发器是一种特殊的存储过程,它会在特定的表上执行插入、更新或删除操作时自动触发。 触发器的主要用途是维护数据的一致性和完整性,以及实现一些复杂的业务逻辑。 触发器何时会被触发? 触发器可以在以下几…...
一步一步优化一套生成式语言模型系统
以下是这套生成式语言模型解决任务的流程图概述: #mermaid-svg-keXg8yGoCyObKDtu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-keXg8yGoCyObKDtu .error-icon{fill:#552222;}#mermaid-svg-keXg8yGoCyO…...
Q必达任务脚本
文章目录 1.购买服务器地址2.部署教程3. 代码如下4. 如何联系我 1.购买服务器地址 服务器购买地址 https://t.aliyun.com/U/rUHk58 若失效,可用地址 https://www.aliyun.com/activity/wuying/dj?source5176.29345612&userCode49hts92d 2.部署教程 2024年最…...
问请问请问2312123213123
📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…...
Vue3:快速生成模板代码
目录 一.模板代码 1.提供基础结构 2.定义组件名称 3.初始化数据和方法 4.应用样式 5.提高开发效率 二.操作 1.点击右下角设置按钮选择代码片段 2.输入vue.json,打开vue.json文件 3.构造模板 4.模板代码 5.使用 6.效果 一.模板代码 Vue3快速生成模板代…...
文件上传-php
查找方式 ***(1) 黑盒 查找(upload) 扫描 (2) 应用型 窗口 上传中心或者后台中心 上传 Ps:后台是后台 权限是权限 (3) 会员中心 (4) 白盒 基本函数定义 写前端的 Enctype 上传类型Method 提交方式Onsubmit 鼠标的时间Action"放在指定文件"Php 接受表单数据 isset(…...
C++设计模式(更新中)
文章目录 1、创建型模式1.1 简单工厂(Simple Factory)(1)示例(2)总结 1.2 工厂方法(Factory Method)(1)示例(2)总结 1.3 抽象工厂&…...
Kali crunsh字典工具
查看自带密码字典 vim /usr/share/wordlists 使用 crunch 字典工具 随机组成6位纯数字密码 crunch 6 6 0123456789 -o test1.txt 由 Abc1234 随机组成的 6~8 位密码 crunch 6 8 Abc1234 -o test2.txt 以A开头后面跟3位数字组成的4位密码 crunch 4 4 -t A%%% -o test3.txt...
Redis系列---Redission分布式锁
文章目录 类型原理使用看门狗与setNx比较 类型 使用Redission,lock的机制其实是使用了ttl,一直等ttl为0再get。无论是redission还是redis的setNx,只要是锁,都必须有加锁和释放锁两个动作,二者缺一不可,并且…...
算法打卡:第十一章 图论part05
今日收获:并查集理论基础,寻找存在的路径 1. 并查集理论基础(from代码随想录) (1)应用场景:判断两个元素是否在同一个集合中 (2)原理讲解:通过一个一维数组…...
3.《DevOps》系列K8S部署CICD流水线之部署MetalLB负载均衡器和Helm部署Ingress-Nginx
架构 服务器IP服务名称硬件配置192.168.1.100k8s-master8核、16G、120G192.168.1.101k8s-node18核、16G、120G192.168.1.102k8s-node28核、16G、120G192.168.1.103nfs2核、4G、500G操作系统:Rocky9.3 后续通过K8S部署GitLab、Harbor、Jenkins 为什么使用MetalLB 当使用云平…...
MySQL:表的约束
目录 1 空属性 2 默认值 3 列描述 4 zerofill 5 主键 6 自增长 7 唯一键 8 外键 真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性。比如有…...
38.重复的子字符串
方法1: class Solution {public boolean repeatedSubstringPattern(String s) {if (s.equals("")) return false;String s2(ss).substring(1,(ss).length()-1);//去掉首尾字符return s2.contains(s);//判断是否包含s} } class Solution(object):def rep…...
Kubernetes资源监控与告警:从指标到行动的完整闭环
Kubernetes资源监控与告警:从指标到行动的完整闭环没有监控的集群就是黑盒,没有告警的监控就是摆设。监控体系架构 一个完整的K8s监控体系包含三个层次: ┌────────────────────────────────────────…...
前端集成实战:使用JavaScript与Vue调用国风美学模型生成动态页面素材
前端集成实战:使用JavaScript与Vue调用国风美学模型生成动态页面素材 最近在做一个国风主题的官网项目,设计师给了一堆精美的背景图、水印和装饰元素,但每次活动页需求一来,就得重新设计,沟通成本高,交付也…...
西北工业大学GeekOS实验踩坑记:从分段到分页,手把手教你搞定Project4的虚拟内存
西北工业大学GeekOS实验深度解析:虚拟内存实现与优化实战 实验背景与核心挑战 操作系统课程中的GeekOS项目一直是计算机专业学生深入理解系统底层原理的重要实践环节。Project4作为其中的关键里程碑,要求学生从分段存储管理过渡到分页虚拟内存系统的实…...
如何在编程中免费使用LxgwWenKai字体:终极指南
如何在编程中免费使用LxgwWenKai字体:终极指南 【免费下载链接】LxgwWenKai LxgwWenKai: 这是一个开源的中文字体项目,提供了多种版本的字体文件,适用于不同的使用场景,包括屏幕阅读、轻便版、GB规范字形和TC旧字形版。 项目地址…...
出差党/远程办公必备:用OpenWrt软路由打造你的随身‘家庭办公室’(支持Windows远程唤醒与桌面)
移动办公革命:OpenWrt软路由构建高效远程办公系统 1. 现代远程办公的痛点与解决方案 作为一名常年奔波于各大城市的咨询顾问,我深刻理解移动办公的痛点:酒店网络不稳定、公共WiFi安全隐患、重要文件无法随时调取、高性能工作站闲置在家...直到…...
Mac Mouse Fix 3.x升级指南:从基础增强到专业级鼠标体验的进化之路
Mac Mouse Fix 3.x升级指南:从基础增强到专业级鼠标体验的进化之路 【免费下载链接】mac-mouse-fix Mac Mouse Fix - A simple way to make your mouse better. 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 价值导向:为什么…...
OpenInTerminal:重塑macOS开发工作流的效率革命工具
OpenInTerminal:重塑macOS开发工作流的效率革命工具 【免费下载链接】OpenInTerminal ✨ Finder Toolbar app for macOS to open the current directory in Terminal, iTerm, Hyper or Alacritty. 项目地址: https://gitcode.com/gh_mirrors/op/OpenInTerminal …...
Cloudflare邮件路由的隐藏玩法:一个域名无限别名,管理不同网站注册,再也不怕信息泄露
Cloudflare邮件路由的隐私管理艺术:用无限别名打造数字身份防火墙 在个人信息如同裸奔的数字时代,每次网站注册都是一次隐私赌博。你是否经历过这样的困扰?某个小众论坛注册三个月后,主邮箱突然涌入大量赌博邮件;双十一…...
InternLM2-Chat-1.8B在复杂网络问题诊断中的辅助应用
InternLM2-Chat-1.8B在复杂网络问题诊断中的辅助应用 网络问题就像家里的电路故障,灯不亮了,你很难一眼看出是灯泡坏了,还是开关问题,或者是总闸跳了。对于运维工程师来说,服务器连不上、服务访问超时、端口冲突这些“…...
MATLAB实战:如何用最小二乘法搞定系统辨识(附完整代码)
MATLAB实战:最小二乘法在系统辨识中的工程应用指南 在工业控制、信号处理等领域,系统辨识是建立数学模型的关键步骤。想象一下,当你面对一组输入输出数据,却不知道背后的系统规律时,最小二乘法就像一把瑞士军刀&#x…...
