如何使用 python-docx 的路径嵌入图像,将图像迭代添加到 .DOCX 模板,并保存每个唯一的 .DOCX?

How can I embed images using path to python-docx, iteratively add the images to a .DOCX template, and save each unique .DOCX?

我正在尝试使用 Python 解决涉及图像文件和 python-docx 库的目录路径的问题。

我有一个包含 100 个 *.png 文件的目录,这些文件是唯一的 QR 码,由单独的进程创建:

  codes_dir
    ├── qr_code001.png
    ├── qr_code002.png
    ├── qr_code003.png
    ├── qr_code004.png
    ├── qr_code005.png
    etc

我需要将每个*.png二维码嵌入到一个标准的.DOCX文件中,然后保存唯一的结果。 .DOCX 模板如下所示:

事实上,每个文件都需要如下所示:

然后在一个单独的目录中,我将有一个唯一的 .DOCX 文件列表,这些文件对应于每个唯一 QR 码的基本名称,如下所示:

  codes_dir
    ├── qr_code001.png
    ├── qr_code002.png
    ├── qr_code003.png
    ├── qr_code004.png
    ├── qr_code005.png
    etc
   docx_dir
    ├── qr_code001.docx
    ├── qr_code002.docx
    ├── qr_code003.docx
    ├── qr_code004.docx
    ├── qr_code005.docx
    etc

这是我尝试过的方法,运行 来自 docx_dir:

from docx import Document
import glob
import os

def embed_qr_code():
    doc = Document("path/to/template.docx")
    qr_images = glob.glob("path/to/codes_dir")
    for image in qr_images:
        image_name = os.path.basename(image)
        doc.add_picture(image)
        doc.save(f"{image_name}.docx")

embed_qr_code()

我最终得到 100 个如下所示的文件:

   docx_dir
    ├── qr_code001.png.docx
    ├── qr_code002.png.docx
    ├── qr_code003.png.docx
    ├── qr_code004.png.docx
    ├── qr_code005.png.docx
    etc

似乎可行,但不是每个 .DOCX 文件一个 QR 码图像,.DOCX 文件包含...好吧,不是一个 QR 码。当每个 QR 图像文件名都是唯一的时,我不明白这是怎么回事。

你能帮我理解我做错了什么吗?感谢您提供的任何帮助。

您必须为每个图像打开一个新文件。因此,将您的 Document() 调用向下移动到循环中,如下所示:

def embed_qr_code():
    qr_images = glob.glob("path/to/codes_dir")
    for image in qr_images:
        image_name = os.path.basename(image)
        doc = Document("path/to/template.docx")
        doc.add_picture(image)
        doc.save(f"{image_name}.docx")

否则 doc 会在添加图像时累积图像,因此第一个保存的文档会得到一个,第二个会得到一个加上另一个,依此类推,例如 1、2、3 ... 图像和 qr_images.

中的图像一样