mcpField
P
pptx

pptx

github.com/jd-opensourceドキュメント31538 回インストール28 週間前に更新
リポジトリ

pptx について

pptx は、PowerPoint プレゼンテーションの作成、編集、分析を支援するスキルです。テキスト抽出、OOXML の確認、HTML からのスライド作成、既存ファイルの編集、テンプレート適用に分けた手順を提供します。

主な機能

  1. 01プレゼンテーションのテキストを Markdown に抽出
  2. 02OOXML によるスライド内容とデザインの確認
  3. 03HTML スライドからプレゼンテーションを作成
  4. 04OOXML による既存プレゼンテーションの編集
  5. 05テンプレート分析とスライドサムネイル作成

活用シーン

  1. 01プレゼンテーションからテキストを抽出
  2. 02テンプレートを使わずにスライドを作成
  3. 03既存デッキのスライド XML を編集
  4. 04プレゼンテーションをテンプレートに合わせる

インストール

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

$npx skills add https://github.com/jd-opensource/joysafeter --skill pptx

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

同梱ファイル

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

html2pptx.md
LICENSE.txt
ooxml.md
ooxml/schemas/ecma/fouth-edition/
opc-contentTypes.xsd
opc-coreProperties.xsd
opc-digSig.xsd
opc-relationships.xsd
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

詳細

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. テーマファイルを読む:色(<a:clrScheme>)とフォント(<a:fontScheme>)を確認するため、ppt/theme/theme1.xml を確認します
  2. スライドの内容をサンプリングする:実際に使用されているフォント(<a:rPr>)と色を確認するため、ppt/slides/slide1.xml を調べます
  3. パターンを検索する:すべての XML ファイルを対象に grep を使って、色(<a:solidFill>、<a:srgbClr>)やフォントの参照を検索します

テンプレートを使わずに新しい PowerPoint プレゼンテーションを作成する

新しい PowerPoint プレゼンテーションを一から作成する場合は、正確な位置に配置した HTML スライドを PowerPoint に変換するために、html2pptx ワークフローを使用します。

デザイン原則

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

  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%を占める単色のブロック
  • グラデーションの塗りつぶし(垂直または斜めのみ)
  • 背景を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)**
      ## [カテゴリ名]
      - スライド 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 から始まります(スライド 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 スライドを視覚的に分析するには、次の 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 解析用)

コメント