名称: pptx 描述: “演示文稿的创建、编辑和分析。当Claude需要处理演示文稿(.pptx文件)时,用于:(1)创建新演示文稿,(2)修改或编辑内容,(3)处理布局,(4)添加评论或演讲者备注,或任何其他演示文稿任务” 许可证: 专有。LICENSE.txt包含完整条款
PPTX 创建、编辑和分析
概述
用户可能要求您创建、编辑或分析.pptx文件的内容。一个.pptx文件本质上是一个ZIP归档,包含可以读取或编辑的XML文件和其他资源。您有不同工具和工作流程可用于不同任务。
读取和分析内容
文本提取
如果只需要读取演示文稿的文本内容,应将文档转换为markdown:
# 将文档转换为markdown
python -m markitdown 文件路径.pptx
原始XML访问
需要原始XML访问用于:评论、演讲者备注、幻灯片布局、动画、设计元素和复杂格式化。对于这些功能,需要解包演示文稿并读取其原始XML内容。
解包文件
python ooxml/scripts/unpack.py <office_file> <output_dir>
注意:unpack.py脚本位于项目根目录的skills/pptx/ooxml/scripts/unpack.py。如果脚本在此路径不存在,使用find . -name "unpack.py"来定位它。
关键文件结构
ppt/presentation.xml- 主演示文稿元数据和幻灯片引用ppt/slides/slide{N}.xml- 单个幻灯片内容(slide1.xml、slide2.xml等)ppt/notesSlides/notesSlide{N}.xml- 每个幻灯片的演讲者备注ppt/comments/modernComment_*.xml- 特定幻灯片的评论ppt/slideLayouts/- 幻灯片布局模板ppt/slideMasters/- 主幻灯片模板ppt/theme/- 主题和样式信息ppt/media/- 图像和其他媒体文件
排版和颜色提取
当给定示例设计进行模仿时:始终首先使用以下方法分析演示文稿的排版和颜色:
- 读取主题文件:检查
ppt/theme/theme1.xml以获取颜色(<a:clrScheme>)和字体(<a:fontScheme>) - 采样幻灯片内容:检查
ppt/slides/slide1.xml以获取实际字体使用(<a:rPr>)和颜色 - 搜索模式:使用grep在所有XML文件中查找颜色(
<a:solidFill>、<a:srgbClr>)和字体引用
创建新的PowerPoint演示文稿无模板时
当从头创建新的PowerPoint演示文稿时,使用html2pptx工作流程将HTML幻灯片转换为PowerPoint,具有精确定位。
设计原则
关键:在创建任何演示文稿之前,分析内容并选择合适的设计元素:
- 考虑主题:这个演示文稿是关于什么的?它建议什么基调、行业或氛围?
- 检查品牌:如果用户提到公司/组织,考虑其品牌颜色和身份
- 匹配调色板到内容:选择反映主题的颜色
- 陈述您的方法:在编写代码前解释设计选择
要求:
- ✅ 在编写代码前陈述基于内容的设计方法
- ✅ 仅使用网页安全字体:Arial、Helvetica、Times New Roman、Georgia、Courier、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)
- 海岸玫瑰:旧玫瑰(#AD7670)、海狸(#B49886)、蛋壳(#F3ECDC)、灰灰(#BFD5BE)
- 橙与青绿:浅橙(#FC993E)、灰青绿(#667C6F)、白色(#FCFCFC)
视觉细节选项
几何图案:
- 对角线分区器代替水平
- 不对称列宽(30/70、40/60、25/75)
- 旋转文本标题90°或270°
- 圆形/六边形图像框
- 角落三角形强调形状
- 重叠形状增加深度
边框与框架处理:
- 单侧厚单色边框(10-20点)
- 双线边框带对比色
- 角括号代替完整框架
- L形边框(上+左或下+右)
- 标题下划线强调(3-5点厚)
排版处理:
- 极端大小对比(72点标题 vs 11点正文)
- 全大写标题带宽字母间距
- 超大显示类型编号部分
- 等宽字体(Courier New)用于数据/统计/技术内容
- 紧缩字体(Arial Narrow)用于密集信息
- 轮廓文本强调
图表与数据样式:
- 单色图表带关键数据单一强调色
- 水平条形图代替垂直
- 点图代替条形图
- 最小网格线或无
- 数据标签直接元素上(无图例)
- 关键指标超大数字
布局创新:
- 全出血图像带文本覆盖
- 侧边栏列(20-30%宽度)用于导航/上下文
- 模块化网格系统(3×3、4×4块)
- Z模式或F模式内容流
- 浮动文本框在彩色形状上
- 杂志风格多列布局
背景处理:
- 实色块占幻灯片40-60%
- 渐变填充(仅垂直或对角线)
- 分割背景(两种颜色,对角线或垂直)
- 边缘到边缘色带
- 负空间作为设计元素
布局技巧
当创建带图表或表格的幻灯片时:
- 两列布局(首选):使用全宽标题,然后下方两列——一列文本/项目符号,另一列特色内容。这提供更好平衡并使图表/表格更可读。使用不等列宽flexbox(如40%/60%分割)优化每个内容类型的空间。
- 全幻灯片布局:让特色内容(图表/表格)占据整个幻灯片以获得最大影响和可读性
- 永不垂直堆叠:不要将图表/表格放在文本下方单列中——这导致差可读性和布局问题
工作流程
- 强制——完整读取文件:完整从头到尾读取
html2pptx.md。读取此文件时永不设置任何范围限制。 在继续演示文稿创建前,读取完整文件内容以获取详细语法、关键格式化规则和最佳实践。 - 为每张幻灯片创建HTML文件,带合适尺寸(如720pt × 405pt用于16:9)
- 使用
<p>、<h1>-<h6>、<ul>、<ol>用于所有文本内容 - 使用
class="placeholder"用于将添加图表/表格的区域(用灰色背景渲染以可见) - 关键:首先使用Sharp将渐变和图标栅格化为PNG图像,然后在HTML中引用
- 布局:对于带图表/表格/图像的幻灯片,使用全幻灯片布局或两列布局以获得更好可读性
- 使用
- 使用
html2pptx.js库创建并运行JavaScript文件以将HTML幻灯片转换为PowerPoint并保存演示文稿- 使用
html2pptx()函数处理每个HTML文件 - 使用PptxGenJS API向占位符区域添加图表和表格
- 使用
pptx.writeFile()保存演示文稿
- 使用
- 视觉验证:生成缩略图并检查布局问题
- 创建缩略图网格:
python scripts/thumbnail.py output.pptx workspace/thumbnails --cols 4 - 仔细阅读和检查缩略图图像:
- 文本截断:文本被标题栏、形状或幻灯片边缘截断
- 文本重叠:文本与其他文本或形状重叠
- 定位问题:内容太靠近幻灯片边界或其他元素
- 对比度问题:文本和背景之间对比度不足
- 如果发现问题,调整HTML边距/间距/颜色并重新生成演示文稿
- 重复直到所有幻灯片视觉正确
- 创建缩略图网格:
编辑现有PowerPoint演示文稿
当编辑现有PowerPoint演示文稿中的幻灯片时,需要处理原始Office Open XML(OOXML)格式。这涉及解包.pptx文件、编辑XML内容和重新打包。
工作流程
- 强制——完整读取文件:完整从头到尾读取
ooxml.md(约500行)。读取此文件时永不设置任何范围限制。 在任何演示文稿编辑前,读取完整文件内容以获取OOXML结构和编辑工作流程的详细指导。 - 解包演示文稿:
python ooxml/scripts/unpack.py <office_file> <output_dir> - 编辑XML文件(主要是
ppt/slides/slide{N}.xml和相关文件) - 关键:每次编辑后立即验证并在继续前修复任何验证错误:
python ooxml/scripts/validate.py <dir> --original <file> - 打包最终演示文稿:
python ooxml/scripts/pack.py <input_directory> <office_file>
创建新的PowerPoint演示文稿使用模板时
当需要创建遵循现有模板设计的演示文稿时,需要复制和重新排列模板幻灯片,然后替换占位符上下文。
工作流程
-
提取模板文本并创建视觉缩略图网格:
- 提取文本:
python -m markitdown template.pptx > template-content.md - 读取
template-content.md:读取完整文件以理解模板演示文稿的内容。读取此文件时永不设置任何范围限制。 - 创建缩略图网格:
python scripts/thumbnail.py template.pptx - 参见创建缩略图网格部分获取更多详情
- 提取文本:
-
分析模板并保存清单到文件:
- 视觉分析:查看缩略图网格以理解幻灯片布局、设计模式和视觉结构
- 在
template-inventory.md创建并保存模板清单文件包含:# 模板清单分析 **总幻灯片数: [计数]** **重要: 幻灯片为0索引(第一张幻灯片 = 0, 最后一张幻灯片 = 计数-1)** ## [类别名称] - 幻灯片 0: [如有布局代码] - 描述/目的 - 幻灯片 1: [布局代码] - 描述/目的 - 幻灯片 2: [布局代码] - 描述/目的 [... 每张幻灯片必须单独列出索引和描述 ...] - 使用缩略图网格:参考视觉缩略图以识别:
- 布局模式(标题幻灯片、内容布局、分区器)
- 图像占位符位置和计数
- 跨幻灯片组设计一致性
- 视觉层次和结构
- 此清单文件在下一步选择合适模板时是必需的
-
基于模板清单创建演示文稿大纲:
- 从步骤2审查可用模板。
- 为第一张幻灯片选择介绍或标题模板。这应是第一个模板之一。
- 为其他幻灯片选择安全、基于文本的布局。
- 关键: 匹配布局结构到实际内容:
- 单列布局:用于统一叙述或单一主题
- 两列布局:仅当您有恰好2个不同项目/概念时使用
- 三列布局:仅当您有恰好3个不同项目/概念时使用
- 图像+文本布局:仅当您有实际图像要插入时使用
- 引用布局:仅用于实际人物引用(带归属),永不用于强调
- 永不使用占位符多于内容数量的布局
- 如果您有2个项目,不要强迫它们进入三列布局
- 如果您有4+项目,考虑分成多张幻灯片或使用列表格式
- 在选择布局前计数实际内容块
- 验证所选布局中每个占位符将被有意义内容填充
- 选择代表每个内容部分最佳布局的一个选项。
- 保存
outline.md带内容并利用可用设计的模板映射 - 示例模板映射:
# 要使用的模板幻灯片(0基索引) # 警告: 验证索引在范围内!带73张幻灯片的模板有索引0-72 # 映射: 大纲幻灯片编号 -> 模板幻灯片索引 template_mapping = [ 0, # 使用幻灯片0(标题/封面) 34, # 使用幻灯片34(B1: 标题和正文) 34, # 再次使用幻灯片34(为第二个B1重复) 50, # 使用幻灯片50(E1: 引用) 54, # 使用幻灯片54(F2: 关闭+文本) ]
-
使用
rearrange.py复制、重新排序和删除幻灯片:- 使用
scripts/rearrange.py脚本创建新演示文稿,幻灯片在期望顺序:python scripts/rearrange.py template.pptx working.pptx 0,34,34,50,52 - 脚本自动处理复制重复幻灯片、删除未使用幻灯片和重新排序
- 幻灯片索引为0基(第一张幻灯片是0,第二张是1等)
- 相同幻灯片索引可以多次出现以复制该幻灯片
- 使用
-
使用
inventory.py脚本提取所有文本:-
运行清单提取:
python scripts/inventory.py working.pptx text-inventory.json -
读取text-inventory.json:读取完整text-inventory.json文件以理解所有形状及其属性。读取此文件时永不设置任何范围限制。
-
清单JSON结构:
{ "slide-0": { "shape-0": { "placeholder_type": "TITLE", // 或null用于非占位符 "left": 1.5, // 位置英寸 "top": 2.0, "width": 7.5, "height": 1.2, "paragraphs": [ { "text": "段落文本", // 可选属性(仅当非默认时包含): "bullet": true, // 显式项目符号检测 "level": 0, // 仅当bullet为true时包含 "alignment": "CENTER", // CENTER, RIGHT(不是LEFT) "space_before": 10.0, // 段前间距点 "space_after": 6.0, // 段后间距点 "line_spacing": 22.4, // 行间距点 "font_name": "Arial", // 从第一个运行 "font_size": 14.0, // 点 "bold": true, "italic": false, "underline": false, "color": "FF0000" // RGB颜色 } ] } } } -
关键特性:
- 幻灯片:命名为"slide-0"、"slide-1"等。
- 形状:按视觉位置排序(从上到下、从左到右)为"shape-0"、"shape-1"等。
- 占位符类型:TITLE, CENTER_TITLE, SUBTITLE, BODY, OBJECT, 或null
- 默认字体大小:从布局占位符提取的
default_font_size点(如有) - 幻灯片编号被过滤:带SLIDE_NUMBER占位符类型的形状自动从清单排除
- 项目符号:当
bullet: true时,level始终包含(即使为0) - 间距:
space_before、space_after和line_spacing点(仅当设置时包含) - 颜色:
color用于RGB(如"FF0000"),theme_color用于主题颜色(如"DARK_1") - 属性:仅非默认值包含在输出中
-
-
生成替换文本并保存数据到JSON文件 基于前一步的文本清单:
- 关键:首先验证清单中存在哪些形状——仅引用实际存在的形状
- 验证:replace.py脚本将验证替换JSON中所有形状存在于清单中
- 如果引用不存在形状,将收到错误显示可用形状
- 如果引用不存在幻灯片,将收到错误指示幻灯片不存在
- 所有验证错误在脚本退出前一次显示
- 重要:replace.py脚本内部使用inventory.py来识别所有文本形状
- 自动清除:除非为形状提供"paragraphs",否则清单中所有文本形状将被清除
- 向需要内容的形状添加"paragraphs"字段(不是"replacement_paragraphs")
- 替换JSON中没有"paragraphs"的形状将自动清除其文本
- 带项目符号的段落将自动左对齐。当
"bullet": true时不要设置alignment属性 - 为占位符文本生成合适替换内容
- 使用形状大小确定合适内容长度
- 关键:包括原始清单中的段落属性——不要只提供文本
- 重要:当bullet: true时,不要在文本中包含项目符号(•, -, *)——它们自动添加
- 基本格式化规则:
- 标题/标题通常应有
"bold": true - 列表项应有
"bullet": true, "level": 0(当bullet为true时level必需) - 保留任何对齐属性(如居中文本的
"alignment": "CENTER") - 当不同于默认时包括字体属性(如
"font_size": 14.0、"font_name": "Lora") - 颜色:使用
"color": "FF0000"用于RGB或"theme_color": "DARK_1"用于主题颜色 - 替换脚本期望正确格式化段落,不仅仅是文本字符串
- 重叠形状:优先选择具有更大default_font_size或更合适placeholder_type的形状
- 标题/标题通常应有
- 将带替换的更新清单保存到
replacement-text.json - 警告:不同模板布局有不同形状计数——在创建替换前始终检查实际清单
示例paragraphs字段显示正确格式化:
"paragraphs": [ { "text": "新演示文稿标题文本", "alignment": "CENTER", "bold": true }, { "text": "章节标题", "bold": true }, { "text": "第一个项目符号点不带项目符号符号", "bullet": true, "level": 0 }, { "text": "红色文本", "color": "FF0000" }, { "text": "主题颜色文本", "theme_color": "DARK_1" }, { "text": "常规段落文本不带特殊格式化" } ]未列在替换JSON中的形状自动清除:
{ "slide-0": { "shape-0": { "paragraphs": [...] // 此形状获得新文本 } // shape-1和shape-2从清单中将自动清除 } }演示文稿常见格式化模式:
- 标题幻灯片:粗体文本,有时居中
- 幻灯片内章节标题:粗体文本
- 项目符号列表:每项需要
"bullet": true, "level": 0 - 正文文本:通常不需要特殊属性
- 引用:可能有特殊对齐或字体属性
-
使用
replace.py脚本应用替换python scripts/replace.py working.pptx replacement-text.json output.pptx脚本将:
- 首先使用inventory.py中的函数提取所有文本形状的清单
- 验证替换JSON中所有形状存在于清单中
- 清除清单中识别的所有形状的文本
- 仅应用新文本到替换JSON中定义了"paragraphs"的形状
- 通过应用JSON中的段落属性保留格式化
- 自动处理项目符号、对齐、字体属性和颜色
- 保存更新演示文稿
示例验证错误:
错误: 替换JSON中无效形状: - 形状'shape-99'在'slide-0'上未找到。可用形状: shape-0, shape-1, shape-4 - 幻灯片'slide-999'在清单中未找到错误: 替换文本使溢出在这些形状中恶化: - slide-0/shape-2: 溢出恶化1.25英寸(原0.00英寸,现1.25英寸)
创建缩略图网格
为快速分析和参考创建PowerPoint幻灯片的视觉缩略图网格:
python scripts/thumbnail.py template.pptx [输出前缀]
特性:
- 创建:
thumbnails.jpg(或大型套件的thumbnails-1.jpg、thumbnails-2.jpg等) - 默认: 5列,每网格最多30张幻灯片(5×6)
- 自定义前缀:
python scripts/thumbnail.py template.pptx my-grid- 注意: 输出前缀应包括路径如果您想要特定目录输出(如
workspace/my-grid)
- 注意: 输出前缀应包括路径如果您想要特定目录输出(如
- 调整列:
--cols 4(范围: 3-6, 影响每网格幻灯片数) - 网格限制: 3列 = 12幻灯片/网格, 4列 = 20, 5列 = 30, 6列 = 42
- 幻灯片为0索引(幻灯片0, 幻灯片1等)
用例:
- 模板分析: 快速理解幻灯片布局和设计模式
- 内容审查: 整个演示文稿的视觉概览
- 导航参考: 通过视觉外观查找特定幻灯片
- 质量检查: 验证所有幻灯片正确格式化
示例:
# 基本用法
python scripts/thumbnail.py presentation.pptx
# 组合选项: 自定义名称、列
python scripts/thumbnail.py template.pptx analysis --cols 4
将幻灯片转换为图像
为视觉分析PowerPoint幻灯片,使用两步过程将其转换为图像:
-
将PPTX转换为PDF:
soffice --headless --convert-to pdf template.pptx -
将PDF页面转换为JPEG图像:
pdftoppm -jpeg -r 150 template.pdf slide创建文件如
slide-1.jpg、slide-2.jpg等。
选项:
-r 150: 设置分辨率到150 DPI(调整质量/大小平衡)-jpeg: 输出JPEG格式(如偏好PNG使用-png)-f N: 第一页转换(如-f 2从第2页开始)-l N: 最后页转换(如-l 5在第5页停止)slide: 输出文件前缀
示例特定范围:
pdftoppm -jpeg -r 150 -f 2 -l 5 template.pdf slide # 仅转换页2-5
代码风格指南
重要:当为PPTX操作生成代码时:
- 编写简洁代码
- 避免冗长变量名和冗余操作
- 避免不必要打印语句
依赖项
必需依赖项(应已安装):
- markitdown:
pip install "markitdown[pptx]"(用于从演示文稿提取文本) - pptxgenjs:
npm install -g pptxgenjs(用于通过html2pptx创建演示文稿) - playwright:
npm install -g playwright(用于html2pptx中HTML渲染) - react-icons:
npm install -g react-icons react react-dom(用于图标) - sharp:
npm install -g sharp(用于SVG栅格化和图像处理) - LibreOffice:
sudo apt-get install libreoffice(用于PDF转换) - Poppler:
sudo apt-get install poppler-utils(用于pdftoppm将PDF转换为图像) - defusedxml:
pip install defusedxml(用于安全XML解析)