使用python-docx编辑.docx文本时图片未保留的问题排查
问题分析与解决
首先明确:你的代码没有删除图片,文件大小仅差4KB就能证明——如果190KB的图片真丢失了,文件大小应该至少减少190KB,而不是这点差异。那4KB的变化只是文本替换带来的格式、元数据微调。
为什么会产生“图片没保留”的错觉?因为python-docx里的图片和文本是分开存储的:
- 嵌入式图片(和文字在同一段落的)属于段落的
inline_shapes集合,不在run.text里,你的代码只修改了run的文本,根本碰不到这部分图片。 - 浮动图片(比如文本框里、页眉页脚、浮在文字上方的)属于文档的
shapes集合,你的代码也没处理这部分,自然也会被保留。
验证图片是否存在的方法
可以用一段简单代码确认:
from docx import Document doc = Document("./doc_files/test_ploped.docx") # 查看嵌入式图片数量 print("嵌入式图片数量:", len(doc.inline_shapes)) # 查看浮动图片数量 print("浮动图片数量:", len(doc.shapes))
如果输出的数量大于0,说明图片确实完整保留在新文档里了。
额外提示
如果打开新文档没看到图片,大概率是图片位置和替换后的"plop"文本挨在一起,或者原文档中图片和文字在同一段落,替换后文字变短,图片位置看起来不显眼,仔细找找就能看到。
内容的提问来源于stack exchange,提问作者Cactus Cata
相关产品推荐
相关产品推荐

