Word 文档图片批量转灰白
把 .docx/.docm 里的图片全部变成灰白,同时保证排版、分页、页码完全不变。
必须遵守的做法
- 只在 docx 的 zip 包内替换图片字节。不要用 Word、WPS 或 LibreOffice 打开再另存,也不要整包解开重打包后交给 Office 重新排版——那会重新分页。
- 不改变图片的像素尺寸、DPI、透明通道和 EXIF 方向。版式由正文里记录的高宽决定,像素尺寸保持一致是页码不变的前提。
- 除图片外的所有部件必须逐字节保持原样(document.xml、styles.xml、页眉页脚、rels、[Content_Types].xml 等),zip 条目顺序与压缩方式保持不变。
- 默认输出到新目录,原文件不动。只有用户明确要求覆盖时才覆盖,且先备份。
用法
python scripts/grayscale_docx.py <文档或文件夹> [更多路径 ...] [--out 输出目录] [--in-place] [--quality 92]
- 文件夹输入默认输出到同级目录的
<文件夹名>-灰度版;文件输入默认输出到同级目录的灰度版。 --in-place覆盖原文件,覆盖前把原件备份到同级原始备份-<时间戳>目录。- 需要 Pillow:
python -m pip install pillow。
完成后必须核对脚本输出
pages: X -> X:文档记录页数不变。- 没有"改动条目"、
entry_order_ok=True:除图片外没有任何改动。 grayscale_media=n/n:全部图片已是灰白。- 末尾为
ALL_OK才算完成;出现HAS_ISSUES必须先查清原因,再决定是否交付。
docProps/app.xml 里的页数是 Office 写入的缓存值,它不变只是旁证;真正的保证来自"正文等部件逐字节未变"加"图片显示尺寸未变",两点都通过时渲染分页不会变化。
需要单独向用户说明的情况
- EMF / WMF / SVG 等矢量图 Pillow 无法转换,脚本会在
unconvertible中列出。处理它们需先转成位图再替换,可能影响版式,必须先征得用户同意。 - 转换后文件通常会明显变小(灰度图压缩率更高),可作为附带收益一并说明。
Scan to join WeChat group