python docx合并文檔后圖片丟失的有效解決方案
使用python的docx庫合并word文檔時,經常會遇到合并后圖片無法顯示的問題。本文針對此問題,提供一種更可靠的解決方案,避免簡單復制元素導致的圖片丟失。
問題描述:如下圖所示,使用docx庫合并Word文檔后,圖片丟失。
原始代碼存在的問題:直接復制文檔元素(element.body.append(element))無法正確處理圖片的引用關系,導致圖片丟失。
改進后的代碼: 需要遍歷文檔中的每個段落,并處理段落中的每個運行元素。對于圖片,需要提取圖片數據并將其添加到新的文檔中。
立即學習“Python免費學習筆記(深入)”;
from docx import Document from docx.shared import Inches def mergeDocx(pathList, savePath): combined_document = Document() for path in pathList: document = Document(path) for paragraph in document.paragraphs: for run in paragraph.runs: if run.inline_shapes: # 檢查是否有內聯形狀(圖片) for shape in run.inline_shapes: with open(shape.image.dest, "rb") as img_file: combined_document.add_paragraph().add_run().add_picture(img_file, width=Inches(shape.width/9525)) # 調整圖片大小,根據需要修改 else: combined_document.add_paragraph(run.text) # 添加文本 combined_document.add_page_break() # 添加分頁符 combined_document.save(savePath) # 示例用法 pathList = ["document1.docx", "document2.docx"] savePath = "merged_document.docx" mergeDocx(pathList, savePath)
代碼解釋:
- 迭代段落和運行元素: 代碼首先迭代每個文檔的段落,然后迭代每個段落中的運行元素(run)。
- 檢查內聯形狀: if run.inline_shapes: 檢查運行元素中是否存在內聯形狀,即圖片。
- 提取圖片數據: 如果存在圖片,代碼迭代每個圖片形狀(shape),打開圖片文件,讀取二進制數據。
- 添加到新文檔: combined_document.add_paragraph().add_run().add_picture() 將圖片添加到新的文檔中。 width=Inches(shape.width/9525) 將圖片寬度轉換為英寸,以確保圖片大小與原始文檔一致 (9525 是 docx 中的轉換因子)。 根據實際情況調整圖片大小。
- 處理文本: 如果運行元素不是圖片,則直接添加文本 (combined_document.add_paragraph(run.text)).
- 添加分頁符: 在每個文檔合并后添加分頁符,使文檔更易于閱讀。
此方法確保了圖片數據被正確地復制到合并后的文檔中,解決了圖片丟失的問題。 請確保你的圖片文件路徑在代碼中是正確的。 如果圖片路徑是相對路徑,請確保相對路徑相對于你的python腳本的路徑是正確的。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END