替换Word docx格式的图像

问题描述 投票:0回答:3

我正在尝试使用以下 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 文件时,图像没有此标记。有什么建议吗?

python image replace docx
3个回答
1
投票

所以,这对我来说很有效,使用 docxtpl 和我在 MS Word 中修改的模板:

在 MS Word 中右键单击图像,选择“查看替代文本”:

将“replace_me”写入替代文本。保存并关闭。

然后:

from docxtpl import DocxTemplate

tpl = DocxTemplate("sometemplate.docx")
tpl.replace_pic("replace_me", "yourimage.png")

确实适用于 MS Word for Mac 2022,版本 16.69 (23010700)。


1
投票

Python 中的这个属性是模板 DOCX 文档中的“描述”。

在 MS Word 或 LibreOffice 中打开模板,单击要替换的图像,单击右键并选择属性。在对话框窗口中,找到“描述”字段,然后将您的标签放在这里。来自 LibreOffice Writer 的屏幕截图。


0
投票

从上面jimh的回答中,我找到了我的解决方案。上下文:我在 docx 模板文件中使用虚拟图像作为占位符来生成未来的文档。

步骤:

  1. 在 MS Word 中右键单击图像,选择“查看替代文本”,写入“replace_me”作为替代文本。保存并关闭。

  2. 将 .docx 文件重命名为 .zip,例如:将

    my_base_template.docx
    重命名为
    my_base_template.zip
    (仅供参考:docx 类型实际上是 zip 文件)

  3. 解压文件,您将看到文件和文件夹列表,转到./word/document

  4. 打开文件,然后按 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”

  5. 现在使用名称来替换图像:

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

© www.soinside.com 2019 - 2024. All rights reserved.