| name | ppt |
| description | PPT 演示文稿创建、编辑和分析。当需要处理演示文稿时使用,支持:(1) 创建新演示文稿,(2) 修改和编辑内容,(3) 处理布局和样式,(4) 添加图表和表格 |
PPT 演示文稿处理技能
概述
本技能提供完整的 PowerPoint 演示文稿处理能力,包括创建、编辑和分析 .pptx 文件。
创建新演示文稿的推荐工作流程
方法一:HTML to PPTX 工作流程(推荐 - 专业设计)
这是创建专业演示文稿的最佳方法,提供完整的设计控制和视觉质量。
设计原则
关键要求 - 在编写代码前必须做:
- 分析内容主题:这个演示是关于什么的?什么行业、情绪或基调?
- 检查品牌要求:如果用户提到公司/组织,考虑其品牌色彩和身份
- 匹配调色板:选择反映主题的颜色
- 说明设计思路:在编写代码前解释你的设计选择
设计要求:
- ✅ 在编写代码前说明基于内容的设计方法
- ✅ 仅使用 Web 安全字体:Arial, Helvetica, Times New Roman, Georgia, Courier New, Verdana, Tahoma, Trebuchet MS, Impact
- ✅ 通过大小、粗细和颜色创建清晰的视觉层次
- ✅ 确保可读性:强对比度、适当大小的文本、清晰对齐
- ✅ 保持一致:重复模式、间距和视觉语言
颜色调色板选择
创意选色建议:
- 超越默认:什么颜色真正匹配这个主题?避免自动驾驶选择
- 多角度考虑:主题、行业、情绪、能量水平、目标受众、品牌身份
- 大胆尝试:医疗演示不一定用绿色,金融不一定用深蓝
- 构建调色板:选择 3-5 种协调的颜色(主色 + 辅助色 + 强调色)
- 确保对比:文本必须在背景上清晰可读
示例调色板(激发创意 - 选择一个、改编或创建自己的):
- 经典蓝 - 深蓝 (#1C2833), 石板灰 (#2E4053), 银色 (#AAB7B8), 浅灰 (#F4F6F6)
- 青绿珊瑚 - 青色 (#5EA8A7), 深青 (#277884), 珊瑚 (#FE4447), 白色 (#FFFFFF)
- 大胆红 - 红 (#C0392B), 鲜红 (#E74C3C), 橙 (#F39C12), 黄 (#F1C40F), 绿 (#2ECC71)
- 温暖腮红 - 淡紫 (#A49393), 腮红 (#EED6D3), 玫瑰 (#E8B4B8), 奶油 (#FAF7F2)
- 勃艮第奢华 - 勃艮第 (#5D1D2E), 深红 (#951233), 锈色 (#C15937), 金色 (#997929)
- 深紫翡翠 - 紫色 (#B165FB), 深蓝 (#181B24), 翡翠 (#40695B), 白色 (#FFFFFF)
- 奶油森林绿 - 奶油 (#FFE1C7), 森林绿 (#40695B), 白色 (#FCFCFC)
- 粉紫 - 粉红 (#F8275B), 珊瑚 (#FF574A), 玫瑰 (#FF737D), 紫色 (#3D2F68)
- 柠檬李子 - 柠檬绿 (#C5DE82), 李子 (#7C3A5F), 珊瑚 (#FD8C6E), 蓝灰 (#98ACB5)
- 黑金 - 金色 (#BF9A4A), 黑色 (#000000), 奶油 (#F4F6F6)
- 鼠尾草陶土 - 鼠尾草 (#87A96B), 陶土 (#E07A5F), 奶油 (#F4F1DE), 炭灰 (#2C2C2C)
- 炭灰红 - 炭灰 (#292929), 红 (#E33737), 浅灰 (#CCCBCB)
- 活力橙 - 橙色 (#F96D00), 浅灰 (#F2F2F2), 炭灰 (#222831)
- 森林绿 - 黑 (#191A19), 绿 (#4E9F3D), 深绿 (#1E5128), 白 (#FFFFFF)
- 复古彩虹 - 紫 (#722880), 粉 (#D72D51), 橙 (#EB5C18), 琥珀 (#F08800), 金 (#DEB600)
- 复古大地 - 芥末 (#E3B448), 鼠尾草 (#CBD18F), 森林绿 (#3A6B35), 奶油 (#F4F1DE)
视觉细节选项
几何图案:
- 对角分隔线代替水平线
- 不对称列宽(30/70, 40/60, 25/75)
- 90° 或 270° 旋转文本标题
- 圆形/六边形图片框架
- 三角形强调形状
- 重叠形状增加深度
边框处理:
- 单侧粗边框(10-20pt)
- 双线边框配对比色
- 角括号代替完整框架
- L 形边框(上+左 或 下+右)
- 标题下划线(3-5pt 粗)
排版处理:
- 极端大小对比(72pt 标题 vs 11pt 正文)
- 全大写标题 + 宽字母间距
- 大号显示数字
- 等宽字体(Courier New)用于数据/统计/技术内容
- 窄字体(Arial Narrow)用于密集信息
图表数据样式:
- 单色图表 + 单一强调色突出关键数据
- 横向条形图代替纵向
- 点图代替条形图
- 最少网格线或无网格线
- 数据标签直接在元素上(无图例)
- 超大数字显示关键指标
布局创新:
- 全出血图片 + 文本叠加
- 侧边栏(20-30% 宽度)用于导航/上下文
- 模块化网格系统(3×3, 4×4 块)
- Z 型或 F 型内容流
- 浮动文本框覆盖彩色形状
- 杂志风格多栏布局
背景处理:
- 占据 40-60% 幻灯片的纯色块
- 渐变填充(仅垂直或对角)
- 分割背景(两种颜色,对角或垂直)
- 边到边色带
- 负空间作为设计元素
工作流程步骤
设计思考
- 分析内容主题和目标受众
- 选择 3-5 种颜色的调色板
- 决定视觉风格(现代/专业/科技/创意)
- 向用户说明设计思路
创建 HTML 幻灯片
- 为每张幻灯片创建 HTML 文件
- 使用标准尺寸(720pt × 405pt for 16:9)
- 使用
<h1>-<h6>,<p>,<ul>,<ol>标签 - 应用 CSS 样式实现设计
生成 Node.js 转换脚本
- 使用 PptxGenJS 库
- 读取 HTML 并转换为 PPTX
- 添加图表、表格等高级元素
- 保存 PPTX 文件
运行生成
node generate_presentation.js
完整示例代码
HTML 幻灯片示例(slide1.html):
<!DOCTYPE html>
<html>
<head>
<style>
body {
margin: 0;
padding: 0;
width: 720pt;
height: 405pt;
background: linear-gradient(135deg, #1C2833 0%, #2E4053 100%);
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
font-family: Arial, sans-serif;
}
h1 {
color: #F4F6F6;
font-size: 60pt;
font-weight: bold;
margin: 0;
text-align: center;
}
p {
color: #AAB7B8;
font-size: 24pt;
margin-top: 20pt;
}
</style>
</head>
<body>
<h1>演示标题</h1>
<p>副标题文字</p>
</body>
</html>
Node.js 转换脚本示例:
const PptxGenJS = require('pptxgenjs');
const fs = require('fs');
const puppeteer = require('puppeteer');
async function createPresentation() {
const pptx = new PptxGenJS();
// 设置演示文稿属性
pptx.layout = '16x9';
pptx.author = 'Generated by Claude';
// 为每个 HTML 文件创建幻灯片
const htmlFiles = ['slide1.html', 'slide2.html', 'slide3.html'];
for (const htmlFile of htmlFiles) {
const slide = pptx.addSlide();
// 读取 HTML 内容
const html = fs.readFileSync(htmlFile, 'utf8');
// 使用 Puppeteer 渲染 HTML 为图片
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.setViewport({ width: 960, height: 540 });
await page.setContent(html);
const screenshot = await page.screenshot({ type: 'png' });
await browser.close();
// 将图片添加到幻灯片
slide.addImage({
data: `data:image/png;base64,${screenshot.toString('base64')}`,
x: 0,
y: 0,
w: '100%',
h: '100%'
});
}
// 保存演示文稿
await pptx.writeFile({ fileName: 'presentation.pptx' });
console.log('✅ 演示文稿创建成功!');
}
createPresentation().catch(console.error);
方法二:Python-PPTX 直接创建(快速原型)
适用于简单、快速的演示文稿创建。
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.enum.text import PP_ALIGN
from pptx.dml.color import RGBColor
# 创建演示文稿
prs = Presentation()
# 添加标题幻灯片
title_slide_layout = prs.slide_layouts[0]
slide = prs.slides.add_slide(title_slide_layout)
title = slide.shapes.title
subtitle = slide.placeholders[1]
title.text = "演示标题"
subtitle.text = "副标题"
# 添加内容幻灯片
bullet_slide_layout = prs.slide_layouts[1]
slide = prs.slides.add_slide(bullet_slide_layout)
title_shape = slide.shapes.title
body_shape = slide.placeholders[1]
title_shape.text = "内容标题"
text_frame = body_shape.text_frame
text_frame.text = "第一个要点"
# 添加更多要点
p = text_frame.add_paragraph()
p.text = "第二个要点"
p.level = 0
# 保存
prs.save('presentation.pptx')
读取和分析内容
文本提取
# 使用 markitdown 转换为 markdown
python -m markitdown presentation.pptx
访问原始 XML
对于注释、演讲者备注、幻灯片布局等高级功能:
# 解压 pptx 文件
unzip presentation.pptx -d unpacked/
关键文件结构:
ppt/presentation.xml- 主演示元数据ppt/slides/slide{N}.xml- 单个幻灯片内容ppt/notesSlides/notesSlide{N}.xml- 演讲者备注ppt/slideLayouts/- 布局模板ppt/theme/- 主题和样式ppt/media/- 图片和媒体文件
常用布局索引
python-pptx 的标准布局:
- 0: 标题幻灯片(Title Slide)
- 1: 标题和内容(Title and Content)
- 2: 节标题(Section Header)
- 3: 两栏内容(Two Content)
- 4: 比较(Comparison)
- 5: 仅标题(Title Only)
- 6: 空白(Blank)
- 7: 内容带标题(Content with Caption)
- 8: 图片带标题(Picture with Caption)
添加图表
from pptx import Presentation
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.util import Inches
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[5])
# 定义图表数据
chart_data = CategoryChartData()
chart_data.categories = ['Q1', 'Q2', 'Q3', 'Q4']
chart_data.add_series('销售额', (100, 120, 140, 160))
# 添加图表
x, y, cx, cy = Inches(2), Inches(2), Inches(6), Inches(4.5)
chart = slide.shapes.add_chart(
XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data
).chart
prs.save('chart_presentation.pptx')
添加表格
from pptx import Presentation
from pptx.util import Inches
prs = Presentation()
slide = prs.slides.add_slide(prs.slide_layouts[5])
# 添加表格(3行4列)
table = slide.shapes.add_table(3, 4, Inches(2), Inches(2), Inches(6), Inches(2)).table
# 填充表头
table.cell(0, 0).text = '项目'
table.cell(0, 1).text = 'Q1'
table.cell(0, 2).text = 'Q2'
table.cell(0, 3).text = 'Q3'
# 填充数据
table.cell(1, 0).text = '销售额'
table.cell(1, 1).text = '100'
prs.save('table_presentation.pptx')
样式设置
from pptx.util import Pt
from pptx.dml.color import RGBColor
# 字体样式
run.font.name = 'Arial'
run.font.size = Pt(16)
run.font.bold = True
run.font.color.rgb = RGBColor(255, 0, 0) # 红色
# 段落对齐
paragraph.alignment = PP_ALIGN.CENTER
# 段落间距
paragraph.paragraph_format.space_before = Pt(12)
paragraph.paragraph_format.space_after = Pt(12)
paragraph.paragraph_format.line_spacing = 1.5
依赖安装
# Python 方法
pip install python-pptx markitdown
# HTML to PPTX 方法(推荐)
npm install -g pptxgenjs puppeteer
快速参考
| 任务 | Python | HTML to PPTX |
|---|---|---|
| 设计灵活性 | 中等 | ✅ 高 |
| 视觉质量 | 基础 | ✅ 专业 |
| 学习曲线 | 简单 | 中等 |
| 适用场景 | 快速原型 | ✅ 生产级演示 |
最佳实践
- 优先使用 HTML to PPTX 方法用于重要演示
- 在编码前思考设计 - 分析主题、选择调色板
- 保持一致性 - 整个演示使用相同的颜色和字体
- 确保对比度 - 文本必须清晰可读
- 测试在不同设备 - 确保在投影仪上清晰