使用 python-docx 编辑 .docx 文件的文本不保存图像

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

我正在尝试使用 docx 库编辑 .docx 文件的文本,但保存在新文件中时图像显然没有保留。

代码如下:

from docx import Document

doc = Document("./doc_files/test.docx")

for paragraph in doc.paragraphs:

    if not paragraph.runs:
        continue
    
    for run in paragraph.runs:
        run.text = "plop"

doc.save("./doc_files/test_ploped.docx")

我的 docx 测试文件包含一张图像和一个单词。该文件的大小为 4682KB。 当我运行程序时,新文件为 4678KB。 我的第一个假设是图像根本没有复制到新文件中。 该图像为 190KB,因此如果从新文件中删除该图像,权重差异应该更大。

python image python-docx
1个回答
0
投票

我假设图像在您替换文本的运行中是“内联”的。

内联图像存储在运行中。分配给

Run.text
会将运行中的所有内容替换为您分配给它的文本,其中包括图像。

python-docx
目前无法检测到这一点并删除图像。这意味着,虽然文档部分中不再有对图像的引用,但
document.xml.rels
部分中仍然存在与它的关系,并且图像部分(类似于
word/media/image1.png
)仍然是包的一部分。这解释了文件大小保持不变的原因。

如果在Word中打开保存的文件并重新保存,孤立的图像部分可能会被删除。

目前没有

Run.remove_picture()
方法或类似方法可以让您完全删除图片。
python-docx
的常见用例是向文档中添加(文档创建)和读取文档(通常是文本提取),而不是删除或移动它们(文档编辑)。

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