html-to-pptxlisted
Install: claude install-skill kiakun-collab/kiakun-skills
# HTML to PPTX
把 AI 生成的固定比例 HTML 页面转成 PPTX,三个硬目标:**超高还原度**(浏览器渲染 ≈ PPTX 渲染,QA 双门禁)、**超高可编辑度**(文字=原生文本框、形状=原生 autoshape、图片=独立对象,仅不可表达元素才烘焙)、**干净整洁**(无冗余 wrapper、同 bounds 合并、语义分组、z-order 正确)。
## Start Here
一条命令跑完整流水线(提取 → 变换 → 烘焙 → 构建 → COM 渲染 → QA → 自动返修):
```powershell
python scripts/run_pipeline.py --html <file|dir> --out-dir out
```
- 无 PowerPoint 时只跑离线子集:`--steps extract,transform,build`(产出 `out/deck.pptx`,跳过渲染/QA)。
- 产物:`out/deck.pptx`、`out/qa-report.json`、`out/comparison.png`、`out/pipeline-report.json`。
## 核心原则
- **坐标系全程唯一**:1280×720 CSS px = 960×540 pt = 标准 16:9(12192000×6858000 EMU);`px × 9525 = EMU`。DPR=2 只影响截图位图,DOM 几何一律 CSS px。
- **测最终盒子,不管布局语义**:几何来自浏览器 `getBoundingClientRect` / `Range.getClientRects`,不解析 flex/grid/绝对定位。
- **可编辑度优先**:文字**绝不烘焙**;返修时文字只加宽框/微调字号,非文字元素视觉差异大才最小降级为烘焙 PNG(记 `bakedReason`)。
- **仅 16:9**(沿用 ppt-rebuild 决策口径):非 16:9 输入声明降级——走整页图或经确认后等比映射进 1280×720,不做扩展坐标规范。
## 输入约定
- 输入为 AI 生成的**固定比例** HTML:单文件按整页高度逐屏切 720px 为多页(`--paginate fixed`,默认),或一目录一文件一页(`natural_key` 排序)。
- 字体、图片等资源需可离线加载(`file://`)或已内联;跨域字体会静默降级,提取前已 `document.fonts.ready`。
## 烘焙策略(可表达性评分)
- **原生**:纯色/线性渐变(≤8 stops)/中心对称径向、四角圆角、单层 outer shadow、实/虚线边框、透明度、图片、表格单元格文字。
- **必须烘焙**:`backdrop-filter`、`clip-path`、`mask`、`mix-blend-mode≠normal`、多层/inset 阴影、conic-gradient、canvas/video、复杂 SVG。默认简单 SVG 也烘焙,`--svg-as-shapes` 试原生 freeform(风险自担)。
- 每个烘焙判定带 `bakedReason` 进最终报告,供可编辑度审计。
## QA 与失败降级
- 双门禁:全页 SSIM ≥ 阈值(默认 0.93)+ 逐元素 SSIM/颜色差 + 文字折行一致性(渲染行数 vs `textLayoutBudget`)。
- 自动返修