我正在尝试使用以下 Python 代码替换 Word 2019 .docx 文件中的图像:
from docxtpl import DocxTemplate
tpl = DocxTemplate("C:\\temp\\replace_picture_tpl.docx")
context = {}
tpl.replace_pic('Sample.png','C:\\temp\\NewImage.png')
tpl.render(context)
tpl.save("C:\\temp\\TestOutput.docx")
我收到错误 ValueError:在 docx 模板中找不到图片 Sample.png。我通过将随机 .png 文件插入空白 Word 文档并保存来创建该文档。我已经仔细检查并确认它是一个 .docx 文件。然后我使用上面的代码尝试更改图片,但没有成功。我在网上查了几天,还没有找到任何可以帮助的东西。我已经浏览了 docxtpl 模板和示例代码,代码似乎引用了“descr”标签来定位“Sample.png”。但是,当我查看replace_picture_tpl.docx XML 文件时,图像没有此标记。有什么建议吗?
从上面jimh的回答中,我找到了我的解决方案。上下文:我在 docx 模板文件中使用虚拟图像作为占位符来生成未来的文档。
步骤:
在 MS Word 中右键单击图像,选择“查看替代文本”,写入“replace_me”作为替代文本。保存并关闭。
将 .docx 文件重命名为 .zip,例如:将
my_base_template.docx
重命名为 my_base_template.zip
(仅供参考:docx 类型实际上是 zip 文件)
解压文件,您将看到文件和文件夹列表,转到./word/document
打开文件,然后按 ctrl + F 找到图像的 name,找到替代文本关键字“replace_me”。就我而言,它看起来像这样:
<wp:docPr id="1" name="Picture 1" descr="replace_me"> <a:extLst xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main"> <a:ext uri="{C183D7F6-B498-43B3-948B-1728B52AA6E4}"> <adec:decorative xmlns:adec="http://schemas.microsoft.com/office/drawing/2017/decorative" val="0"/> </a:ext> </a:extLst>
,所以我的img名称是“图片1”
现在使用名称来替换图像:
xml_img_name_in_template_file = "图片1" # 在xml中搜索replace_me
template = DocxTemplate("../doc/my_base_template.docx") template.replace_pic(xml_img_name_in_template_file, "signature.png") template.save("../doc/output_file.docx")