首页 > 解决方案 > 将图像插入现有 word 文件时文件损坏

问题描述

应用于现有文件的以下代码适用于 2 个图像,但超出文件被标记为已损坏(尽管它可以在 word 中完美恢复):

import docx

docTemplate = "TestTemplate.docx"

# docx job: add test subsections + images
doc_docx = docx.Document(docTemplate)
#doc_docx = docx.Document()

p = doc_docx.add_paragraph()
wp = p.add_run()
wp.add_picture('image.png')
wp.add_break()
wp.add_picture('image.png')
wp.add_break()
wp.add_picture('image.png')

doc_docx.save('TestFile2.docx')

的内容doc_docx.part.blob在 pastebin 上找到

标签: python-docx

解决方案


似乎 docTemplate 文档已经包含一些对象。感谢@Tores76 on python-docx github的回答,我可以解决“文件损坏”问题。这意味着它可能是由于重复docPr id

# fix id
doc_element = doc_docx._part._element
docPrs = doc_element.findall('.//' + qn('wp:docPr'))
for docPr in docPrs:
    docPr.set('id',str(int(docPr.get('id'))+100000))

推荐阅读