关于 pptx
用于创建、编辑和分析 PPTX 演示文稿的技能,涵盖文本提取、XML 检查、模板修改及从 HTML 生成幻灯片。适合处理演示文稿内容与版式的工作流。
主要功能
- 01提取演示文稿文本
- 02检查原始 XML 与备注
- 03分析字体和配色
- 04从 HTML 创建 PPTX
- 05基于模板修改幻灯片
适用场景
- 01将 PPTX 内容转换为 Markdown
- 02检查备注、动画或版式
- 03从头制作演示文稿
- 04按模板调整幻灯片
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ dedalus-erp-pas/ foundation-skills --skill pptx安装后在 Claude Code 中输入/pptx确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
html2pptx.mdLICENSE.txtooxml.mdooxml/schemas/ecma/fouth-edition/opc-contentTypes.xsdopc-coreProperties.xsdopc-digSig.xsdopc-relationships.xsdooxml/schemas/ISO-IEC29500-4_2016/dml-chart.xsddml-chartDrawing.xsddml-diagram.xsddml-lockedCanvas.xsddml-main.xsddml-picture.xsddml-spreadsheetDrawing.xsddml-wordprocessingDrawing.xsdpml.xsdshared-additionalCharacteristics.xsdshared-bibliography.xsdshared-commonSimpleTypes.xsdshared-customXmlDataProperties.xsdshared-customXmlSchemaProperties.xsdshared-documentPropertiesCustom.xsdshared-documentPropertiesExtended.xsdshared-documentPropertiesVariantTypes.xsdshared-math.xsdshared-relationshipReference.xsdsml.xsdvml-main.xsdvml-officeDrawing.xsdvml-presentationDrawing.xsd详细介绍
PPTX 的创建、编辑和分析
概述
用户可能会要求你创建、编辑或分析 .pptx 文件的内容。.pptx 文件本质上是一个 ZIP 归档,其中包含 XML 文件和其他资源,你可以读取或编辑这些内容。针对不同任务,你可以使用不同的工具和工作流。
读取和分析内容
文本提取
如果只需要读取演示文稿中的文本内容,应将文档转换为 Markdown:
# Convert document to markdown
python -m markitdown path-to-file.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 幻灯片。
设计原则
重要:创建任何演示文稿之前,请分析内容并选择合适的设计元素:
- 考虑主题内容:这份演示文稿的主题是什么?它呈现出怎样的语气、行业特征或氛围?
- 检查品牌形象:如果用户提及公司或组织,请考虑其品牌色彩和形象
- 使配色与内容相符:选择能体现主题的颜色
- 说明设计思路:编写代码前,先解释你的设计选择
要求:
- ✅ 编写代码前,先说明基于内容的设计思路
- ✅ 仅使用适合 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)
- 海岸玫瑰色:古玫瑰色 (#AD7670)、海狸棕 (#B49886)、蛋壳色 (#F3ECDC)、灰白色 (#BFD5BE)
- 橙色与绿松石色:浅橙色 (#FC993E)、灰绿松石色 (#667C6F)、白色 (#FCFCFC)
视觉细节选项
几何图案:
- 使用斜线分隔区域,而非水平分隔线
- 采用不对称的列宽(30/70、40/60、25/75)
- 将标题文字旋转 90° 或 270°
- 为图像使用圆形/六边形边框
- 在角落添加三角形装饰图形
- 叠加图形以营造层次感
边框与框架样式:
- 仅在一侧使用粗实色边框(10-20pt)
- 使用对比色双线边框
- 使用角括号代替完整边框
- 使用 L 形边框(上+左或下+右)
- 在标题下方添加下划线装饰(粗细为 3-5pt)
字体样式:
- 采用极大的字号对比(72pt 标题与 11pt 正文)
- 标题全部大写,并加宽字间距
- 使用超大展示字体显示编号章节
- 使用等宽字体(Courier New)呈现数据/统计信息/技术内容
- 使用窄体字体(Arial Narrow)呈现密集信息
- 使用描边文字突出重点
图表与数据样式:
- 使用单色图表,仅用一种强调色标记关键数据
- 使用水平条形图代替垂直条形图
- 使用点图代替条形图
- 尽量减少网格线或完全不使用
- 直接在图表元素上标注数据(不使用图例)
- 用超大数字突出关键指标
布局创新:
- 使用带文字叠加的全出血图像
- 使用侧边栏列(宽度为 20-30%)展示导航/上下文信息
- 使用模块化网格系统(3×3、4×4 方块)
- 采用 Z 形或 F 形内容流
- 在彩色图形上叠放浮动文本框
- 采用杂志风格的多列布局
背景样式:
- 使用占幻灯片 40-60% 面积的纯色块
- 使用渐变填充(仅垂直或对角方向)
- 使用分割背景(两种颜色,按对角线或垂直方向分割)
- 使用延伸至边缘的色带
- 将留白作为设计元素
布局提示
创建包含图表或表格的幻灯片时:
- 双栏布局(首选):使用横跨全宽的标题,然后在下方设置两栏——一栏放置文本/项目符号,另一栏放置重点内容。这样可以让布局更平衡,也更便于阅读图表/表格。使用列宽不等的 flexbox(例如 40%/60% 的比例),为每种内容类型优化空间。
- 全幻灯片布局:让重点内容(图表/表格)占据整张幻灯片,以获得最大的视觉冲击力和可读性
- 绝不要垂直堆叠:不要将图表/表格放在单栏文本下方——这会导致可读性差和布局问题
工作流
- 必须:阅读整个文件:从头到尾完整阅读
html2pptx.md。阅读此文件时,绝不要设置范围限制。 在开始创建演示文稿之前,先阅读完整文件内容,了解详细语法、关键格式规则和最佳实践。 - 为每张幻灯片创建一个 HTML 文件,并设置合适的尺寸(例如,16:9 的 720pt × 405pt)
- 所有文本内容均使用
<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 并重新生成 PPTX 和缩略图
- 创建缩略图网格:
- 使用
pptx.writeFile('presentation.pptx')保存演示文稿
使用模板创建新的 PowerPoint 演示文稿
此工作流适用于通过模板创建演示文稿,并将模板中的占位文本替换为实际内容。
工作流
-
必须:阅读整个文件:先完整阅读
ooxml.md,将其作为 XML 参考。 -
将模板复制为工作文件 创建模板的工作副本以供修改:
cp template.pptx working.pptx -
为模板创建缩略图网格,查看所有可用幻灯片
python scripts/thumbnail.py template.pptx workspace/thumbnails --cols 4 -
根据内容要求重新排列幻灯片
python scripts/rearrange.py template.pptx working.pptx 0,5,12,12,23- 按所需顺序指定以 0 为起始索引的幻灯片编号
- 可以复制幻灯片(例如,
12,12表示使用两次第 12 张幻灯片) - 缺失的编号会完全跳过相应幻灯片
-
从工作演示文稿中提取文本清单
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": "Paragraph 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的单位为磅(仅在设置时包含) - 颜色:RGB 颜色使用
color(例如 "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") - 颜色:RGB 颜色使用
"color": "FF0000",主题颜色使用"theme_color": "DARK_1" - 替换脚本需要的是格式正确的段落,而不仅仅是文本字符串
- 重叠形状:优先选择默认
font_size较大或placeholder_type更合适的形状
- 标题通常应设置
- 将包含替换内容的更新后清单保存到
replacement-text.json - 警告:不同的模板布局包含的形状数量不同——创建替换内容前,务必检查实际清单
以下示例展示了格式正确的
"paragraphs"字段:"paragraphs": [ { "text": "New presentation title text", "alignment": "CENTER", "bold": true }, { "text": "Section Header", "bold": true }, { "text": "First bullet point without bullet symbol", "bullet": true, "level": 0 }, { "text": "Red colored text", "color": "FF0000" }, { "text": "Theme colored text", "theme_color": "DARK_1" }, { "text": "Regular paragraph text without special formatting" } ]替换 JSON 中未列出的形状会被自动清除:
{ "slide-0": { "shape-0": { "paragraphs": [...] // This shape gets new text } // shape-1 and shape-2 from inventory will be cleared automatically } }演示文稿中的常见格式模式:
- 标题页:粗体文本,有时居中
- 幻灯片中的章节标题:粗体文本
- 项目符号列表:每个项目都需要
"bullet": true, "level": 0 - 正文:通常不需要特殊属性
- 引言:可能需要特殊的对齐或字体属性
-
使用
replace.py脚本应用替换内容python scripts/replace.py working.pptx replacement-text.json output.pptx脚本将:
- 首先使用
inventory.py中的函数提取所有文本形状的清单 - 验证替换 JSON 中的所有形状是否存在于清单中
- 清除清单中所有形状的文本
- 仅向替换 JSON 中定义了
"paragraphs"的形状应用新文本 - 应用 JSON 中的段落属性以保留格式
- 自动处理项目符号、对齐、字体属性和颜色
- 保存更新后的演示文稿
验证错误示例:
ERROR: Invalid shapes in replacement JSON: - Shape 'shape-99' not found on 'slide-0'. Available shapes: shape-0, shape-1, shape-4 - Slide 'slide-999' not found in inventoryERROR: Replacement text made overflow worse in these shapes: - slide-0/shape-2: overflow worsened by 1.25" (was 0.00", now 1.25") - 首先使用
创建缩略图网格
要创建 PowerPoint 幻灯片的可视化缩略图网格,以便快速分析和参考:
python scripts/thumbnail.py template.pptx [output_prefix]
功能:
- 创建:
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 开始(Slide 0、Slide 1 等)
使用场景:
- 模板分析:快速了解幻灯片布局和设计模式
- 内容审查:纵览整个演示文稿
- 导航参考:通过视觉外观查找特定幻灯片
- 质量检查:验证所有幻灯片的格式是否正确
示例:
# Basic usage
python scripts/thumbnail.py presentation.pptx
# Combine options: custom name, columns
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 # Converts only pages 2-5
代码风格指南
重要:为 PPTX 操作生成代码时:
- 编写简洁的代码
- 避免冗长的变量名和冗余操作
- 避免不必要的 print 语句
依赖项
必需依赖项(应该已安装):
- 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)