替换图片(来自页面标题)

时间:2015-01-18 18:04:13

标签: python-docx

我有一个基础.docx,我需要根据具体情况更改页眉/页脚图像。我读过python-docx 还没有处理页眉/页脚但是它确实处理了图片。

我无法解决的问题是如何更换它们。

我发现文件中的图片._package.parts对象为ImagePart,我甚至可以尝试通过partname属性识别图像。

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

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

目前的代码是:

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')

谢谢, 渣

1 个答案:

答案 0 :(得分:1)

没有要求使用python-docx。我找到了另一个用于搞乱docx文件的Python库,称为“paradocx”,似乎有点放弃它可以满足我的需要。

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')