Word Compressor
处理已有 .docx,使用本技能的 scripts/compress_docx.py;只依赖 Python 3.10+ 和 Pillow。不通过 python-docx 或 Office 重建文档。
执行
-
定位输入文件和本技能目录。优先使用技能目录
.venv/Scripts/python.exe(Windows)或.venv/bin/python(macOS/Linux);没有隔离环境时使用已安装 Pillow 的 Python。缺少依赖时按 README.md 中的安装方法配置。 -
根据用户要求选择参数。未指定时使用灰度、JPEG quality=85、已知显示尺寸的目标 DPI=220;原文件始终保留,输出为
原文件名.compressed.docx。仅要求压缩且希望保留颜色时用--color keep;要求不降低分辨率时用--dpi 0。无法识别显示尺寸的图片不会自动按 DPI 缩小。 -
使用绝对路径并正确引用带空格的路径,指定独立的新输出和统计报告路径:
<python> <skill-dir>/scripts/compress_docx.py <input.docx> --output <output.docx> --report <statistics.json> --json -
读取实际报告,说明文件大小、节省比例、处理/缩小/转换/跳过/删除数量,并提供输出文件。存在跳过图片时查看
images[].reason,不要宣称全部图片都变成了黑白。负节省比例表示文件增大,应如实报告。
选择与约束
--color grayscale:灰度;--color bw:二值化,阈值默认 128,可加--threshold或--dither。JPEG 转纯黑白会改为 PNG,避免 JPEG 有损编码重新产生灰色像素。透明图片保留 alpha,叠加背景后可能呈现灰色边缘。--dpi 220按 DrawingML 的实际显示尺寸计算,保留裁剪所需像素,并考虑同一图片的最大使用尺寸。VML、组合图、未知显示尺寸或额外未知使用会保守跳过自动 DPI;用户明确要求像素上限时可用--max-pixels 1600。--png-to-jpeg仅转换不透明 PNG,并安全更新图片路径、所有关系和内容类型;线条图、文字截图优先保留 PNG。只有文件更小或需要执行用户要求的灰度/分辨率变换时才采用候选图片。--remove-unused仅在用户要求媒体清理时启用;只考虑未引用 PNG/JPEG,保留未知格式、任意关系引用、字面引用、有自身关系的媒体,以及含嵌入对象时的全部媒体。不会删除字体、批注、修订或嵌入对象。- 不覆盖输入。输出已存在时选择新的路径;只有用户明确允许覆盖输出时才加
--overwrite。统计报告路径必须是新文件。 - 正文、样式、页眉页脚、图片尺寸位置和其他非目标部件保持原始字节;只修改目标图片、必要
.rels和[Content_Types].xml。脚本验证 ZIP、关系完整性和未修改部件。不能据此保证不同 Word/WPS 版本中渲染绝对一致;要求页码严格一致时,额外在用户实际使用的应用里比对页数和关键页面。 - SVG/EMF/WMF/GIF/TIFF、动画 PNG、非标准 EXIF 方向、高位深或超限图片保留并计入跳过。签名文档、带宏文件、损坏关系或实体 XML 会报错并停止,不生成最终输出。
更多命令、DPI 行为、安全边界和测试方法见 README.md。
Scan to join WeChat group