Python docx合并文檔后圖片丟失怎么辦 問題:使用Python docx庫合并Word文檔后,圖片無法顯示,如何解決?

python docx合并文檔后圖片丟失的有效解決方案

使用python的docx庫合并word文檔時,經常會遇到合并后圖片無法顯示的問題。本文針對此問題,提供一種更可靠的解決方案,避免簡單復制元素導致的圖片丟失。

問題描述:如下圖所示,使用docx庫合并Word文檔后,圖片丟失。

Python docx合并文檔后圖片丟失怎么辦 問題:使用Python 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)

代碼解釋:

  1. 迭代段落和運行元素: 代碼首先迭代每個文檔的段落,然后迭代每個段落中的運行元素(run)。
  2. 檢查內聯形狀: if run.inline_shapes: 檢查運行元素中是否存在內聯形狀,即圖片。
  3. 提取圖片數據: 如果存在圖片,代碼迭代每個圖片形狀(shape),打開圖片文件,讀取二進制數據。
  4. 添加到新文檔: combined_document.add_paragraph().add_run().add_picture() 將圖片添加到新的文檔中。 width=Inches(shape.width/9525) 將圖片寬度轉換為英寸,以確保圖片大小與原始文檔一致 (9525 是 docx 中的轉換因子)。 根據實際情況調整圖片大小。
  5. 處理文本: 如果運行元素不是圖片,則直接添加文本 (combined_document.add_paragraph(run.text)).
  6. 添加分頁符: 在每個文檔合并后添加分頁符,使文檔更易于閱讀。

此方法確保了圖片數據被正確地復制到合并后的文檔中,解決了圖片丟失的問題。 請確保你的圖片文件路徑在代碼中是正確的。 如果圖片路徑是相對路徑,請確保相對路徑相對于你的python腳本的路徑是正確的。

? 版權聲明
THE END
喜歡就支持一下吧
點贊12 分享