pptx 技能面向 PowerPoint .pptx 演示文稿的读取、检查和编辑/创建。.pptx 属于 OOXML 格式,是一个 zip 容器,内含幻灯片、版式、母版和媒体的 XML 描述。
使用方式(交付规则):首先查看当前会话可用工具来决定交付路径。若存在 write_file、edit_file、apply_patch 或 execute_code,则在工作区按文档中的路径构建 .pptx,并在可用时于最终回复前调用 publish_artifact 发布。受限通道中可用 execute_code 运行内联 Python 示例,保存工作区相对路径文件后再发布;Shell、Node、LibreOffice 命令需要相应工具与运行时,不得用 Python 子进程绕过不可用的 shell 工具,也不得在沙箱执行失败时在主机上重试生成。若上述文件编写工具均不可用,则不要尝试生成、保存或修改 .pptx,也不要粘贴 OOXML、Python、JavaScript、HTML 等源码作为替代,应明确说明当前会话无法创建文件,并提供按路径发布已有 .pptx、以文本描述幻灯片内容或在 OpenSquilla Web UI 等可写文件环境中继续的选项。
路径选择:开始前在三条路径中选定一条且不混用。已有 .pptx 且只需读文本用路径 A;已有 .pptx 且需保留设计改内容用路径 B(默认,输入文件作为视觉风格基线,仅当明确要求全新制作或无输入文件时回退到路径 C);无文件或仅有简要需求则用路径 C 从零构建。
路径 A(读取文本):有 shell 时运行辅助脚本 {baseDir}/scripts/extract_text.py,可加 --json;也可直接用 python-pptx 遍历 slides 与 shape.text_frame 提取文本;有 markitdown 时可用 python -m markitdown deck.pptx 获得更快的 Markdown 渲染。
路径 B(编辑已有演示文稿):B1 纯文本编辑(首选),用 python-pptx 在 run 级别就地修改(例如把 {{TITLE}} 替换为具体文本),保留全部主题/母版/字体设置;应在 run 级别而非段落级别编辑,占位符跨多个 run 时合并到第一个 run 并清空其余。B2 结构编辑(增删/重排幻灯片、改版式),python-pptx 幻灯片级修改有限(无公开重排 API),需解压 .pptx、修补 ppt/presentation.xml 与幻灯片文件后重新打包;修补 XML 应使用 defusedxml.minidom 或 lxml,避免标准库 xml.etree.ElementTree 破坏命名空间前缀;删除幻灯片后需同时移除 ppt/presentation.xml 中 <p:sldIdLst> 的 <p:sldId> 与 ppt/_rels/presentation.xml.rels 中匹配关系,改幻灯片数量时更新 [Content_Types].xml,有备注页时成对处理 notesSlideN.xml。完成后建议用 LibreOffice headless 验证。
路径 C(从零创建):Python 环境优先用 python-pptx(更可读、依赖简单),需要更丰富布局原语(图表、合并单元格表格、渐变)或已在 Node 工具链时用 PptxGenJS。文档给出了两者的快速示例,并建议参考 references/python_pptx.md 与 references/pptxgenjs.md。设计检查清单要求:使用内容相关的配色(主色约 60%、辅助色、强调色)、标题页与章节分隔页用深色/内容页用浅色、每页有一个有意义视觉元素、版式多样、标题字号 ≥36 pt 正文 14–16 pt、边距 ≥0.5 英寸、正文左对齐、避免在标题下加细线。
视觉 QA:当 soffice(LibreOffice)与 pdftoppm(poppler)可用且渲染器运行时,路径 B 和 C 应在发布前将整份演示文稿渲染为图片并逐页检查(运行 {baseDir}/scripts/render_thumbs.sh out.pptx,生成 out-01.jpg 等及 out.pdf),最终 QA 不要传 --range,需检查全部页面;发现缺陷则修复后重新渲染并再次全页检查。渲染工具缺失时视觉 QA 不可用,B1 纯文本编辑仍可在保存并核对文本后发布,但需说明视觉 QA 未执行;B2 或 C 在无渲染器时只能完成结构检查,不得声称视觉 QA 通过。
常见陷阱包括:删除幻灯片遗留 <p:sldId> 或关系导致 PowerPoint 提示修复;PptxGenJS 颜色误用带 # 或 8 位 alpha 导致文件损坏;PptxGenJS 同时写入 • 字符并使用 bullet:true 导致项目符号重复;用标准库 ET 读取 XML 导致智能引号乱码;PptxGenJS 复用同一阴影选项对象被就地修改导致后续形状继承异常阴影;python-pptx 不自动适配导致长文本不换行;不同系统字体差异导致视觉 QA 结果不一致。
排障:python-pptx 未安装可用 uv pip install python-pptx 或 pip install python-pptx;soffice 缺失时按系统安装 LibreOffice;pdftoppm 缺失时安装 poppler;PptxGenJS 报 MODULE_NOT_FOUND 时不要全局 npm 安装,优先 Python 路径,必要时在一次性临时目录中本地安装并运行。
边界:该技能仅用于 .pptx(Office Open XML PresentationML),不适用于 .ppt(旧版二进制)、Google Slides 或 Keynote 文件,需先转换为 .pptx;不要嵌入外部宏逻辑(.pptm / VBA)。第三方来源与运行时依赖说明记录在 THIRD_PARTY_NOTICES.md。