| name | wps-ppt-gen |
| description | PPT生成。根据主题生成完整的PPT文件,
包含封面、目录、内容页、总结页,支持多种风格。
用于帮助用户生成PPT演示文稿。当用户提到PPT、演示文稿、幻灯片时触发。
PPT presentation generator using python-pptx.
|
| license | MIT |
| user-invocable | true |
| argument-hint | [主题/场景] [页数(可选)] |
| allowed-tools | Read, Grep, Glob, Bash, Write, Edit |
| metadata | {"author":"BWKYD","title":"PPT生成","description_zh":"根据主题生成完整的PPT文件,包含封面、目录、内容页和总结页","tags":["PPT","演示","python-pptx","WPS","幻灯片"],"version":"1.0.2","license":"MIT"} |
WPS PPT 生成器
从主题大纲 → 自动生成完整的精美 PPT(.pptx)。
When to Use
- 用户需要制作PPT/演示文稿
- 用户说"帮我做一个PPT"
- 用户需要述职报告/项目汇报/产品介绍/培训课件等PPT
- 用户有内容大纲想转成PPT
When NOT to Use
- 只需要PPT大纲不需要文件 → 使用
wps-ppt-outline
- 已有PPT需要美化 → 使用
wps-ppt-polish
- 需要教学课件特殊排版 → 使用
wps-courseware
风格选择菜单
┌─────────────────────────────────────────────┐
│ WPS PPT 风格选择 │
├─────────────────────────────────────────────┤
│ │
│ [1] 📊 简约商务 白底+深色文字+蓝色强调 │
│ [2] 🚀 科技风 深色底+渐变+几何元素 │
│ [3] 🏛️ 党政风 红色主调+庄重+国徽元素 │
│ [4] 📚 教育风 清新+活泼配色+图文混排 │
│ [5] 🎨 创意风 大图背景+极简文字 │
│ [6] 📈 数据风 图表为主+数据驱动 │
│ │
│ 输入编号或风格名称选择 │
└─────────────────────────────────────────────┘
工作流程
Step 1: 确认需求
- 主题:PPT的主题是什么?
- 场景:述职/汇报/产品/培训/竞标/其他?
- 页数:期望多少页?(默认15-20页)
- 风格:从上方菜单选择(默认简约商务)
- 特殊要求:是否需要图表?是否有固定模板?
Step 2: 生成大纲
根据场景生成PPT结构大纲:
述职报告(推荐15-20页):
1. 封面(标题+姓名+部门+日期)
2. 目录
3-4. 工作回顾(KPI完成情况)
5-7. 重点项目(每项1-2页)
8-9. 数据成果(图表页)
10-11. 经验总结与反思
12-13. 下阶段计划
14. 需要的支持
15. 感谢页
项目汇报(推荐12-15页):
1. 封面
2. 目录
3. 项目背景
4-5. 项目目标与范围
6-8. 实施进展(里程碑)
9-10. 关键成果/数据
11. 风险与问题
12. 下一步计划
13. 时间表
14. 资源需求
15. Q&A
产品介绍(推荐10-15页):
1. 封面(产品名+Slogan)
2. 痛点/市场背景
3. 解决方案概览
4-6. 核心功能(每项1页)
7. 竞品对比
8-9. 客户案例/数据
10. 定价方案
11. 合作流程
12. 联系方式
Step 3: 生成 .pptx 文件
确保依赖:
pip install python-pptx 2>/dev/null || pip3 install python-pptx 2>/dev/null
核心代码框架:
from pptx import Presentation
from pptx.util import Inches, Pt, Mm, Emu
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN, MSO_ANCHOR
from pptx.enum.shapes import MSO_SHAPE
import os
class PPTGenerator:
"""中式PPT生成器"""
THEMES = {
'business': {
'name': '简约商务',
'bg': RGBColor(0xFF, 0xFF, 0xFF),
'title': RGBColor(0x1F, 0x38, 0x64),
'accent': RGBColor(0x2B, 0x57, 0x9A),
'text': RGBColor(0x33, 0x33, 0x33),
'light': RGBColor(0xE8, 0xEE, 0xF7),
'title_font': '微软雅黑',
'body_font': '微软雅黑',
},
'tech': {
'name': '科技风',
'bg': RGBColor(0x0A, 0x1A, 0x2F),
'title': RGBColor(0xFF, , ),
: RGBColor(, , ),
: RGBColor(, , ),
: RGBColor(, , ),
: ,
: ,
},
: {
: ,
: RGBColor(, , ),
: RGBColor(, , ),
: RGBColor(, , ),
: RGBColor(, , ),
: RGBColor(, , ),
: ,
: ,
},
: {
: ,
: RGBColor(, , ),
: RGBColor(, , ),
: RGBColor(, , ),
: RGBColor(, , ),
: RGBColor(, , ),
: ,
: ,
},
}
():
.prs = Presentation()
.theme = .THEMES.get(theme, .THEMES[])
widescreen:
.prs.slide_width = Mm()
.prs.slide_height = Mm()
:
.prs.slide_width = Mm()
.prs.slide_height = Mm()
.slide_width = .prs.slide_width
.slide_height = .prs.slide_height
():
bg = slide.background
fill = bg.fill
fill.solid()
fill.fore_color.rgb = color .theme[]
():
shape = slide.shapes.add_shape(
MSO_SHAPE.RECTANGLE, left, top, width, height
)
shape.fill.solid()
shape.fill.fore_color.rgb = color .theme[]
shape.line.fill.background()
shape
():
txBox = slide.shapes.add_textbox(left, top, width, height)
tf = txBox.text_frame
tf.word_wrap =
p = tf.paragraphs[]
p.text = text
p.font.size = Pt(font_size)
p.font.color.rgb = font_color .theme[]
p.font.name = font_name .theme[]
p.font.bold = bold
p.alignment = alignment
txBox
():
slide = .prs.slides.add_slide(.prs.slide_layouts[])
.add_bg(slide)
.add_shape(slide, Mm(), Mm(), Mm(), .slide_height)
.add_text_box(
slide, Mm(), Mm(), Mm(), Mm(), title,
font_size=, font_color=.theme[],
font_name=.theme[], bold=,
alignment=PP_ALIGN.LEFT
)
subtitle:
.add_text_box(
slide, Mm(), Mm(), Mm(), Mm(), subtitle,
font_size=, font_color=.theme[]
)
info = author date
info.strip():
.add_text_box(
slide, Mm(), Mm(), Mm(), Mm(), info,
font_size=, font_color=.theme[]
)
():
slide = .prs.slides.add_slide(.prs.slide_layouts[])
.add_bg(slide)
.add_text_box(
slide, Mm(), Mm(), Mm(), Mm(), ,
font_size=, font_color=.theme[],
font_name=.theme[], bold=
)
.add_shape(slide, Mm(), Mm(), Mm(), Mm())
i, item (items):
y = Mm( + i * )
num_shape = .add_shape(
slide, Mm(), y, Mm(), Mm(),
.theme[]
)
num_shape.text_frame.paragraphs[].text = (i + ).zfill()
num_shape.text_frame.paragraphs[].font.size = Pt()
num_shape.text_frame.paragraphs[].font.color.rgb = RGBColor(, , )
num_shape.text_frame.paragraphs[].alignment = PP_ALIGN.CENTER
.add_text_box(
slide, Mm(), y, Mm(), Mm(), item,
font_size=, bold=
)
():
slide = .prs.slides.add_slide(.prs.slide_layouts[])
.add_bg(slide)
.add_shape(slide, Mm(), Mm(), .slide_width, Mm(),
.theme[])
.add_text_box(
slide, Mm(), Mm(), Mm(), Mm(), title,
font_size=, font_color=.theme[],
font_name=.theme[], bold=
)
i, bullet (bullets):
y = Mm( + i * )
.add_shape(slide, Mm(), y + Mm(), Mm(), Mm(),
.theme[])
.add_text_box(
slide, Mm(), y, Mm(), Mm(), bullet,
font_size=
)
():
slide = .prs.slides.add_slide(.prs.slide_layouts[])
.add_bg(slide)
.add_text_box(
slide, Mm(), Mm(), .slide_width, Mm(), text,
font_size=, font_color=.theme[],
font_name=.theme[], bold=,
alignment=PP_ALIGN.CENTER
)
.add_text_box(
slide, Mm(), Mm(), .slide_width, Mm(), subtext,
font_size=, font_color=.theme[],
alignment=PP_ALIGN.CENTER
)
():
.prs.save(filename)
os.path.abspath(filename)
Step 4: 交付
- 生成 .pptx 文件
- 告知页数和文件大小
- 提示用WPS演示打开
- 可根据反馈调整内容或风格
排版黄金法则
1. 每页核心信息不超过3点
2. 标题不超过15字
3. 正文字号不小于18pt
4. 每页文字不超过100字
5. 留白 ≥ 40%
6. 配色不超过3种
7. 字体不超过2种
8. 图片和文字比例 6:4 或 7:3
示例
/wps-ppt-gen 2026年Q1述职报告,销售部张三,科技风
/wps-ppt-gen 新产品"智慧办公系统"介绍PPT,15页,简约商务风
/wps-ppt-gen Python入门培训课件,教育风
参考
PPT设计原则详见 reference/ppt-design-rules.md。