生成、编辑和读取 PowerPoint 演示文稿。使用 PptxGenJS 从头创建(封面、目录、内容、章节分隔页、总结幻灯片),编辑现有的 PowerPoint 文件。
PPTX 生成器 & Editor.是一项面向实际任务的技能,主要用于Overview. 此技能处理所有PowerPoint 任务: 读取/分析现有的演示文稿, 通过 XML 操作编辑基于模板的甲板, 并创建演示文稿。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。
实际使用前应先确认任务范围、数据来源、运行环境、必要权限和关键参数,再依据技能说明逐步执行;若输入条件不完整,应先补齐信息或采用保守配置,避免因错误假设导致结果偏离需求。
执行过程中需要关注工具调用是否成功、接口或依赖是否可用、输出格式是否符合预期,并对异常提示、缺失字段和边界情况进行处理;涉及批量任务时,还应保存进度,避免中断后重复操作。
本技能可处理所有 PowerPoint 相关任务:读取/分析现有演示文稿、基于模板通过 XML 操作编辑幻灯片,以及使用 PptxGenJS 从零开始创建演示文稿。它包含一整套设计系统(配色方案、字体规范、样式配方),并为每种幻灯片类型提供详细实现指南。
| 任务 | 方法 |
|---|---|
| 读取/分析内容 | python -m markitdown presentation.pptx |
| 基于模板编辑或创建 | 参见“编辑演示文稿”章节 |
| 从零开始创建 | 参见下方“从零开始创建”章节 |
| 项目 | 值 |
|---|---|
| 尺寸 | 10" × 5.625"(LAYOUT_16x9) |
| 颜色 | 6 位十六进制值,不带 # 号(例如:"FF0000") |
| 英文默认字体 | Arial(默认),或经批准的替代字体 |
| 中文字体 | Microsoft YaHei |
| 页码标签位置 | x: 9.3", y: 5.1" |
| 主题键名 | primary、secondary、accent、light、bg |
| 形状类型 | RECTANGLE、OVAL、LINE、ROUNDED_RECTANGLE |
| 图表类型 | BAR、LINE、PIE、DOUGHNUT、SCATTER、BUBBLE、RADAR |
| 文件 | 内容 |
|---|---|
| slide-types.md | 5 种幻灯片页面类型(封面页、目录页、章节分隔页、内容页、总结页)及额外布局模式 |
| design-system.md | 配色方案、字体参考、样式配方(Sharp/Soft/Rounded/Pill)、排版与间距规范 |
| editing.md | 基于模板的编辑工作流、XML 操作方法、格式规则、常见陷阱 |
| pitfalls.md | 质量保障(QA)流程、常见错误、关键 PptxGenJS 使用陷阱 |
| pptxgenjs.md | 完整的 PptxGenJS API 参考文档 |
# 文本提取 python -m markitdown presentation.pptx
适用于无可用模板或参考演示文稿的场景。
开展检索,明确用户需求——包括主题、受众、用途、语气风格、内容深度等。
参考《配色方案参考》选取契合主题与受众的配色;参考《字体参考》确定中英文字体组合。
依据《样式配方》选择匹配演示文稿语气的设计风格(Sharp / Soft / Rounded / Pill)。
将每一张幻灯片严格归类为上述 5 种页面类型之一;为每张幻灯片规划具体内容与布局;确保视觉多样性——避免在多张幻灯片中重复使用相同布局。
在 slides/ 目录下为每张幻灯片创建一个独立的 JS 文件。每个文件必须导出一个同步的 createSlide(pres, theme) 函数,并遵循《幻灯片输出格式》规范及 slide-types.md 中对应类型的详细指导。如具备子代理能力,可并发生成最多 5 张幻灯片。
向每个子代理明确说明以下要求:
slides/slide-01.js、slides/slide-02.js 等slides/imgs/slides/output/"FF0000")创建 slides/compile.js 文件以整合全部幻灯片模块:
// slides/compile.js
const pptxgen = require('pptxgenjs');
const pres = new pptxgen();
pres.layout = 'LAYOUT_16x9';
const theme = {
primary: "22223b", // 深色,用于背景/标题文字
secondary: "4a4e69", // 次要强调色
accent: "9a8c98", // 高亮色
light: "c9ada7", // 浅色强调色
bg: "f2e9e4" // 背景色
};
for (let i = 1; i <= 12; i++) { // 根据实际数量调整上限
const num = String(i).padStart(2, '0');
const slideModule = require(`./slide-${num}.js`);
slideModule.createSlide(pres, theme);
}
pres.writeFile({ fileName: './output/presentation.pptx' });
执行命令:cd slides && node compile.js
参见“QA 流程”章节。
slides/
├── slide-01.js # 幻灯片模块
├── slide-02.js
├── ...
├── imgs/ # 幻灯片中使用的图片
└── output/ # 最终产物
└── presentation.pptx
每张幻灯片均为一个完整、可独立运行的 JS 文件:
// slide-01.js
const pptxgen = require("pptxgenjs");
const slideConfig = {
type: 'cover',
index: 1,
title: '演示文稿标题'
};
// 必须为同步函数(不可为 async)
function createSlide(pres, theme) {
const slide = pres.addSlide();
slide.background = { color: theme.bg };
slide.addText(slideConfig.title, {
x: 0.5, y: 2, w: 9, h: 1.2,
fontSize: 48, fontFace: "Arial",
color: theme.primary, bold: true, align: "center"
});
return slide;
}
// 独立预览功能 —— 使用幻灯片专属文件名
if (require.main === module) {
const pres = new pptxgen();
pres.layout = 'LAYOUT_16x9';
const theme = {
primary: "22223b",
secondary: "4a4e69",
accent: "9a8c98",
light: "c9ada7",
bg: "f2e9e4"
};
createSlide(pres, theme);
pres.writeFile({ fileName: "slide-01-preview.pptx" });
}
module.exports = { createSlide, slideConfig };
编译脚本传入的主题对象必须严格包含以下 精确键名:
| 键名 | 用途 | 示例 |
|---|---|---|
theme.primary |
最深色,用于标题 | "22223b" |
theme.secondary |
深色强调色,用于正文文字 | "4a4e69" |
theme.accent |
中调强调色 | "9a8c98" |
theme.light |
浅色强调色 | "c9ada7" |
theme.bg |
背景色 | "f2e9e4" |
禁止使用其他键名,例如 background、text、muted、darkest、lightest 等。
除封面页外,所有幻灯片必须在右下角添加页码标签。
3 或 03),不得显示为 “3/12” 等形式slide.addShape(pres.shapes.OVAL, {
x: 9.3, y: 5.1, w: 0.4, h: 0.4,
fill: { color: theme.accent }
});
slide.addText("3", {
x: 9.3, y: 5.1, w: 0.4, h: 0.4,
fontSize: 12, fontFace: "Arial",
color: "FFFFFF", bold: true,
align: "center", valign: "middle"
});
slide.addShape(pres.shapes.ROUNDED_RECTANGLE, {
x: 9.1, y: 5.15, w: 0.6, h: 0.35,
fill: { color: theme.accent },
rectRadius: 0.15
});
slide.addText("03", {
x: 9.1, y: 5.15, w: 0.6, h: 0.35,
fontSize: 11, fontFace: "Arial",
color: "FFFFFF", bold: true,
align: "center", valign: "middle"
});
pip install "markitdown[pptx]" —— 用于文本提取npm install -g pptxgenjs —— 用于从零创建演示文稿npm install -g react-icons react react-dom sharp —— 图标支持(可选)