基于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.pswp.cn/web/77991.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/77991.shtml
英文地址,請注明出處:http://en.pswp.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通過其先進的技術解決方案,正在積極塑造未來的…