用途
本技能用于将 HTML 演示文稿(幻灯片)导出为可编辑的原生 PowerPoint PPTX 文件。导出的 PPTX 包含原生 PowerPoint 对象,即文本、形状和图片均可编辑。一次 gen_pptx 工具调用即可完成全部流程:捕获、字体处理、生成、下载。
主要能力
- 将 HTML 幻灯片导出为 .pptx,保留可编辑的文本、形状与图片。
- 支持按顺序逐页捕获幻灯片,可通过 showJs 导航脚本切换页面,也可直接使用选择器定位 DOM 中已存在的幻灯片。
- 支持隐藏指定元素(如导航栏、进度条等)。
- 支持处理使用 transform: scale() 缩放的幻灯片容器,通过 resetTransformSelector 清除变换并强制设置宽高。
- 字体处理:可在捕获前进行字体替换,使布局正确重排。支持导入 Google Fonts、将自定义字体替换为 Web 安全字体,或保留品牌字体原样。
- 自动读取并附加演讲者备注(从 <script type="application/json" id="speaker-notes"> 按索引读取,无需手动传入)。
- 可选提供“发送到 Google Slides”按钮(仅在用户明确要求时启用,且需用户点击才会上传)。
- 返回验证标志(警告而非错误),帮助判断是否需要重试。
使用方式
- 了解幻灯片结构:确认幻灯片选择器、导航方式(函数名或类切换)、使用的字体、是否存在缩放包装容器。
- 使用 show_to_user 将幻灯片展示在用户预览中。
- 调用 gen_pptx,传入以下输入:
- width、height:CSS 像素,需与幻灯片尺寸匹配。
- slides:每页一个条目,按顺序排列,包含 showJs(同步表达式,不要 await)和 selector。
- hideSelectors:需隐藏的元素选择器数组。
- resetTransformSelector:若幻灯片包裹在 transform: scale() 容器中,指定该容器。
- 字体策略:googleFontImports 与 fontSwaps 二选一或组合,或省略以保留品牌字体。
- filename:文件名。
- 仅在用户要求 Google Slides 时传入 offer_google_slides: true。
- 读取结果中的验证标志,判断是否需要重试。
若幻灯片使用 <deck-stage> 起始组件:
- resetTransformSelector 设为 "deck-stage",导出器会设置 noscale 属性,组件据此移除 shadow-DOM 的 transform: scale()。
- slides[N].showJs 设为 "document.querySelector('deck-stage').goTo(N)"(0 索引)。
- slides[N].selector 设为 "deck-stage > [data-deck-active]"。
- 无需 hideSelectors,因为覆盖层和点击区域位于 shadow DOM 中,不会被捕获。
验证标志
结果会列出标志,这些是警告而非错误,需逐条判断是否属于当前幻灯片的预期情况:
- duplicate_adjacent / duplicate_majority:幻灯片捕获结果相同,通常表示 showJs 未导航。检查函数名、延长延迟、确认索引从 0 还是 1 开始。
- slide_size_mismatch:捕获的矩形与 width/height 不匹配,可能选择器匹配到了包装元素,或需要 resetTransformSelector。
- notes_uniform_nonempty:所有演讲者备注相同,可能是占位符,若有意为之则正常。
- notes_count_mismatch:备注数量与幻灯片数量不一致,备注按索引附加,尾部会出错。
- no_speaker_notes:幻灯片没有 #speaker-notes 标签,无备注时属预期。
- fonts_timeout:fonts.ready 超过 8 秒,字体 URL 可能不可达。
- font_swap_failed:一个或多个 fontSwaps 目标未加载(字体族拼写错误或 Google Fonts 不提供),幻灯片以回退字体布局,但文件名仍为替换字体。需重试或改用 Web 安全字体,并明确告知用户哪些字体未能应用。
- images_failed:图片在捕获前未解码,通常是 404 或 CORS。
- reset_selector_miss:resetTransformSelector 未匹配到任何元素。
若标志显示真实问题,修正输入后重试;若属预期情况,告知用户下载已触发即可。与用户沟通时不要直接转述标志名称或内部诊断信息,用通俗语言描述。
捕获后页面会自动重新加载,DOM 变更(隐藏的界面元素、字体替换)会被还原。
字体策略
根据指令转换为输入:
- 品牌字体原样:省略 googleFontImports 和 fontSwaps。
- Web 安全替代:fontSwaps: [{from:"EachCustomFont", to:"Arial"}](衬线用 Georgia,等宽用 Courier New)。
- Google Fonts 替代:googleFontImports: ["Poppins","Lora"] + fontSwaps: [{from:"EachCustomFont", to:"Poppins"}]。
- 系统字体(Arial、Helvetica、Georgia、Times、Courier、sans-serif 等)保持不动。
适用场景
适用于需要将 HTML 幻灯片转换为可编辑 PowerPoint 文件的场景,例如需要进一步在 PowerPoint 中修改内容、交付给使用 PowerPoint 的团队,或需要保留演讲者备注的演示文稿。
限制
- 需了解幻灯片结构(选择器、导航方式、字体、缩放容器)才能正确配置。
- showJs 必须是同步表达式,异步导航函数需去掉 await,依赖每页延迟(默认 600ms)覆盖过渡。
- 字体替换在捕获前进行,若替换字体加载失败会导致布局与文件名不一致。
- 验证标志为警告,需人工判断是否为预期情况。
- 关于收费、价格、平台支持范围等具体信息,资料中暂未提供。