替换图片(来自页眉)

Replace picture (from page header)

我有一个基础 .docx,我需要根据具体情况更改页眉/页脚图像。我读到 python-docx 还不能处理 headers/footers 但它可以处理图片。

我无法解决的是如何替换它们。

我在文档中找到了图片。_package.parts 对象作为 ImagePart,我什至可以尝试通过其 partname 属性来识别图像。

我无论如何也找不到如何替换图像。我尝试替换 ImagePart ._blob 和 ._image 属性,但保存后没有任何区别。

那么,使用 python-docx 将一个图像 blob 替换为另一个图像 blob 的 "good" 方法是什么? (这是我唯一需要做的改变)。

当前代码是:

d = Document(docx='basefile.docx')
parts = d._package
for p in parts:
    if isinstance(p, docx.parts.image.ImagePart) and p.partname.find('image1.png'):
        img = p
        break
img._blob = open('newfile.png', 'r').read()
d.save('newfile.docx')

谢谢, 马克

没有使用 python-docx 的要求。我找到了另一个 Python 库,用于处理名为 "paradocx" 的 docx 文件,虽然它似乎有点被遗弃了,但它可以满足我的需要。

python-docx 会更好,因为该项目看起来更健康,因此仍然需要基于它的解决方案。

无论如何,这是基于 paradocx 的解决方案:

from paradocx import Document
from paradocx.headerfooter import HeaderPart

template = 'template.docx'
newimg = open('new_file.png', 'r')

doc = Document.from_file(template)
header = doc.get_parts_by_class(HeaderPart).next()
img = header.related('http://schemas.openxmlformats.org/officeDocument/2006/relationships/image')[0]

img.data = newimg.read()
newimg.close()

doc.save('prueba.docx')