关于 pptx
用于创建、编辑和分析 PowerPoint .pptx 文件的技能,按新建、模板制作、编辑和内容提取提供不同工作流。
主要功能
- 01从 HTML 幻灯片创建演示文稿
- 02通过 OOXML 编辑演示文稿
- 03基于现有模板制作演示文稿
- 04提取文本并检查原始 XML
- 05通过渲染结果进行视觉验证
适用场景
- 01从零创建演示文稿
- 02套用现有 PowerPoint 模板
- 03修改现有演示文稿的幻灯片内容
- 04检查演讲者备注、评论或动画
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ bbeierle12/ skill-mcp-claude --skill pptx安装后在 Claude Code 中输入/pptx确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
_meta.jsoncss.mdhtml2pptx.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.xsd详细介绍
PPTX 的创建、编辑和分析
概述
根据需要创建、编辑或分析 .pptx 文件的内容。.pptx 文件本质上是一个 ZIP 归档,其中包含 XML 文件和其他资源。针对不同任务,有不同的工具和工作流可供使用。
重要:先阅读所有文档
开始任何演示文稿任务之前,请完整阅读所有相关文档文件,以了解完整工作流:
- 创建新演示文稿:完整阅读
html2pptx.md和css.md - 编辑现有演示文稿:完整阅读
ooxml.md - 基于模板创建演示文稿:阅读本文档中的相关部分以及
css.md
阅读这些文件时,切勿设置任何范围限制。 开始之前充分了解完整的工作流、限制和最佳实践,对于制作高质量演示文稿至关重要。了解不全面会导致错误、样式不一致和视觉缺陷,进而需要返工。
阅读和分析内容
文本提取
如需只读取演示文稿的文本内容,请将文档转换为 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/public/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,并确保定位准确。
工作流
-
阅读文档:完整阅读
html2pptx.md和css.md(请参阅上文“重要:先阅读所有文档”部分) -
前置条件 - 提取 html2pptx 库:
- 将库提取到脚本旁边:
mkdir -p html2pptx && tar -xzf skills/public/pptx/html2pptx.tgz -C html2pptx - 这会创建一个
html2pptx/目录,其中包含库文件和 CLI 二进制文件
- 将库提取到脚本旁边:
-
规划演示文稿:遵循 html2pptx.md 的“设计理念”部分,确定:
- 美学方向和大胆的设计选择
- 配色方案(请参阅“创建配色方案”)
- 字体排版策略
- 编写详细的大纲,包含幻灯片布局和演讲者备注(每张幻灯片 1-3 句)
-
设置 CSS 变量:在共享的
.css文件中覆盖 CSS 变量,以设置颜色、字体排版和间距(请参阅 css.md 的“设计系统变量”) -
创建 HTML 幻灯片(16:9 尺寸为 960px × 540px):遵循 html2pptx.md 中有关以下内容的说明:
- 幻灯片布局区域(标题、内容、脚注)
- 关键文本规则(正确的 HTML 标签)
- 支持的元素和样式
-
使用
html2pptx库创建并运行 JavaScript 文件,将 HTML 幻灯片转换为 PowerPoint 并保存演示文稿-
运行命令:
NODE_PATH="$(npm root -g)" node your-script.js 2>&1 -
使用
html2pptx函数处理每个 HTML 文件 -
使用 PptxGenJS API 在占位区域添加图表和表格
-
使用
pptx.writeFile()保存演示文稿 -
**⚠️ 重要:**脚本必须遵循此示例结构。编写脚本前,请先逐步说明思路,确保正确使用 API。不要调用
pptx.addSlide。
const pptxgen = require("pptxgenjs"); const { html2pptx } = require("./html2pptx"); // Create a new pptx presentation const pptx = new pptxgen(); pptx.layout = "LAYOUT_16x9"; // Must match HTML body dimensions // Add an HTML-only slide await html2pptx("slide1.html", pptx); // Add a HTML slide with chart placeholders const { slide: slide2, placeholders } = await html2pptx("slide2.html", pptx); slide.addChart(pptx.charts.LINE, chartData, placeholders[0]); // Save the presentation await pptx.writeFile("output.pptx"); -
-
视觉验证:将幻灯片转换为图像,并检查布局问题
- 先将 PPTX 转换为 PDF:
soffice --headless --convert-to pdf output.pptx - 然后将 PDF 转换为图像:
pdftoppm -jpeg -r 150 output.pdf slide- 这会生成
slide-1.jpg、slide-2.jpg等文件
- 这会生成
- 读取每个生成的图像文件,并仔细检查以下问题:
- 文本裁切:文本被标题栏、形状或幻灯片边缘裁切
- 文本重叠:文本与其他文本或形状重叠
- 位置问题:内容过于靠近幻灯片边界或其他元素
- 对比度问题:文本与背景之间的对比度不足
- 对齐问题:元素之间未正确对齐
- 视觉层次:重要内容是否得到了适当强调
- **重要:交付给用户前,所有幻灯片都必须通过这些验证检查。**请勿跳过此步骤,也不要交付存在视觉缺陷的演示文稿。
- 如果发现问题,请按以下优先顺序修复:
- 增大边距 - 为有问题的元素增加内边距或间距
- 调整字体大小 - 缩小文本以适应可用空间
- 彻底重新设计布局 - 如果以上方法无效,请重新设计幻灯片布局
- 修改后重新生成演示文稿
- 重复上述流程,直到所有幻灯片的视觉效果都正确
- 先将 PPTX 转换为 PDF:
编辑现有 PowerPoint 演示文稿
要编辑现有 PowerPoint 演示文稿中的幻灯片,请使用原始 Office Open XML(OOXML)格式。这需要解包 .pptx 文件、编辑 XML 内容,然后重新打包。
工作流
- 阅读文档:完整阅读
ooxml.md(请参阅上文“重要:先阅读所有文档”部分) - 解包演示文稿:
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,内容如下:# Template Inventory Analysis **幻灯片总数:[count]** **重要提示:幻灯片索引从 0 开始(第一页 = 0,最后一页 = count-1)** ## [Category Name] - 幻灯片 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,了解所有形状及其属性
-
清单 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 文件 根据上一步的文本清单:
- CRITICAL:首先确认清单中有哪些形状——仅引用实际存在的形状
- VALIDATION:replace.py 脚本会验证替换 JSON 中的所有形状是否存在于清单中
- 引用不存在的形状会产生错误,并显示可用形状
- 引用不存在的幻灯片会产生错误,指出该幻灯片不存在
- 脚本退出前会一次性显示所有验证错误
- IMPORTANT:replace.py 脚本会在内部使用 inventory.py 来识别所有文本形状
- 自动清除:除非为清单中的文本形状提供了「paragraphs」,否则所有文本形状都会被清除
- 对需要内容的形状添加「paragraphs」字段(而不是「replacement_paragraphs」)
- 替换 JSON 中未包含「paragraphs」的形状,其文本会自动清除
- 带项目符号的段落会自动左对齐。避免在
"bullet": true时设置alignment属性 - 为占位符文本生成合适的替换内容
- 根据形状大小确定合适的内容长度
- CRITICAL:包含原始清单中的段落属性——不要只提供文本
- IMPORTANT:当 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" - 替换脚本需要的是格式正确的段落,而不只是文本字符串
- 重叠形状:优先选择默认字体大小更大或占位符类型更合适的形状
- 标题通常应设置
- 将包含替换内容的更新后清单保存到
replacement-text.json - WARNING:不同的模板布局包含的形状数量不同——创建替换内容前务必检查实际清单
显示正确格式的 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 开始编号(幻灯片 0、幻灯片 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 操作生成代码时:
- 编写简洁的代码
- 避免使用冗长的变量名和冗余操作
- 避免不必要的打印语句
依赖项
所需依赖项(应该已安装):
- 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(用于 SVG 格式的图标) - LibreOffice:用于 PDF 转换(视觉验证步骤所必需)
- macOS:
brew install --cask libreoffice - Linux:
sudo apt-get install libreoffice
- macOS:
- Poppler:
sudo apt-get install poppler-utils(用于通过 pdftoppm 将 PDF 转换为图像) - defusedxml:
pip install defusedxml(用于安全解析 XML)