基于tabula对pdf中多个excel进行识别并转换成word中的优化(五)

        优化地方:处理合并的单元格内容。

        1、修改为stream="complex"

        2、增加换行符f"{table_data[i - 1][j]}\n{table_data[i][j]}".strip()

        一、pdf中excel样例

      二、完整代码

import tabula
import numpy as np
from docx import Document
from docx.oxml.ns import qn
from docx.oxml import OxmlElement# print("multitab:", tables)# 创建一个新的Word文档
doc = Document()def get_table_data(df_list):multi_table_data = []# 遍历每个表格for table_index, table in enumerate(df_list):table_data = []# 获取行数和列数rows, cols = table.shapeheading_cells = []for col_num, column_name in enumerate(table.columns):heading_cells.append(column_name)table_data.append(heading_cells)for row_index, row in table.iterrows():table_data.append(row.tolist())multi_table_data.append(table_data)return multi_table_datadef handle_table(multitable_data):multi_table_data = []for table_data in multitable_data:for i in range(len(table_data) - 1, 0, -1):if table_data[i][0] in [None, np.nan, ""] or table_data[i][1] in [None,np.nan,"",]:for j in range(len(table_data[i])):if table_data[i][j] not in [None,np.nan,"",]:  # 只有当单元格不为空时才合并table_data[i - 1][j] = f"{table_data[i - 1][j]}\n{table_data[i][j]}".strip()# 删除当前行del table_data[i]multi_table_data.append(table_data)return multi_table_datadef set_cell_borders(cell, border_color="000000", row_height=None):"""设置单元格的边框颜色:param cell: 单元格对象:param border_color: 边框颜色,默认为黑色"""tc = cell._elementtcPr = tc.get_or_add_tcPr()tcBorders = OxmlElement("w:tcBorders")for border_name in ("top", "left", "bottom", "right"):border = OxmlElement(f"w:{border_name}")border.set(qn("w:val"), "single")border.set(qn("w:sz"), "4")  # 边框大小border.set(qn("w:space"), "0")border.set(qn("w:color"), border_color)tcBorders.append(border)tcPr.append(tcBorders)# 设置内容居中显示for paragraph in cell.paragraphs:for run in paragraph.runs:run.font.size = paragraph.style.font.size  # 保持字体大小一致paragraph.alignment = 1  # 1 表示居中对齐# 设置行高if row_height is not None:tr = cell._element.getparent()  # 获取行元素trPr = tr.get_or_add_trPr()trHeight = OxmlElement("w:trHeight")trHeight.set(qn("w:val"), str(row_height))trPr.append(trHeight)def create_table_and_fill_data(tables_data, output_file):"""在 Word 文档中插入表格并填充数据:param data: 表格数据:param output_file: 输出文件路径"""# 创建一个新的 Word 文档doc = Document()for row_index, data in enumerate(tables_data):# 添加一个标题sssdoc.add_heading("测试信息表" + str(row_index), level=1)# 创建表格table = doc.add_table(rows=len(data), cols=len(data[0]))# 填充表格数据for row_index, row_data in enumerate(data):for col_index, cell_text in enumerate(row_data):cell = table.cell(row_index, col_index)cell.text = str(cell_text)set_cell_borders(cell, border_color="FF0000", row_height=300)# 设置表格边框颜色# 保存 Word 文档doc.save(output_file)# pdf_file = "multitab.pdf"
pdf_file = "excelcell.pdf"
output_file = "order0429multitab.docx"  # 输出的 Word 文件路径
# 读取PDF文件中的所有表格
tables = tabula.read_pdf(pdf_file, pages="all", multiple_tables=True, stream="complex")
multi_table_data = get_table_data(tables)
print("table_data:", multi_table_data)new_multi_table_data = handle_table(multi_table_data)# 替换 nan 值为空字符串
_new_multi_table_data = [[["" if isinstance(item, float) and np.isnan(item) else item for item in row]for row in table]for table in new_multi_table_data
]print("new_multi_table_data:", _new_multi_table_data)
create_table_and_fill_data(_new_multi_table_data, output_file)

三、效果展示

        

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

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

相关文章

pytest基础知识----配置

1、自动化主流框架介绍 当前业界基于python语言的自动化框架主要包括:Unittest,Pytest这2种,其中:Unittest是Python标 准库中自带的单元测试框架,Unittest有时候也被称为PyUnit,就像JUnit是Java语言的标准单元测试框…

Python实现简易博客系统

下面我将介绍如何使用Python实现一个简易的博客系统,包含前后端完整功能。这个系统将使用Flask作为Web框架,SQLite作为数据库,并包含用户认证、文章发布、评论等基本功能。 1. 系统架构设计 技术栈选择 ​​后端​​:Flask (Python Web框架)​​数据库​​:SQLite (轻量…

蓝桥杯比赛

蓝桥杯全国软件和信息技术专业人才大赛是由工业和信息化部人才交流中心主办,国信蓝桥教育科技(北京)股份有限公司承办的计算机类学科竞赛。以下是其相关信息: 参赛对象 具有正式全日制学籍且符合相关科目报名要求的研究生、本科生…

高性能、云原生的对象存储服务MinIO 详细介绍与案例应用

什么是MinIO? MinIO是一个高性能、云原生的对象存储服务,采用Apache License v2.0开源协议发布。它与Amazon S3云存储服务API兼容,适合构建高性能、可扩展的存储基础设施。支持大规模非结构化数据的存储,适合图片、视频、日志、备…

Transformer架构的解耦重组现象

技术演进图谱与技术成熟度曲线 (一)架构创新范式迭代 1.1 Transformer架构的解耦重组现象 以2025年Opt模型为例,其通过引入强化学习微调模块实现了传统单层堆叠架构向"感知-推理分离"模式的转型。实验数据显示,该架构…

Linux——线程(3)线程同步

一、线程同步的引入 通过上面的抢票系统我们发现,有的线程,进行工作(挂锁),当其马上结束工作(解锁),发现外面有很多线程在排队等着加锁执行任务,这个线程解锁后就立马给…

基于go的简单管理系统(增删改查)

package mainimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql" )var db *sql.DBtype user struct {id intname stringage int }// 建立连接 func initDB() (err error) {dsn : "root:123456tcp(127.0.0.1:3306)/mysqltes…

HTN77A0原理图提供聚能芯半导体禾润一级代理技术支持免费送样

在电源管理需求日益严苛的当下,禾润 HTN77A0 以卓越性能脱颖而出。它不仅适配多种应用场景,还兼具高效节能与稳定输出,为设备供能带来革新体验。 禾润 HTN77A0 同步降压变换器,凭借5V~130V 超宽输入电压范围,打破传统供…

小程序中的页面跳转

小程序中的页面跳转 在之前网页的学习中,我们往往采用超链接,或者定义方法、函数等方式来实现页面的跳转,但是微信小程序中没有超链接,那我们该如何实现呢?微信小程序的页面跳转包括两个,一个是tabBar页面…

在K8S迁移节点kubelet数据存储目录

默认k8s节点kubelet数据目录在 /var/lib/kubelet,如果在部署前没有做好规划,其实默认就存储在系统盘/分区下了,这样会导致一个问题,如果数据量过大会导致kubelet服务异常,其次,系统盘下有一些系统服务引用&…

MySQL基础关键_002_DQL(一)

目 录 一、初始化 二、简单查询 1.部分语法规则 2.查询一个字段 (1)查询员工编号 (2)查询员工姓名 3.查询多个字段 (1)查询员工编号、姓名 (2)查询部门编号、名称、位置 …

阿里云服务迁移实战: 04-IP 迁移

普通过户 如资料过户按量付费EIP所述,如果原账号是个人账号,则目标账号无限制,如果原账号是企业账号,则目标账号必须为相同认证主体的企业账号。 其主要操作就是,在原账号发起过户,在新账号接收过户。具体…

安恒安全培训实习生,CTF方向面试题!

目均模拟真实CTF赛题,需结合动态调试与工具链(pwntools/ROPgadget/one_gadget)完成利用。 覆盖栈、堆、格式化字符串、高级堆利用、沙箱逃逸五大方向,从基础ROP到House of Apple,逐步提升对抗防护的能力。 题目1&…

【C++QT】Combo Box 组合框控件详解

文章目录 一、QComboBox(Combo Box)1. 基本用法2. 特性3. 信号与槽函数 二、QFontComboBox(Font Combo Box)1. 基本用法2. 特性3. 信号与槽函数 三、总结如果这篇文章对你有所帮助,渴望获得你的一个点赞! 在…

Best Video下载器——全能高清无水印视频下载工具

在当今短视频和流媒体盛行的时代,用户经常遇到想要下载视频却受限于平台限制的情况。无论是收藏喜欢的影视片段、保存有价值的教程,还是进行二次创作,一款高效、免费且支持多平台的视频下载工具显得尤为重要。Best Video下载器正是为此而生&a…

AI音频核爆!Kimi开源“六边形战士”Kimi-Audio,ChatGPT语音版?

音频处理领域的天花板被撕开了。 刚刚,kimi 发布全新通用音频基础模型 Kimi-Audio,这款由月之暗面(Moonshot AI)推出的开源模型,在 24 小时内收获 3.2 万星标,不仅以 1.28% 词错率刷新语音识别纪录&#xf…

安装VMware虚拟机时出现报错:

如果已在 BIOS/固件设置中禁用 Intel VT-x,或主机自更改此设置后从未重新启动,则 Intel VT-x 可能被禁用。 1.解决的方法: BIOS 设置要求 为了使 VMware Workstation 支持用户级别的监控并允许模块 MonitorMode 成功启动,需确保…

基于ESP32 S3 + PVDF采集呼吸心率

压电薄膜可以采集到微动特征,压阻传感器可以采集到是否有大重量压力,利用这个特性实现类似于床带采集呼吸心率,实现生命体征检测功能 ESP32 S3 PVDF实现生命体征检测带 硬件: ESP32 S3PVDF压敏压阻涂鸦传感器(可选支…

多模态大语言模型arxiv论文略读(五十)

Pensieve: Retrospect-then-Compare Mitigates Visual Hallucination ➡️ 论文标题:Pensieve: Retrospect-then-Compare Mitigates Visual Hallucination ➡️ 论文作者:Dingchen Yang, Bowen Cao, Guang Chen, Changjun Jiang ➡️ 研究机构: 同济大学…

智能驾驶新时代:NVIDIA高级辅助驾驶引领未来出行安全

智能驾驶新时代:NVIDIA高级辅助驾驶引领未来出行安全 在全球汽车产业数字化转型的时代潮流中,高级辅助驾驶技术已逐渐成为推动产业革新的核心动力。作为这一领域的领导者之一,NVIDIA通过其先进的技术解决方案,正在积极塑造未来的…