PPTX 批量格式化修复技能
功能概览
| 功能 | 脚本 | 说明 |
|---|---|---|
| 字号统一修复 | scripts/fix_fonts.py |
扫描全片,<阈值的 run 调至目标字号,启用 word_wrap,修正边界溢出 |
| 页码格式检测 | scripts/detect_pagenum.py |
扫描 X/Y、纯数字、幻灯片编号占位符三种页码 |
| 页码批量删除 | scripts/remove_pagenum.py |
三步清理:X/Y 格式 → 布局占位符 → 右下角纯数字 |
核心原则
- 只改格式,不动内容 —
run.font.size修改,run.text绝不触碰 - 非破坏性操作 — 始终先输出到工作区,确认后再覆盖原文件
- 阈值保持层级差异 — 仅调整低于阈值的字号,原本更大的保持不动
- 不误删页码 — 章节标记(如"01""02")≠ 页码,位置+格式双重判断
Python 环境
C:/Users/admin/.workbuddy/binaries/python/envs/default/Scripts/python.exe
已预装 python-pptx。若缺失,执行:
/c/Users/admin/.workbuddy/binaries/python/versions/3.13.12/python.exe -m pip install --target /c/Users/admin/WorkBuddy/{session}/.packages python-pptx
工作流一:字号修复
Step 1 — 确认需求
询问用户:
- 目标字号(默认 16pt)
- 涉及文件路径
- 是否需要同时检测页码
Step 2 — 执行修复
C:/Users/admin/.workbuddy/binaries/python/envs/default/Scripts/python.exe \
scripts/fix_fonts.py <输入pptx> <输出pptx> [--min-size 16]
脚本自动完成:
run.font.size < Pt(min_size)→ 设为Pt(min_size)- 启用
text_frame.word_wrap = True - 修正超出幻灯片边界的形状(宽度/高度约束)
Step 3 — 验证
修复后逐页校验:
- 所有
run.font.size≥Pt(min_size) - 所有形状
left + width <= slide_width且top + height <= slide_height
验证通过后覆盖桌面原文件。
注意事项
- 文本框架的
auto_size在修复后可能失效,因 PPT 渲染引擎会重新计算 - 若部分文本框在修复后文字被截断,需手动微调(约 5% 概率)
- 含有大量嵌入表格的幻灯片,字号修复需单独处理表格单元格
工作流二:页码删除
Step 1 — 检测页码
C:/Users/admin/.workbuddy/binaries/python/envs/default/Scripts/python.exe \
scripts/detect_pagenum.py <pptx路径>
输出:页码格式、所在页面、形状名称、位置坐标、布局占位符信息。
Step 2 — 执行删除
C:/Users/admin/.workbuddy/binaries/python/envs/default/Scripts/python.exe \
scripts/remove_pagenum.py <输入pptx> <输出pptx>
安全策略:先输出到工作区,确认无误后覆盖。
页码格式与判断规则
| 格式 | 示例 | 判断条件 | 处理方式 |
|---|---|---|---|
| X/Y | 1/100, 2/100 |
正则 ^\d{1,3}\s*/\s*\d{1,4}$ |
删除形状 |
| 纯数字(右下角) | 1, 2 |
left > W*0.55 且 top > H*0.70 |
删除形状 |
| 幻灯片编号占位符 | 母版/布局中的 SLIDE_NUMBER | placeholder_format.type == 13 |
从布局中删除 |
不删除的情况:
- 章节编号(通常位于左上角或内容区,非右下角)
- 内容中的数字(如"2026年""第3章")
- 非纯数字的文本(如"Page 1")
批量处理
当用户提供多个文件时:
- 逐个执行修复/删除脚本
- 全部完成后汇总结果
- 提示用户确认,再统一覆盖
错误处理
| 错误 | 处理 |
|---|---|
| 文件被占用 (PermissionError) | 提示关闭 PowerPoint/WPS,换临时路径输出 |
| 未检测到页码 | 用 detect_pagenum.py 全面扫描;或请用户截图说明页码样式 |
| python-pptx 缺失 | 按上方 Python 环境说明安装 |
| 字号修复后文字溢出 | 微调对应文本框宽度,或提示用户手动调整 |
