| 限制项 | 说明 | |
|---|---|---|
| -------- | ------ | |
| 需要 Office 软件 | 兼容输出需要 WPS 或 Microsoft PowerPoint(两者同等支持)。仅布局检测和修复不需要。 | |
| 重叠问题需手动处理 | 自动修复可以处理文字溢出和边距问题,但元素重叠只能检测、无法自动修复。 | |
| 极端溢出不可修 | 溢出率超过 300% 时,自动修复会标记为「不可修复」并给出可操作建议。 | |
| SmartArt 不推荐 | WPS 和 PowerPoint 渲染 SmartArt 效果不同,建议避免。 | |
| 管道编码注意事项 | Windows PowerShell 的 ` | 管道会改写编码。推荐用 --issues 参数或直接用 run.py`。 |
python scripts/run.py 你的文件.pptx
# 自动完成: 解包 → 检测 → 修复 → 验证 → 打包 → 兼容输出
如果电脑没装 Office,跳过兼容输出:
python scripts/run.py 你的文件.pptx --skip-compat
# 1. 解包
python skills/pptx/scripts/office/unpack.py 你的文件.pptx unpacked/
# 2. 检测 + 修复(一步到位)
python scripts/layout_check.py unpacked/ > issues.json
python scripts/auto_fix.py unpacked/ --issues issues.json
# 3. 打包 + 生成兼容版
python skills/pptx/scripts/office/pack.py unpacked/ 输出.pptx
python scripts/compat_output.py 输出.pptx --dpi 150
python scripts/demo_generate.py
# 生成 assets/demo.pptx(7页,含各种排版问题,可立刻上手)
> 假设你有一份 quarterly_report.pptx,在自己电脑的 WPS 中排版正常,
> 但发到领导用 PowerPoint 打开时文字溢出、图表标注错位。
quarterly_report.pptx (10 页)
├── 第1页: 封面 —— "2026年Q1部门工作汇报"(40pt,安全)
├── 第2页: 目录 —— "业绩回顾 / 重点项目 / 问题与对策 / 下季度计划"
├── 第3-5页: 业绩数据 —— 正文 14pt,文字框偏窄,PowerPoint 中溢出
├── 第6页: 项目详情 —— 图表标注距左边缘 0.15 英寸(低于 0.5 英寸安全边距)
├── 第7页: 问题分析 —— 多段落文字框高度不足,PowerPoint 中截断
├── 第8-9页: 计划与展望 —— 排版正常
└── 第10页: 结束页 —— 正常
$ python scripts/run.py quarterly_report.pptx --dpi 150
输出过程:
========================================================
PPT-PRO-MAX v1.2.0 一键修复流程
文件: quarterly_report.pptx
========================================================
第1步 解包 PPTX... ✅
第2步 检测排版问题... ✅
发现 6 个问题,涉及 5 页幻灯片
第3步 自动修复... ✅
修改 6 处,0 处需手动处理(修复率 100%)
第4步 验证修复效果... ✅ (无残留问题)
第5步 打包修复文件... ✅
输出: quarterly_report_fixed.pptx
第6步 生成兼容版... ✅
兼容版: quarterly_report_fixed_compat.pptx
========================================================
🎉 修复完成!
可编辑版: quarterly_report_fixed.pptx
兼容版: quarterly_report_fixed_compat.pptx ← 在任何软件打开排版都不乱
========================================================
搞定。把 quarterly_report_fixed.pptx 发给同事编辑,把 _compat.pptx 发给领导演示——排版永远不会乱。
| 任务 | 命令 |
|---|---|
| ------ | ------ |
| 一键修复 🆕 | python scripts/run.py 文件.pptx |
| 生成演示文件 | python scripts/demo_generate.py |
| 检测布局问题 | python scripts/layout_check.py unpacked/ |
| 自动修复 | python scripts/auto_fix.py unpacked/ --issues issues.json |
| 预览修复 | python scripts/auto_fix.py unpacked/ --issues issues.json --dry-run |
| 生成兼容版 | python scripts/compat_output.py 输出.pptx --dpi 150 |
| 高分辨率兼容版 | python scripts/compat_output.py 输出.pptx --dpi 300 |
使用内置 pptx skill:
⚠️ pptxgenjs v4 注意:
"rect", "ellipse", "roundRect" — 不要用 pres.ShapeType.xxxpres.addSlide() 返回 Slide 对象,不是 presentationLAYOUT_16x9 (10" × 5.625")"Microsoft YaHei"python scripts/layout_check.py unpacked/
检测结果:
| 问题类型 | 严重度 | 自动修复 |
|---|---|---|
| ---------- | -------- | --------- |
text_overflow_x 文字水平溢出 | 错误 | ✅ 缩小字号 |
text_overflow_y 文字垂直溢出 | 错误 | ✅ 扩展框高 |
overlap 元素重叠 | 错误 | ❌ 手动处理 |
margin_left/top 边距违规 | 警告 | ✅ 调整位置 |
python scripts/auto_fix.py unpacked/ --issues issues.json
修复策略:
| 问题 | 修复 | 迭代 |
|---|---|---|
| ------ | ------ | ------ |
| 溢出 < 300% | 缩小字号(最小 6pt) | 最多 5 轮 |
| 溢出 > 300% | 标记不可修复 + 中文建议 | — |
| 垂直溢出 | 扩展文本框高度 | 一次性 |
| 边距违规 | 移到安全区(0.5") | 一次性 |
| 标题栏内 | 跳过不处理 | — |
> 📌 修复前会输出预检报告,展示可修复/不可修复数量和预估修复率。
python skills/pptx/scripts/office/pack.py unpacked/ 输出.pptx --original 原文件.pptx
--original 保留未修改内容,自动验证修复。
python scripts/compat_output.py 输出.pptx --dpi 150
引擎检测(WPS 和 MS Office 平等对待):
原理:每页通过 COM 导出为高清图片 → 组装为图片化 PPTX → 任何软件打开效果完全一致。
| 参数 | 效果 |
|---|---|
| ------ | ------ |
--dpi 150 | 适合屏幕(默认) |
--dpi 300 | 适合打印 |
--output 名称 | 自定义输出路径 |
--method com | 只用 WPS/Office |
--method libre | 只用 LibreOffice |
| 层级 | 大小 | 粗细 |
|---|---|---|
| ------ | ------ | ------ |
| 封面标题 | 36-44pt | Bold |
| 章节标题 | 24-28pt | Bold |
| 正文 | 13-16pt | Normal |
| 脚注 | 10-12pt | Normal,柔和色 |
| 最低 | 10pt | 低于 10pt 各软件渲染差异大 |
中文字符宽度约为拉丁字符 2 倍,混合编排留 15-20% 余量:
所需宽度 ≈ (中文字数 + 拉丁字数 × 0.55) × 字号pt × 12700 EMU
> 按问题分类编排。使用 Ctrl+F 搜索关键词快速定位。
| 编号 | 问题 | 关键词 |
|---|---|---|
| ------ | ------ | -------- |
| Q1 | Office 检测失败 | 安装、WPS、Office |
| Q2 | JSON 解析错误 | BOM、编码、乱码 |
| Q3 | PowerShell 管道乱码 | 管道、UTF-16 |
| Q4 | 极端溢出无法修复 | 300%、不可修复 |
| Q5 | 字号改太小了 | 6pt、最小字号 |
| Q6 | 打包后文件变小 | 文件大小、压缩 |
| Q7 | 标题被移到标题栏外 | 标题栏、margin |
| Q8 | pptxgenjs 报错 | addShape、ShapeType |
原因:电脑没有安装 WPS 或 Microsoft PowerPoint。
解决:
不需要兼容输出? 跳过即可——布局检测和修复功能不需要 Office,只影响"在所有软件打开都不乱"的兼容版功能。
原因:Windows 上直接用 > 重定向保存的问题文件可能是 UTF-16 编码,而不是 JSON 标准 UTF-8。
解决(三选一):
✅ 推荐:使用 run.py,一切自动处理
python scripts/run.py 文件.pptx
✅ 手动方法:保存为 UTF-8
python -c "import sys,json; json.dump(json.load(sys.stdin), open('issues.json','w',encoding='utf-8'), ensure_ascii=False, indent=2)" < 输入 > issues.json
✅ 管道传递(用 Python 而非 PowerShell 管道):
import subprocess, json
r = subprocess.run(['python', 'layout_check.py', 'unpacked/'],
capture_output=True, text=True, encoding='utf-8')
issues = json.loads(r.stdout)
原因:PowerShell 的 | 会用 UTF-16 改写文本流。
解决:
✅ 用 --issues 参数 + 中间文件(不用管道)
✅ 或直接用 run.py 一键执行,它内部处理了所有编码问题
原因:溢出率超过 300%,缩小字号到最低 6pt 仍然溢出。
解决:
原因:原文本框太窄,只能不停缩小字号才能避免溢出。最低会降到 6pt。
解决:
--dry-run 先预览效果再做决定原因:pack.py 压缩 XML 比 pptxgenjs 更激进。
这是正常的,不表示数据丢失。验证方法:检查页数和内容是否一致。
v1.2.0 已自动处理:auto_fix 会检测幻灯片顶部的标题装饰条,跳过其中元素的边距修正。
如果仍有问题,可能标题栏未被识别——在 WPS/PowerPoint 中手动拖回即可。
原因:pptxgenjs v4 的 API 变了。
解决:
pres.ShapeType.rect → ✅ "rect"pres.ShapeType.ellipse → ✅ "ellipse"pres.ShapeType.roundRect → ✅ "roundRect"ppt-pro/
├── SKILL.md # 本文档
├── scripts/
│ ├── run.py # 🆕 一键执行脚本
│ ├── layout_check.py # 布局问题检测引擎
│ ├── auto_fix.py # 自动修复引擎
│ ├── compat_output.py # 兼容输出引擎
│ └── demo_generate.py # 演示文件生成器
└── assets/
└── demo.pptx # 预生成的演示文件
| 组件 | 需要 | 备注 |
|---|---|---|
| ------ | ------ | ------ |
| run.py | Python 3.8+ | 无需额外安装 |
| layout_check.py | Python 3.8+ | 仅内置模块 |
| auto_fix.py | Python 3.8+ | 仅内置模块 |
| compat_output.py (COM) | pywin32, python-pptx + WPS 或 MS Office | 安装 Office 后即可用 |
| compat_output.py (LibreOffice) | LibreOffice + Poppler | 备选方案 |
| demo_generate.py | python-pptx | 仅生成演示文件时需要 |
| 解包/打包 | 内置 pptx skill | 始终可用 |
共 3 个版本