python-docx - 将图像插入现有 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 上找到
解决方案
似乎 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))