mcpField
P
Pptx

Pptx

github.com/danielmiesslerドキュメント19.6k64 回インストール2 日前に更新
リポジトリ

Pptx について

Pptxは、.pptx形式のPowerPointプレゼンテーションを作成、編集、分析するスキルです。作業に応じて、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)
  • セキュリティルールとリポジトリの安全性に関するプロトコル
  • 応答形式の要件(絵文字を含む構造化形式)
  • エージェントのルーティングに使用する音声 ID(ElevenLabs)
  • 個人の好みと操作手順

🔀 このサブスキルを使う場面

明示的なトリガー

ユーザーのリクエストに以下が含まれる場合は、このサブスキルにルーティングしてください。

作成のトリガー:

  • 「プレゼンテーションを作成」「新しいプレゼンテーション」「スライドを作成」
  • 「PowerPoint を作成」「pptx を生成」
  • 「プレゼンテーションを一から作成」

編集のトリガー:

  • 「プレゼンテーションを編集」「スライドを修正」「PowerPoint を更新」
  • 「スライドの内容を変更」「pptx を編集」

テンプレートのトリガー:

  • 「プレゼンテーションのテンプレートを使う」「テンプレートに基づいて」
  • 「テンプレートのデザインを適用」「テンプレートのスライド」

デザインのトリガー:

  • 「プレゼンテーションのデザイン」「スライドのレイアウト」
  • 「発表者ノート」「スライドにノートを追加」
  • 「ピッチデッキ」「スライドデッキ」
文脈上のトリガー

以下に該当する場合は、このサブスキルにルーティングしてください。

  • .pptx ファイルを扱う場合
  • ユーザーが「PowerPoint」と言及した場合
  • ユーザーが「ピッチデッキ」または「スライドデッキ」と言及した場合
  • ユーザーが「keynote」と言及した場合(pptx にエクスポートする場合)
  • プレゼンテーション関連のファイルパスや操作を扱う場合
ワークフローのルーティング

このサブスキルに入ったら、適切なワークフローにルーティングしてください。

作成ワークフロー(html2pptx):

  • 「プレゼンテーションを作成」「新しいスライド」「一から作成」
  • テンプレートについて言及されていない
  • → html2pptx.md をすべて読み込み、html2pptx.js を使用する

テンプレートワークフロー:

  • 「テンプレートを使う」「テンプレートに基づいて」「テンプレートを適用」
  • テンプレートとして使う既存の pptx ファイルがある
  • → inventory.py を使った並べ替え/置換ワークフローに従う

編集ワークフロー(OOXML):

  • 「プレゼンテーションを編集」「既存のスライドを修正」
  • 既存の pptx の特定の内容を変更する必要がある
  • → ooxml.md をすべて読み込み、展開/パック用スクリプトを使用する

テキスト抽出ワークフロー:

  • 「テキストを抽出」「プレゼンテーションを読む」「この 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 プレゼンテーションを一から作成するときは、正確な配置で HTML スライドを PowerPoint に変換するため、html2pptx ワークフローを使用してください。

デザイン原則

重要:プレゼンテーションを作成する前に、内容を分析し、適切なデザイン要素を選んでください。

  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、本文は11pt)
  • 文字間隔を広くしたすべて大文字の見出し
  • 大きなディスプレイ書体で番号付きセクションを表現する
  • データ/統計/技術的な内容に等幅フォント(Courier New)を使用する
  • 情報量が多い箇所には幅の狭いフォント(Arial Narrow)を使用する
  • 強調する箇所にはアウトライン文字を使用する

グラフとデータのスタイル:

  • 重要なデータに単一のアクセントカラーを使用したモノクロのグラフ
  • 縦棒グラフではなく横棒グラフを使用する
  • 棒グラフではなくドットプロットを使用する
  • グリッド線を最小限にする、または使用しない
  • 凡例は使わず、要素に直接データラベルを付ける
  • 重要な指標は大きな数字で表示する

レイアウトの工夫:

  • テキストを重ねたフルブリード画像
  • ナビゲーション/コンテキスト用のサイドバー列(幅20~30%)
  • モジュール式のグリッドシステム(3×3、4×4のブロック)
  • ZパターンまたはFパターンでコンテンツを配置する
  • 色付きの図形の上にフローティングテキストボックスを配置する
  • 雑誌風の複数列レイアウト

背景の処理:

  • スライドの40~60%を占める単色のブロック
  • グラデーションの塗りつぶし(垂直または斜めのみ)
  • 背景を2色に分割する(斜めまたは垂直)
  • 端から端まで広がる色の帯
  • デザイン要素としてネガティブスペースを活用する
レイアウトのヒント

グラフや表を含むスライドを作成する場合:

  • 2列レイアウト(推奨):幅いっぱいにヘッダーを配置し、その下を2列に分けます。片方の列にはテキスト/箇条書き、もう片方の列には主要なコンテンツを配置します。これによりバランスがよくなり、グラフや表も読みやすくなります。各コンテンツタイプに合わせてスペースを最適化するため、列幅に差をつけたフレックスボックス(例:40%/60%)を使用します。
  • スライド全体を使うレイアウト:インパクトと読みやすさを最大限に高めるため、主要なコンテンツ(グラフ/表)をスライド全体に配置します。
  • 縦方向に積み重ねないでください:1列の中でテキストの下にグラフ/表を配置しないでください。読みやすさが損なわれ、レイアウトにも問題が生じます。
ワークフロー
  1. 必須 — ファイル全体を読む:html2pptx.md を最初から最後まで完全に読んでください。このファイルを読む際に、範囲を限定することは絶対にしないでください。プレゼンテーションの作成に進む前に、詳細な構文、重要な書式ルール、ベストプラクティスを把握するため、ファイルの内容をすべて読んでください。
  2. 各スライド用に、適切な寸法(例:16:9 の場合は 720pt × 405pt)の HTML ファイルを作成します
    • すべてのテキストコンテンツに <p>、<h1>〜<h6>、<ul>、<ol> を使用します
    • グラフや表を追加する領域には class="placeholder" を使用します(視認性を高めるため、灰色の背景で表示します)
    • 重要:グラデーションやアイコンは、まず Sharp を使用して PNG 画像にラスタライズしてから、HTML 内で参照します
    • レイアウト:グラフ、表、画像を含むスライドは、読みやすさを高めるため、全画面レイアウトまたは 2 列レイアウトを使用します
  3. html2pptx.js ライブラリを使用して HTML スライドを PowerPoint に変換し、プレゼンテーションを保存する JavaScript ファイルを作成して実行します
    • 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 で利用可能なテンプレートを確認します。
    • 最初のスライドには、イントロまたはタイトル用のテンプレートを選択します。これは最初のテンプレートのいずれかである必要があります。
    • その他のスライドには、安全なテキストベースのレイアウトを選択します。
    • 重要: レイアウト構造を実際のコンテンツに一致させる:
      • 1 カラムレイアウト: 統一されたナラティブまたは単一のトピックに使用します
      • 2 カラムレイアウト: 正確に 2 つの異なる項目/概念がある場合にのみ使用します
      • 3 カラムレイアウト: 正確に 3 つの異なる項目/概念がある場合にのみ使用します
      • 画像 + テキストのレイアウト: 挿入する実際の画像がある場合にのみ使用します
      • 引用レイアウト: 人物からの実際の引用(出典付き)にのみ使用し、強調には決して使用しないでください
      • コンテンツよりもプレースホルダーが多いレイアウトは決して使用しないでください
      • 2 つの項目がある場合、それらを 3 カラムレイアウトに無理に押し込まないでください
      • 4 つ以上の項目がある場合は、複数のスライドに分割するか、リスト形式の使用を検討してください
    • レイアウトを選択する前に、実際のコンテンツの数を数えてください
    • 選択したレイアウトの各プレースホルダーが意味のあるコンテンツで埋められることを確認してください
    • 各コンテンツセクションに対して、最良のレイアウトを表す 1 つのオプションを選択します。
    • コンテンツと、利用可能なデザインを活用するテンプレートマッピングを outline.md に保存します
    • テンプレートマッピングの例:
      # Template slides to use (0-based indexing)
      # WARNING: Verify indices are within range! Template with 73 slides has indices 0-72
      # Mapping: slide numbers from outline -> template slide indices
      template_mapping = [
          0,   # Use slide 0 (Title/Cover)
          34,  # Use slide 34 (B1: Title and body)
          34,  # Use slide 34 again (duplicate for second B1)
          50,  # Use slide 50 (E1: Quote)
          54,  # Use slide 54 (F2: Closing + Text)
      ]
      
  4. rearrange.py を使用してスライドを複製、並べ替え、削除する:

    • scripts/rearrange.py スクリプトを使用して、希望する順序でスライドを含む新しいプレゼンテーションを作成します:
      python scripts/rearrange.py template.pptx working.pptx 0,34,34,50,52
      
    • このスクリプトは、繰り返しスライドの複製、未使用スライドの削除、並べ替えを自動的に処理します
    • スライドインデックスは 0 ベースです(最初のスライドは 0、2 番目は 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",  // or null for non-placeholders
              "left": 1.5,                  // position in inches
              "top": 2.0,
              "width": 7.5,
              "height": 1.2,
              "paragraphs": [
                {
                  "text": "Paragraph text",
                  // Optional properties (only included when non-default):
                  "bullet": true,           // explicit bullet detected
                  "level": 0,               // only included when bullet is true
                  "alignment": "CENTER",    // CENTER, RIGHT (not LEFT)
                  "space_before": 10.0,     // space before paragraph in points
                  "space_after": 6.0,       // space after paragraph in points
                  "line_spacing": 22.4,     // line spacing in points
                  "font_name": "Arial",     // from first run
                  "font_size": 14.0,        // in points
                  "bold": true,
                  "italic": false,
                  "underline": false,
                  "color": "FF0000"         // RGB color
                }
              ]
            }
          }
        }
      
    • 主な機能:

      • スライド:「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」を指定しない限り、一覧にあるすべてのテキスト図形がクリアされます。
    • 内容が必要な図形には、「replacement_paragraphs」ではなく「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」を設定します。
    • 本文:通常、特別なプロパティは必要ありません。
    • 引用:配置やフォントのプロパティを指定する場合があります。
  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 から始まります(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 スライドを視覚的に分析するには、次の 2 段階の手順で画像に変換します。

  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 操作用のコードを生成する場合:

  • 簡潔なコードを書く
  • 冗長な変数名や重複する処理を避ける
  • 不要な print 文を避ける

例

例 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(PDF を画像に変換する pdftoppm 用)
  • defusedxml:pip install defusedxml(安全な XML 解析用)

コメント