mcpField
P
pptx

pptx

github.com/iofficeaiドキュメント33.9k108 回インストール1 週間前に更新
リポジトリ

pptx について

pptxは、PowerPointプレゼンテーションの作成、編集、分析を支援するスキルです。テキスト抽出、OOXMLの調査・編集、HTMLからのスライド作成、視覚的な検証を扱います。

主な機能

  1. 01プレゼンテーションのテキストをMarkdownに抽出
  2. 02ノート、コメント、レイアウト、XMLを調査
  3. 03HTMLからスライドを作成
  4. 04OOXMLでプレゼンテーションを編集
  5. 05サムネイルを生成して視覚確認

活用シーン

  1. 01.pptxからテキストを抽出
  2. 02発表者ノートやスライドコメントを確認
  3. 03HTMLスライドからプレゼンテーションを作成
  4. 04既存資料を編集してレイアウトを検証

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/iofficeai/aionui --skill pptx

インストール後、Claude Code で/pptxを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

LICENSE.txt
html2pptx.md
ooxml.md
ooxml/schemas/ISO-IEC29500-4_2016/
dml-chart.xsd
dml-chartDrawing.xsd
dml-diagram.xsd
dml-lockedCanvas.xsd
dml-main.xsd
dml-picture.xsd
dml-spreadsheetDrawing.xsd
dml-wordprocessingDrawing.xsd
pml.xsd
shared-additionalCharacteristics.xsd
shared-bibliography.xsd
shared-commonSimpleTypes.xsd
shared-customXmlDataProperties.xsd
shared-customXmlSchemaProperties.xsd
shared-documentPropertiesCustom.xsd
shared-documentPropertiesExtended.xsd
shared-documentPropertiesVariantTypes.xsd
shared-math.xsd
shared-relationshipReference.xsd
sml.xsd
vml-main.xsd
vml-officeDrawing.xsd
vml-presentationDrawing.xsd
vml-spreadsheetDrawing.xsd
vml-wordprocessingDrawing.xsd
wml.xsd
xml.xsd

詳細

PPTX の作成・編集・分析

概要

ユーザーから .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/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. アプローチを明示する: コードを書く前に、デザイン上の選択を説明する

要件:

  • ✅ コードを書く前に、内容に基づいたデザインアプローチを明示する
  • ✅ Web セーフフォントのみを使用する: Arial、Helvetica、Times New Roman、Georgia、Courier New、Verdana、Tahoma、Trebuchet MS、Impact
  • ✅ サイズ、太さ、色によって明確な視覚的階層を作る
  • ✅ 読みやすさを確保する: 強いコントラスト、適切なサイズのテキスト、整ったレイアウト
  • ✅ 一貫性を保つ: スライド全体でパターン、余白、ビジュアル言語を繰り返し使用する
カラーパレットの選択

創造的に色を選ぶ:

  • 既定の選択にとらわれない: このトピックに本当に合う色は何か?自動的な選択は避けましょう。
  • 複数の観点を考慮する: トピック、業界、雰囲気、エネルギーレベル、対象読者、ブランドアイデンティティ(言及がある場合)
  • 大胆に試す: 意外な組み合わせを試しましょう。ヘルスケアのプレゼンテーションが緑である必要はなく、金融が紺色である必要もありません。
  • パレットを構築する: 互いに調和する3〜5色を選びましょう(主要色+補助色+アクセントカラー)。
  • コントラストを確保する: テキストは背景の上で明確に読めなければなりません。

カラーパレットの例(創造性のヒントとして使ってください。1つを選ぶ、アレンジする、または独自に作成してください):

  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 ファイルを作成し、実行してプレゼンテーションを保存します
    • 各 HTML ファイルを処理するには html2pptx() 関数を使用します
    • 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)**
      ## [Category Name]
      
      - Slide 0: [Layout code if available] - Description/purpose
      - Slide 1: [Layout code] - Description/purpose
      - Slide 2: [Layout code] - Description/purpose
        [... EVERY slide must be listed individually with its index ...]
      
    • サムネイルグリッドの利用: ビジュアルのサムネイルを参照して、次の点を確認します:

      • レイアウトのパターン(タイトルスライド、コンテンツレイアウト、セクション区切り)
      • 画像プレースホルダーの位置と数
      • スライドグループ間のデザインの一貫性
      • ビジュアルの階層と構造
    • このインベントリファイルは、次のステップで適切なテンプレートを選択するために必須です

  3. テンプレートのインベントリに基づいてプレゼンテーションのアウトラインを作成:

    • ステップ2で用意したテンプレートを確認します。
    • 最初のスライドには、導入用またはタイトル用のテンプレートを選択します。これは最初のほうのテンプレートの一つである必要があります。
    • それ以外のスライドには、安全なテキストベースのレイアウトを選択します。
    • 重要: レイアウトの構造を実際のコンテンツに合わせること:
      • 1列レイアウト: 一貫した流れのある内容または単一のトピックに使用します
      • 2列レイアウト: 明確に区別される項目・概念がちょうど2つある場合にのみ使用します
      • 3列レイアウト: 明確に区別される項目・概念がちょうど3つある場合にのみ使用します
      • 画像+テキストのレイアウト: 挿入する実際の画像がある場合にのみ使用します
      • 引用レイアウト: 人物による実際の引用(出典付き)にのみ使用し、強調目的では決して使用しません
      • コンテンツの数より多いプレースホルダーを持つレイアウトは決して使用しないこと
      • 項目が2つしかない場合、3列レイアウトに無理に当てはめないこと
      • 項目が4つ以上ある場合は、複数のスライドに分割するか、リスト形式の使用を検討すること
    • レイアウトを選択する前に、実際のコンテンツの数を数えること
    • 選択したレイアウトの各プレースホルダーに、意味のあるコンテンツが入ることを確認すること
    • コンテンツのセクションごとに、最も適したレイアウトを1つ選択すること
    • 利用可能なデザインを活用した、コンテンツとテンプレートの対応関係を含めて outline.md を保存すること
    • テンプレート対応の例:
      # 使用するテンプレートのスライド(0始まりのインデックス)
      # 警告: インデックスが範囲内であることを確認すること! 73枚のスライドを持つテンプレートのインデックスは 0〜72 です
      # 対応関係: アウトラインのスライド番号 -> テンプレートのスライドインデックス
      template_mapping = [
          0,   # スライド0を使用(タイトル/表紙)
          34,  # スライド34を使用(B1: タイトルと本文)
          34,  # スライド34を再度使用(2つ目の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、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", // または、プレースホルダー以外の場合は 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": [
      {
        "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 列、1 グリッドあたり最大 30 スライド(5×6)
  • カスタムプレフィックス: python scripts/thumbnail.py template.pptx my-grid
    • 注: 特定のディレクトリに出力したい場合は、出力プレフィックスにパスを含めてください(例: workspace/my-grid)
  • 列数の調整: --cols 4(範囲: 3〜6、1 グリッドあたりのスライド数に影響)
  • グリッドの上限: 3 列 = 1 グリッドあたり 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 文は避けてください

依存関係

必要な依存関係(すでにインストールされているはずです):

  • 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 パース用)

コメント