我正在尝试使用 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,因此如果从新文件中删除该图像,权重差异应该更大。
我假设图像在您替换文本的运行中是“内联”的。
内联图像存储在运行中。分配给
Run.text
会将运行中的所有内容替换为您分配给它的文本,其中包括图像。
python-docx
目前无法检测到这一点并删除图像。这意味着,虽然文档部分中不再有对图像的引用,但 document.xml.rels
部分中仍然存在与它的关系,并且图像部分(类似于 word/media/image1.png
)仍然是包的一部分。这解释了文件大小保持不变的原因。
如果在Word中打开保存的文件并重新保存,孤立的图像部分可能会被删除。
目前没有
Run.remove_picture()
方法或类似方法可以让您完全删除图片。 python-docx
的常见用例是向文档中添加(文档创建)和读取文档(通常是文本提取),而不是删除或移动它们(文档编辑)。