mcpField
P
Pptx

Pptx

github.com/danielmiessler文档处理19.6k64 次安装2 天前更新
代码仓库

关于 Pptx

Pptx 是一项用于创建、编辑和分析 PowerPoint 演示文稿的技能,适用于处理 .pptx 文件的工作。它根据任务选择 HTML 转换、模板调整、OOXML 编辑、文本提取或幻灯片预览流程。

主要功能

  1. 01从头创建演示文稿
  2. 02编辑现有幻灯片
  3. 03按模板调整演示文稿
  4. 04提取文本及分析 XML
  5. 05生成幻灯片缩略图预览
  6. 06添加演讲者备注

适用场景

  1. 01从内容制作新的幻灯片
  2. 02基于现有模板更新演示文稿
  3. 03检查演示文稿文本和备注
  4. 04查看幻灯片缩略图布局

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/danielmiessler/lifeos --skill pptx

安装后在 Claude Code 中输入/pptx确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

LICENSE.txt
ooxml.md
html2pptx.md
Ooxml/Scripts/
pack.py
validate.py
unpack.py
Scripts/
rearrange.py
replace.py
inventory.py
html2pptx.js
thumbnail.py

详细介绍

PPTX 创建、编辑和分析

🎯 加载完整的 PAI 上下文

开始使用此技能执行任何任务前,请加载完整的 PAI 上下文:

read ~/.claude/PAI/SKILL.md

这将提供以下信息:

  • 完整的联系人列表(Angela、Bunny、Saša、Greg、团队成员)
  • 技术栈偏好(TypeScript>Python、bun>npm、uv>pip)
  • 安全规则和仓库安全协议
  • 响应格式要求(结构化 emoji 格式)
  • 用于 Agent 路由的语音 ID(ElevenLabs)
  • 个人偏好和操作说明

🔀 何时使用此子技能

明确触发条件

当用户的请求包含以下内容时,路由至此子技能:

创建触发条件:

  • “创建演示文稿”“新建演示文稿”“制作幻灯片”
  • “构建 PowerPoint”“生成 pptx”
  • “从零开始制作演示文稿”

编辑触发条件:

  • “编辑演示文稿”“修改幻灯片”“更新 PowerPoint”
  • “更改幻灯片内容”“编辑 pptx”

模板触发条件:

  • “使用演示文稿模板”“基于模板”
  • “应用模板设计”“模板幻灯片”

设计触发条件:

  • “演示文稿设计”“幻灯片布局”
  • “演讲者备注”“为幻灯片添加备注”
  • “路演材料”“幻灯片组”
上下文触发条件

在以下情况下路由至此子技能:

  • 处理 .pptx 文件
  • 用户提及“PowerPoint”
  • 用户提及“路演材料”或“幻灯片组”
  • 用户提及“keynote”(如果要导出为 pptx)
  • 涉及演示文稿的文件路径或操作
工作流路由

进入此子技能后,路由至相应工作流:

创建工作流(html2pptx):

  • “创建演示文稿”“新建幻灯片”“从零开始构建”
  • 未提及模板
  • → 完整阅读 html2pptx.md,使用 html2pptx.js

模板工作流:

  • “使用模板”“基于模板”“应用模板”
  • 有现成的 pptx 文件可用作模板
  • → 使用 inventory.py,遵循重新排列/替换工作流

编辑工作流(OOXML):

  • “编辑演示文稿”“修改现有幻灯片”
  • 需要更改现有 pptx 中的特定内容
  • → 完整阅读 ooxml.md,使用 unpack/pack 脚本

文本提取工作流:

  • “提取文本”“阅读演示文稿”“这个 pptx 里有什么”
  • → 使用 markitdown:python -m markitdown file.pptx

视觉分析工作流:

  • “展示幻灯片”“缩略图网格”“预览幻灯片”
  • → 使用 thumbnail.py 脚本生成网格预览

演讲者备注工作流:

  • “添加演讲者备注”“演示者备注”
  • → 使用 OOXML 工作流,编辑 notesSlide{N}.xml 文件

概述

用户可能会要求你创建、编辑或分析 .pptx 文件的内容。.pptx 文件本质上是一个包含 XML 文件和其他资源的 ZIP 压缩包。针对不同任务,你可以使用不同的工具和工作流。

阅读和分析内容

文本提取

如果只需阅读演示文稿的文本内容,应将文档转换为 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/Utilities/Documents/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/ - 图像和其他媒体文件
字体排版与颜色提取

给定要仿照的设计示例时:始终先使用以下方法分析演示文稿的字体排版和颜色:

  1. 读取主题文件:检查 ppt/theme/ppt/theme1.xml 中的颜色(<a:clrScheme>)和字体(<a:fontScheme>)
  2. 采样幻灯片内容:检查 ppt/slides/slide1.xml 中实际使用的字体(<a:rPr>)和颜色
  3. 搜索模式:使用 grep 在所有 XML 文件中查找颜色(<a:solidFill>、<a:srgbClr>)和字体引用

不使用模板创建新的 PowerPoint 演示文稿

从头开始创建新的 PowerPoint 演示文稿时,请使用 html2pptx 工作流,将 HTML 幻灯片转换为 PowerPoint,并确保定位精准。

设计原则

重要:创建任何演示文稿之前,请先分析内容并选择合适的设计元素:

  1. 考虑主题内容:这份演示文稿的主题是什么?它传达了怎样的语气、行业特征或氛围?
  2. 检查品牌信息:如果用户提到了某家公司或组织,请考虑其品牌颜色和品牌形象
  3. 让配色与内容相匹配:选择能够体现主题的颜色
  4. 说明设计思路:编写代码之前,先说明设计选择

要求:

  • ✅ 编写代码之前,先说明根据内容制定的设计思路
  • ✅ 仅使用 Web 安全字体:Arial、Helvetica、Times New Roman、Georgia、Courier New、Verdana、Tahoma、Trebuchet MS、Impact
  • ✅ 通过字号、字重和颜色建立清晰的视觉层次
  • ✅ 确保易读性:对比度高、字号适当、对齐整洁
  • ✅ 保持一致性:在各张幻灯片中重复使用相同的模式、间距和视觉风格
颜色方案选择

创意选择颜色:

  • 跳出默认选项:哪些颜色真正契合这个特定主题?避免不假思索地选择。
  • 从多个角度考虑:主题、行业、氛围、活力程度、目标受众、品牌形象(如果有提及)
  • 大胆尝试:试试出人意料的搭配——医疗主题的演示文稿不一定非要用绿色,金融主题也不一定非要用海军蓝
  • 构建配色方案:选择 3-5 种相互协调的颜色(主色 + 辅助色调 + 点缀色)
  • 确保对比度:文字在背景上必须清晰易读

配色方案示例(借此激发创意——选择一种、调整一种,或创建自己的方案):

  1. 经典蓝:深海军蓝 (#1C2833)、石板灰 (#2E4053)、银色 (#AAB7B8)、灰白色 (#F4F6F6)
  2. 青绿与珊瑚色:青绿色 (#5EA8A7)、深青绿色 (#277884)、珊瑚色 (#FE4447)、白色 (#FFFFFF)
  3. 醒目红色:红色 (#C0392B)、亮红色 (#E74C3C)、橙色 (#F39C12)、黄色 (#F1C40F)、绿色 (#2ECC71)
  4. 暖腮红色:灰紫色 (#A49393)、腮红色 (#EED6D3)、玫瑰色 (#E8B4B8)、奶油色 (#FAF7F2)
  5. 酒红奢华风:酒红色 (#5D1D2E)、深红色 (#951233)、铁锈色 (#C15937)、金色 (#997929)
  6. 深紫与翡翠绿:紫色 (#B165FB)、深蓝色 (#181B24)、翡翠绿 (#40695B)、白色 (#FFFFFF)
  7. 奶油色与森林绿:奶油色 (#FFE1C7)、森林绿 (#40695B)、白色 (#FCFCFC)
  8. 粉色与紫色:粉色 (#F8275B)、珊瑚色 (#FF574A)、玫瑰色 (#FF737D)、紫色 (#3D2F68)
  9. 青柠绿与李子色:青柠绿 (#C5DE82)、李子色 (#7C3A5F)、珊瑚色 (#FD8C6E)、蓝灰色 (#98ACB5)
  10. 黑与金:金色 (#BF9A4A)、黑色 (#000000)、奶油色 (#F4F6F6)
  11. 鼠尾草绿与陶土色:鼠尾草绿 (#87A96B)、陶土色 (#E07A5F)、奶油色 (#F4F1DE)、炭灰色 (#2C2C2C)
  12. 炭灰与红色:炭灰色 (#292929)、红色 (#E33737)、浅灰色 (#CCCBCB)
  13. 活力橙:橙色 (#F96D00)、浅灰色 (#F2F2F2)、炭灰色 (#222831)
  14. 森林绿:黑色 (#191A19)、绿色 (#4E9F3D)、深绿色 (#1E5128)、白色 (#FFFFFF)
  15. 复古彩虹:紫色 (#722880)、粉色 (#D72D51)、橙色 (#EB5C18)、琥珀色 (#F08800)、金色 (#DEB600)
  16. 复古大地色:芥末黄 (#E3B448)、鼠尾草绿 (#CBD18F)、森林绿 (#3A6B35)、奶油色 (#F4F1DE)
  17. 海岸玫瑰色:古玫瑰色 (#AD7670)、海狸棕 (#B49886)、蛋壳色 (#F3ECDC)、灰白色 (#BFD5BE)
  18. 橙色与绿松石色:浅橙色 (#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% 的比例),为每种内容类型优化空间。
  • 全幻灯片布局:让重点内容(图表/表格)占据整张幻灯片,以获得最大的视觉冲击力和可读性
  • 绝不要垂直堆叠:不要将图表/表格放在单栏文本下方——这会导致可读性差和布局问题
工作流
  1. 必须 - 阅读整个文件:从头到尾完整阅读 html2pptx.md。**阅读此文件时绝不要设置范围限制。**在开始创建演示文稿前,阅读完整文件内容,了解详细语法、关键格式规则和最佳实践。
  2. 为每张幻灯片创建一个尺寸合适的 HTML 文件(例如,16:9 的幻灯片为 720pt × 405pt)
    • 所有文本内容均使用 <p>、<h1>-<h6>、<ul>、<ol>
    • 对于将添加图表/表格的区域,使用 class="placeholder"(渲染时添加灰色背景以便查看)
    • 关键:先使用 Sharp 将渐变和图标栅格化为 PNG 图片,再在 HTML 中引用
    • 布局:对于包含图表/表格/图片的幻灯片,使用整页布局或双栏布局,以提升可读性
  3. 使用 html2pptx.js 库创建并运行 JavaScript 文件,将 HTML 幻灯片转换为 PowerPoint 并保存演示文稿
    • 使用 html2pptx() 函数处理每个 HTML 文件
    • 使用 PptxGenJS API 在占位区域添加图表和表格
    • 使用 pptx.writeFile() 保存演示文稿
  4. 视觉验证:生成缩略图并检查布局问题
    • 创建缩略图网格:python scripts/thumbnail.py output.pptx workspace/thumbnails --cols 4
    • 阅读并仔细检查缩略图,留意以下问题:
      • 文本裁切:文本被标题栏、形状或幻灯片边缘裁切
      • 文本重叠:文本与其他文本或形状重叠
      • 位置问题:内容与幻灯片边界或其他元素过于接近
      • 对比度问题:文本与背景之间的对比度不足
    • 如果发现问题,请调整 HTML 的边距/间距/颜色,并重新生成演示文稿
    • 重复以上步骤,直到所有幻灯片的视觉效果都正确

编辑现有 PowerPoint 演示文稿

编辑现有 PowerPoint 演示文稿中的幻灯片时,需要使用原始 Office Open XML (OOXML) 格式。这包括解包 .pptx 文件、编辑 XML 内容,再重新打包。

工作流
  1. 必须 - 阅读整个文件:从头到尾完整阅读 ooxml.md(约 500 行)。**阅读此文件时绝不要设置范围限制。**在编辑演示文稿前,阅读完整文件内容,了解 OOXML 结构和编辑工作流的详细指南。
  2. 解包演示文稿:python ooxml/Scripts/unpack.py <office_file> <output_dir>
  3. 编辑 XML 文件(主要是 ppt/slides/slide{N}.xml 和相关文件)
  4. 关键:每次编辑后立即验证,并在继续之前修复所有验证错误:python ooxml/Scripts/validate.py <dir> --original <file>
  5. 打包最终演示文稿:python ooxml/Scripts/pack.py <input_directory> <office_file>

使用模板创建新的 PowerPoint 演示文稿

如果需要创建遵循现有模板设计的演示文稿,需要先复制并重新排列模板幻灯片,然后替换占位内容。

工作流
  1. 提取模板文本并创建视觉缩略图网格:

    • 提取文本:python -m markitdown template.pptx > template-content.md
    • 阅读 template-content.md:通读整个文件,了解模板演示文稿的内容。阅读此文件时绝不要设置范围限制。
    • 创建缩略图网格:python scripts/thumbnail.py template.pptx
    • 更多详情请参阅创建缩略图网格部分
  2. 分析模板并将清单保存到文件:

    • 视觉分析:查看缩略图网格,了解幻灯片布局、设计模式和视觉结构
    • 创建模板清单文件并保存为 template-inventory.md,内容如下:
      # 模板清单分析
      **幻灯片总数:[count]**
      **重要:幻灯片索引从 0 开始(第一页 = 0,最后一页 = count-1)**
      ## [类别名称]
      - 幻灯片 0:[可用时填写版式代码] - 描述/用途
      - 幻灯片 1:[版式代码] - 描述/用途
      - 幻灯片 2:[版式代码] - 描述/用途
      [... 必须逐一列出每张幻灯片及其索引 ...]
      
    • 使用缩略图网格:参考视觉缩略图,识别:
      • 版式模式(标题页、内容版式、章节分隔页)
      • 图片占位符的位置和数量
      • 幻灯片组之间的设计一致性
      • 视觉层级和结构
    • 此清单文件是下一步选择合适模板的必需文件
  3. 基于模板清单创建演示文稿大纲:

    • 查看第 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:结束页 + 文本)
      ]
      
  4. 使用 rearrange.py 复制、重排和删除幻灯片:

    • 使用 scripts/rearrange.py 脚本,按所需顺序创建新的演示文稿:
      python scripts/rearrange.py template.pptx working.pptx 0,34,34,50,52
      
    • 该脚本会自动复制重复的幻灯片、删除未使用的幻灯片并重新排序
    • 幻灯片索引从 0 开始(第一张幻灯片为 0,第二张为 1,依此类推)
    • 可以多次出现同一幻灯片索引,以复制该幻灯片
  5. 使用 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": "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")
      • 属性:输出中仅包含非默认值
  6. 生成替换文本并将数据保存到 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"
      • 替换脚本需要的是格式正确的段落,而不只是文本字符串
      • 重叠形状:优先选择 default_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
    • 正文:通常无需特殊属性
    • 引言:可能需要特殊的对齐方式或字体属性
  7. 使用 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 inventory
    
    ERROR: 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 幻灯片进行可视化分析,请通过以下两个步骤将其转换为图像:

  1. 将 PPTX 转换为 PDF:

    soffice --headless --convert-to pdf template.pptx
    
  2. 将 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 操作生成代码时:

  • 编写简洁的代码
  • 避免冗长的变量名和冗余操作
  • 避免不必要的打印语句

示例

示例 1:从头创建演示文稿

User: "Make a pitch deck for my startup idea"
→ Reads html2pptx.md for syntax
→ Creates HTML slides with proper styling and layout
→ Converts to PowerPoint, validates with thumbnails

示例 2:使用模板

User: "Create slides using this company template"
→ Extracts template inventory with thumbnail grid
→ Maps content to appropriate slide layouts
→ Replaces placeholder text, preserves formatting

示例 3:向现有演示文稿添加演讲者备注

User: "Add speaker notes to my presentation"
→ Unpacks PPTX, navigates to notesSlide XML files
→ Adds notes content to each slide
→ Repacks and validates the presentation

依赖项

所需依赖项(应已安装):

  • 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)

评论

支持 Markdown