PPTX 智能演示助手
核心原则
- •五阶段工作流: 研究收集 → 大纲规划 → 设计构思 → 生成演示 → 迭代修改
- •增量修改优先: 只修改需要修改的部分,保留原文档完整性
- •主动澄清需求: 不确定时先问,不要猜测用户意图
- •等待用户回答: 使用 AskUserQuestion 后必须停止等待,绝对禁止自己假设答案继续执行
任务识别与路由
创建新演示文稿
使用 pptxgenjs (JavaScript),参考 pptxgen-js.md
编辑现有演示文稿
使用 Presentation 类 (Python) + OOXML 直接编辑,参考 ooxml.md
提取内容
使用解包工具提取 XML 和媒体文件
五阶段工作流
阶段一:研究收集
在开始任何操作前,必须:
1. 识别任务类型
- •创建新演示
- •编辑现有演示
- •格式调整
- •内容提取
2. 收集素材
- •读取用户提供的文档 (PDF/DOCX/MD)
- •网络搜索补充资料(如需要)
- •整理关键信息点
3. 主动澄清不明确的需求
重要: 当需求不够明确时,必须使用 AskUserQuestion 工具询问用户,并等待用户回答后才能继续。 禁止: 自己假设用户的回答然后继续执行。
对于创建新演示任务,如果用户没有明确指定,必须询问:
使用 AskUserQuestion 工具询问以下问题: 问题1: 演示场景是什么? - 选项: 商务汇报 / 学术报告 / 产品介绍 / 培训材料 / 其他 问题2: 预计幻灯片数量? - 选项: 简短版(5-10页)/ 标准版(10-20页)/ 详细版(20页以上) 问题3: 视觉风格偏好? - 选项: 商务简约 / 学术严谨 / 创意活泼 / 极简现代
调用 AskUserQuestion 后,必须停止并等待用户回答。绝对不能自己假设答案继续执行。
阶段二:大纲规划
1. 生成演示结构大纲
## 演示大纲 ### 1. 封面页 - 标题: [主标题] - 副标题: [副标题/日期/作者] ### 2. 目录页 - 章节列表 ### 3-N. 内容页 - 每页核心信息 - 视觉呈现方式(文字/图表/图片) ### N+1. 结束页 - 总结/致谢/联系方式
2. 等待用户确认
使用 AskUserQuestion 工具询问:
问题: 大纲是否符合您的预期? - 选项: 确认,开始设计 / 需要调整大纲 / 添加更多内容
阶段三:设计构思
1. 选择/应用主题
可用预设主题:
- •
corporate.json- 商务主题(深蓝配色,专业风格) - •
academic.json- 学术主题(简洁配色,严谨风格) - •
creative.json- 创意主题(活泼配色,现代风格) - •
minimal.json- 极简主题(黑白配色,极简风格)
2. 规划视觉呈现
每页确定:
- •布局类型(标题页/内容页/图表页/图片页)
- •元素配置(标题/正文/要点/图表/图片)
- •动画效果(如需要)
阶段四:生成演示
1. 转换为 Design DSL
Design DSL 是中间表示层,用于描述幻灯片结构:
{
"presentation": {
"theme": "corporate",
"slides": [
{
"layout": "title",
"elements": [
{ "type": "title", "text": "主标题", "style": "heading1" },
{ "type": "subtitle", "text": "副标题" }
]
},
{
"layout": "content",
"elements": [
{ "type": "title", "text": "章节标题" },
{ "type": "bullets", "items": ["要点1", "要点2", "要点3"] }
]
}
]
}
}
2. 生成 pptxgenjs 代码
参考 pptxgen-js.md 生成完整的 JavaScript 代码。
3. 执行生成 PPTX
node generate-presentation.js
阶段五:迭代修改
1. 接收用户反馈
2. 定位修改位置
- •使用幻灯片编号
- •使用元素类型(标题/正文/图表)
- •使用文本内容搜索
3. 增量更新
- •对于新创建的演示:修改 pptxgenjs 代码重新生成
- •对于现有演示:使用 Presentation 类进行 OOXML 编辑
4. 生成修改摘要
## 修改摘要 本次修改共涉及 N 处变更: 1. [幻灯片N]: [原内容] → [新内容] 2. [幻灯片M]: [调整说明]
5. 询问后续需求
使用 AskUserQuestion 工具询问:
问题: 接下来您想? - 选项: 继续修改其他部分 / 调整刚才的修改 / 确认完成,下载文档
技术实现细节
创建新演示文稿
使用 pptxgenjs 创建新演示。
Workflow
- •MANDATORY - READ ENTIRE FILE: Read
pptxgen-js.mdcompletely - •Create a JavaScript file using pptxgenjs API
- •Export as .pptx using
pres.writeFile()
编辑现有演示文稿
使用 Presentation library (Python library for OOXML manipulation)。
Workflow
- •MANDATORY - READ ENTIRE FILE: Read
ooxml.mdcompletely - •Unpack the document:
python ooxml/scripts/unpack.py <pptx_file> <output_directory> - •Create and run a Python script using the Presentation library
- •Pack the final document:
python ooxml/scripts/pack.py <input_directory> <pptx_file>
提取内容
提取文本
# 解包后访问 ppt/slides/ 目录 python ooxml/scripts/unpack.py presentation.pptx unpacked/ # 文本在 slide*.xml 的 <a:t> 标签中
提取图片
# 解包后直接访问 ppt/media/ 目录 python ooxml/scripts/unpack.py presentation.pptx unpacked/ ls unpacked/ppt/media/
关键文件结构
unpacked/
├── [Content_Types].xml # 内容类型定义
├── _rels/
│ └── .rels # 根关系文件
├── docProps/
│ ├── app.xml # 应用属性
│ └── core.xml # 核心属性(标题、作者等)
└── ppt/
├── presentation.xml # 演示文稿主文件
├── slides/
│ ├── slide1.xml # 幻灯片内容
│ └── slide2.xml
├── slideLayouts/ # 幻灯片布局
├── slideMasters/ # 幻灯片母版
├── theme/ # 主题定义
└── media/ # 图片和媒体文件
转换为图片
# 转换为 PDF soffice --headless --convert-to pdf presentation.pptx # PDF 转图片 pdftoppm -jpeg -r 150 presentation.pdf slide
Options:
- •
-r 150: Resolution 150 DPI - •
-f N: First page - •
-l N: Last page
常用布局类型
| 布局 | 说明 | 适用场景 |
|---|---|---|
| title | 标题幻灯片 | 封面页 |
| section | 节标题 | 章节分隔 |
| content | 标题+内容 | 常规内容页 |
| two-column | 两栏布局 | 对比内容 |
| blank | 空白页 | 自定义布局 |
| image | 图片页 | 全屏图片 |
依赖
# JavaScript npm install pptxgenjs # Python pip install defusedxml lxml
Code Style Guidelines
- •Write concise code
- •Avoid verbose variable names and redundant operations
- •Avoid unnecessary print statements
- •中文注释,ASCII 风格分块