替换图片(来自页眉)
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')
我有一个基础 .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')