pptx-generator

pptx-generator

热门

生成、编辑和读取PowerPoint演示文稿。使用PptxGenJS从头创建(封面、目录、内容、章节分隔、总结幻灯片),通过XML工作流编辑现有PPTX,或使用markitdown提取文本。触发词:PPT、PPTX、PowerPoint、演示文稿、幻灯片、deck、slides。

1.3万Star
1121Fork
更新于 2026/4/18
SKILL.md
readonly只读
name
pptx-generator
description

生成、编辑和读取PowerPoint演示文稿。使用PptxGenJS从头创建(封面、目录、内容、章节分隔、总结幻灯片),通过XML工作流编辑现有PPTX,或使用markitdown提取文本。触发词:PPT、PPTX、PowerPoint、演示文稿、幻灯片、deck、slides。

PPTX生成与编辑器

概述

本技能处理所有PowerPoint任务:读取/分析现有演示文稿、通过XML操作编辑基于模板的演示文稿、以及使用PptxGenJS从头创建演示文稿。它包含完整的设计系统(调色板、字体、样式配方)以及每种幻灯片类型的详细指导。

快速参考

任务 方法
读取/分析内容 python -m markitdown presentation.pptx
编辑或从模板创建 参见编辑演示文稿
从头创建 参见下面的从头创建工作流
项目
尺寸 10" x 5.625" (LAYOUT_16x9)
颜色 6位十六进制,不带#(例如"FF0000"
英文字体 Arial(默认)或批准的替代字体
中文字体 微软雅黑
页码徽章位置 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 调色板、字体参考、样式配方(锐利/柔和/圆角/药丸)、排版与间距
editing.md 基于模板的编辑工作流、XML操作、格式化规则、常见陷阱
pitfalls.md QA流程、常见错误、关键PptxGenJS陷阱
pptxgenjs.md 完整PptxGenJS API参考

读取内容

# 文本提取
python -m markitdown presentation.pptx

从头创建工作流

当没有模板或参考演示文稿时使用。

步骤1:研究与需求

搜索以了解用户需求——主题、受众、目的、语气、内容深度。

步骤2:选择调色板与字体

使用调色板参考选择与主题和受众匹配的调色板。使用字体参考选择字体搭配。

步骤3:选择设计风格

使用样式配方选择与演示文稿语气匹配的视觉风格(锐利、柔和、圆角或药丸)。

步骤4:规划幻灯片大纲

每张幻灯片分类为5种页面类型中的一种。规划每张幻灯片的内容和布局。确保视觉多样性——不要在幻灯片之间重复相同的布局。

步骤5:生成幻灯片JS文件

slides/目录中为每张幻灯片创建一个JS文件。每个文件必须导出一个同步的createSlide(pres, theme)函数。遵循幻灯片输出格式slide-types.md中的类型特定指导。如果可用,使用子代理同时生成最多5张幻灯片。

告知每个子代理:

  1. 文件命名:slides/slide-01.jsslides/slide-02.js等。
  2. 图片放在:slides/imgs/
  3. 最终PPTX放在:slides/output/
  4. 尺寸:10" x 5.625" (LAYOUT_16x9)
  5. 字体:中文=微软雅黑,英文=Arial(或批准的替代字体)
  6. 颜色:6位十六进制,不带#(例如"FF0000"
  7. 必须使用主题对象契约(参见主题对象契约
  8. 必须遵循PptxGenJS API参考

步骤6:编译为最终PPTX

创建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

步骤7:QA(必需)

参见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: '演示文稿标题'
};

// 必须是同步的(不是异步)
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"

切勿使用其他键名,如backgroundtextmuteddarkestlightest


页码徽章(必需)

所有幻灯片除封面外必须在右下角包含页码徽章。

  • 位置:x: 9.3", y: 5.1"
  • 仅显示当前编号(例如303),不要显示"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 — 图标(可选)