PPTX演示文稿处理Skill pptx

该技能专注于使用编程和工具自动化处理PowerPoint演示文稿文件,包括创建新演示文稿、编辑现有内容、分析文件结构、提取文本和设计元素等。支持XML处理、设计原则应用、自动化脚本编写,适用于演示文稿的批量处理、定制设计和内容管理。关键词:pptx, PowerPoint, 演示文稿, XML编辑, 设计自动化, 文本提取, 幻灯片制作

其他 0 次安装 0 次浏览 更新于 3/18/2026

名称: 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/ - 图像和其他媒体文件

字体和颜色提取

当给定示例设计进行模仿时:总是首先使用以下方法分析演示文稿的字体和颜色:

  1. 阅读主题文件:检查ppt/theme/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. 陈述您的方法:在编写代码前解释您的设计选择

要求

  • ✅ 在编写代码前陈述基于内容的设计方法
  • ✅ 仅使用网页安全字体: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标题 vs 11pt正文)
  • 全大写标题与宽字母间距
  • 超大显示类型用于编号部分
  • 等宽字体(Courier New)用于数据/统计/技术内容
  • 紧缩字体(Arial Narrow)用于密集信息
  • 轮廓文本用于强调

图表与数据样式

  • 单色图表与单一强调色用于关键数据
  • 水平条形图而非垂直
  • 点图而非条形图
  • 最小化网格线或无网格线
  • 数据标签直接置于元素上(无图例)
  • 超大数字用于关键指标

布局创新

  • 全出血图像与文本叠加
  • 侧边栏列(20-30%宽度)用于导航/上下文
  • 模块化网格系统(3×3、4×4块)
  • Z模式或F模式内容流
  • 浮动文本框置于彩色形状上
  • 杂志风格多列布局

背景处理

  • 实色块占据40-60%的幻灯片
  • 渐变填充(仅垂直或对角线)
  • 分割背景(两种颜色,对角线或垂直)
  • 边到边颜色带
  • 负空间作为设计元素

布局提示

当创建包含图表或表格的幻灯片时

  • 双列布局(首选):使用跨越全宽的标题,然后下方两列 - 文本/项目符号在一列,特色内容在另一列。这提供更好的平衡并使图表/表格更易读。使用弹性盒与不等列宽(例如,40%/60%分割)以优化每个内容类型的空间。
  • 全幻灯片布局:让特色内容(图表/表格)占据整个幻灯片以最大化影响和可读性
  • 切勿垂直堆叠:不要在单列中将图表/表格置于文本下方 - 这导致差的可读性和布局问题

工作流

  1. 强制性 - 阅读整个文件:从始至终完全阅读html2pptx.md。**切勿设置任何范围限制当阅读此文件时。**阅读完整文件内容以获取详细语法、关键格式规则和最佳实践,然后进行演示文稿创建。
  2. 为每个幻灯片创建HTML文件,具有适当尺寸(例如,720pt × 405pt为16:9)
    • 使用<p><h1>-<h6><ul><ol>用于所有文本内容
    • 使用class="placeholder"用于将添加图表/表格的区域(渲染为灰色背景以可见)
    • 关键:首先使用Sharp将渐变和图标栅格化为PNG图像,然后在HTML中引用
    • 布局:对于包含图表/表格/图像的幻灯片,使用全幻灯片布局或双列布局以获得更好的可读性
  3. 创建并运行JavaScript文件使用html2pptx.js库将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创建并保存模板清单文件,包含:
      # 模板清单分析
      **总幻灯片数: [计数]**
      **重要: 幻灯片为零索引(第一幻灯片 = 0, 最后一幻灯片 = 计数-1)**
      
      ## [类别名称]
      - 幻灯片 0: [布局代码如可用] - 描述/目的
      - 幻灯片 1: [布局代码] - 描述/目的
      - 幻灯片 2: [布局代码] - 描述/目的
      [... 每个幻灯片必须单独列出其索引 ...]
      
    • 使用缩略图网格:参考视觉缩略图以识别:
      • 布局模式(标题幻灯片、内容布局、部分分隔器)
      • 图像占位符位置和计数
      • 设计一致性跨幻灯片组
      • 视觉层次和结构
    • 此清单文件在下一步选择适当模板时必需
  3. 基于模板清单创建演示文稿大纲

    • 从步骤2中查看可用模板。
    • 为第一幻灯片选择介绍或标题模板。这应该是首批模板之一。
    • 为其他幻灯片选择安全、基于文本的布局。
    • 关键: 匹配布局结构与实际内容
      • 单列布局:用于统一叙述或单一主题
      • 双列布局:仅当您有恰好2个不同项目/概念时使用
      • 三列布局:仅当您有恰好3个不同项目/概念时使用
      • 图像+文本布局:仅当您有实际图像要插入时使用
      • 引用布局:仅用于实际人物引用(带有归属),切勿用于强调
      • 切勿使用有更多占位符比您有内容的布局
      • 如果您有2个项目,不要强制它们进入3列布局
      • 如果您有4+个项目,考虑拆分为多个幻灯片或使用列表格式
    • 在选择布局前计算您的实际内容件数
    • 验证所选布局中的每个占位符将填充有意义的内容
    • 为每个内容部分选择一个代表最佳布局的选项。
    • 保存outline.md与内容及模板映射,利用可用设计
    • 示例模板映射:
      # 使用的模板幻灯片(零基索引)
      # 警告: 验证索引在范围内!有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,第二为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": "段落文本",
                  // 可选属性(仅当非默认时包括):
                  "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_beforespace_afterline_spacing以点计(仅当设置时包括)
      • 颜色color用于RGB(例如,“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"
      • 颜色:使用"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
    • 正文文本:通常不需要特殊属性
    • 引用:可能有特殊对齐或字体属性
  7. 使用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.jpgthumbnails-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、幻灯片1等)

使用案例

  • 模板分析:快速理解幻灯片布局和设计模式
  • 内容审查:整个演示文稿的视觉概述
  • 导航参考:通过视觉外观找到特定幻灯片
  • 质量检查:验证所有幻灯片正确格式化

示例

# 基本使用
python scripts/thumbnail.py presentation.pptx

# 组合选项: 自定义名称、列
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.jpgslide-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操作代码时:

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

依赖项

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

  • markitdownpip install "markitdown[pptx]"(用于从演示文稿提取文本)
  • pptxgenjsnpm install -g pptxgenjs(用于通过html2pptx创建演示文稿)
  • playwrightnpm install -g playwright(用于html2pptx中的HTML渲染)
  • react-iconsnpm install -g react-icons react react-dom(用于图标)
  • sharpnpm install -g sharp(用于SVG栅格化和图像处理)
  • LibreOfficesudo apt-get install libreoffice(用于PDF转换)
  • Popplersudo apt-get install poppler-utils(用于pdftoppm转换PDF到图像)
  • defusedxmlpip install defusedxml(用于安全XML解析)