pptx
PPTXの作成、編集、分析
概要
ユーザーは.pptxファイルの作成、編集、または内容の分析を依頼する場合があります。.pptxファイルは本質的にXMLファイルとその他のリソースを含むZIPアーカイブであり、読み取りや編集が可能です。タスクに応じて異なるツールとワークフローが利用可能です。
コンテンツの読み取りと分析
テキスト抽出
プレゼンテーションのテキスト内容を読み取るだけの場合は、ドキュメントをmarkdownに変換します:
# ドキュメントをmarkdownに変換
python -m markitdown path-to-file.pptx
Raw XMLアクセス
コメント、発表者ノート、スライドレイアウト、アニメーション、デザイン要素、複雑な書式設定にはRaw XMLアクセスが必要です。これらの機能には、プレゼンテーションを展開してRaw 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/- 画像とその他のメディアファイル
タイポグラフィと色の抽出
模倣するデザイン例がある場合: 以下の方法を使用して、まずプレゼンテーションのタイポグラフィと色を分析します:
- テーマファイルを読む:
ppt/theme/theme1.xmlで色(<a:clrScheme>)とフォント(<a:fontScheme>)を確認 - スライドコンテンツをサンプリング:
ppt/slides/slide1.xmlで実際のフォント使用(<a:rPr>)と色を調べる - パターンを検索: grepを使用してすべてのXMLファイルで色(
<a:solidFill>、<a:srgbClr>)とフォント参照を検索
テンプレートなしで新規PowerPointプレゼンテーションを作成
新規PowerPointプレゼンテーションをゼロから作成する場合は、html2pptxワークフローを使用してHTMLスライドを正確な位置指定でPowerPointに変換します。
デザイン原則
重要: プレゼンテーションを作成する前に、コンテンツを分析して適切なデザイン要素を選択してください:
- 題材を考慮: このプレゼンテーションは何についてですか?どのようなトーン、業界、または雰囲気を示唆していますか?
- ブランディングを確認: ユーザーが会社/組織に言及している場合、そのブランドカラーとアイデンティティを考慮
- パレットをコンテンツに合わせる: 題材を反映する色を選択
- アプローチを説明: コードを書く前にデザインの選択を説明
要件:
- ✅ コードを書く前にコンテンツに基づいたデザインアプローチを説明
- ✅ Webセーフフォントのみ使用: Arial, Helvetica, Times New Roman, Georgia, Courier New, Verdana, Tahoma, Trebuchet MS, Impact
- ✅ サイズ、太さ、色で明確な視覚的階層を作成
- ✅ 読みやすさを確保: 強いコントラスト、適切なサイズのテキスト、クリーンな配置
- ✅ 一貫性を保つ: スライド全体でパターン、間隔、視覚言語を繰り返す
カラーパレットの選択
創造的に色を選ぶ:
- デフォルトを超えて考える: この特定のトピックに本当に合う色は何ですか?自動的な選択を避ける
- 複数の角度を考慮: トピック、業界、雰囲気、エネルギーレベル、対象者、ブランドアイデンティティ(言及されている場合)
- 冒険的に: 予想外の組み合わせを試す - ヘルスケアのプレゼンテーションが緑である必要はなく、金融が紺色である必要もない
- パレットを構築: 一緒に機能する3-5色を選ぶ(主要色 + サポート色 + アクセント)
- コントラストを確保: テキストは背景上で明確に読める必要がある
カラーパレット例(創造性を刺激するために使用 - 1つを選ぶか、適応するか、独自に作成):
- クラシックブルー: ディープネイビー(#1C2833)、スレートグレー(#2E4053)、シルバー(#AAB7B8)、オフホワイト(#F4F6F6)
- ティール&コーラル: ティール(#5EA8A7)、ディープティール(#277884)、コーラル(#FE4447)、白(#FFFFFF)
- ボールドレッド: レッド(#C0392B)、ブライトレッド(#E74C3C)、オレンジ(#F39C12)、イエロー(#F1C40F)、グリーン(#2ECC71)
- ウォームブラッシュ: モーブ(#A49393)、ブラッシュ(#EED6D3)、ローズ(#E8B4B8)、クリーム(#FAF7F2)
- バーガンディラグジュアリー: バーガンディ(#5D1D2E)、クリムゾン(#951233)、ラスト(#C15937)、ゴールド(#997929)
ビジュアルディテールオプション
ジオメトリックパターン:
- 水平ではなく斜めのセクション区切り
- 非対称な列幅(30/70, 40/60, 25/75)
- 90°または270°で回転したテキストヘッダー
- 画像用の円形/六角形フレーム
- コーナーの三角形アクセントシェイプ
- 奥行きのための重なるシェイプ
ボーダー&フレーム処理:
- 片側のみの太い単色ボーダー(10-20pt)
- コントラストのある色の二重線ボーダー
- フルフレームの代わりにコーナーブラケット
- L字型ボーダー(上+左または下+右)
- ヘッダー下のアンダーラインアクセント(3-5pt太さ)
タイポグラフィ処理:
- 極端なサイズコントラスト(72ptヘッドライン vs 11pt本文)
- ワイドレタースペースの全大文字ヘッダー
- オーバーサイズ表示タイプの番号付きセクション
- データ/統計/技術コンテンツ用のモノスペース(Courier New)
- 密な情報用のコンデンスドフォント(Arial Narrow)
- 強調用のアウトラインテキスト
レイアウトのヒント
チャートやテーブルを含むスライドを作成する場合:
- 2列レイアウト(推奨): 全幅にわたるヘッダーを使用し、その下に2列を配置 - 一方にテキスト/箇条書き、もう一方に注目コンテンツ。これによりバランスが良くなり、チャート/テーブルが読みやすくなる。各コンテンツタイプ用にスペースを最適化するため、不等列幅(例: 40%/60%分割)のフレックスボックスを使用
- フルスライドレイアウト: 注目コンテンツ(チャート/テーブル)をスライド全体に表示して最大のインパクトと読みやすさを実現
- 縦に積み重ねない: チャート/テーブルをテキストの下に単一列で配置しない - これは読みやすさとレイアウトの問題を引き起こす
ワークフロー
- 必須 - ファイル全体を読む:
html2pptx.mdを最初から最後まで完全に読んでください。このファイルを読む際に範囲制限を設定しないでください。 プレゼンテーション作成を進める前に、詳細な構文、重要な書式設定ルール、ベストプラクティスのためにファイル全体を読んでください。 - 適切なサイズ(16:9の場合は720pt × 405ptなど)で各スライド用のHTMLファイルを作成
- すべてのテキストコンテンツに
<p>,<h1>-<h6>,<ul>,<ol>を使用 - チャート/テーブルを追加する領域に
class="placeholder"を使用(視認性のためにグレー背景でレンダリング) - 重要: まずSharpを使用してグラデーションとアイコンをPNG画像にラスタライズし、その後HTMLで参照
- レイアウト: チャート/テーブル/画像を含むスライドには、より良い読みやすさのためにフルスライドレイアウトまたは2列レイアウトを使用
- すべてのテキストコンテンツに
html2pptx.jsライブラリを使用してHTMLスライドをPowerPointに変換し、プレゼンテーションを保存するJavaScriptファイルを作成・実行html2pptx()関数を使用して各HTMLファイルを処理- PptxGenJS APIを使用してプレースホルダー領域にチャートとテーブルを追加
pptx.writeFile()を使用してプレゼンテーションを保存
- ビジュアル検証: サムネイルを生成してレイアウトの問題を確認
- サムネイルグリッドを作成:
python scripts/thumbnail.py output.pptx workspace/thumbnails --cols 4 - サムネイル画像を読み取り、以下を注意深く確認:
- テキスト切れ: ヘッダーバー、シェイプ、またはスライドエッジによるテキスト切れ
- テキスト重なり: 他のテキストやシェイプとのテキスト重なり
- 位置の問題: スライド境界や他の要素に近すぎるコンテンツ
- コントラストの問題: テキストと背景間のコントラスト不足
- 問題が見つかった場合、HTMLのマージン/間隔/色を調整してプレゼンテーションを再生成
- すべてのスライドが視覚的に正しくなるまで繰り返す
- サムネイルグリッドを作成:
既存のPowerPointプレゼンテーションを編集
既存のPowerPointプレゼンテーションでスライドを編集する場合は、Raw Office Open XML(OOXML)形式で作業する必要があります。これには.pptxファイルを展開し、XMLコンテンツを編集し、再パックする必要があります。
ワークフロー
- 必須 - ファイル全体を読む:
ooxml.md(約500行)を最初から最後まで完全に読んでください。このファイルを読む際に範囲制限を設定しないでください。 プレゼンテーション編集の前に、OOXML構造と編集ワークフローの詳細なガイダンスについてファイル全体を読んでください。 - プレゼンテーションを展開:
python ooxml/scripts/unpack.py <office_file> <output_dir> - XMLファイルを編集(主に
ppt/slides/slide{N}.xmlと関連ファイル) - 重要: 各編集後すぐに検証し、続行前にバリデーションエラーを修正:
python ooxml/scripts/validate.py <dir> --original <file> - 最終プレゼンテーションをパック:
python ooxml/scripts/pack.py <input_directory> <office_file>
テンプレートを使用して新規PowerPointプレゼンテーションを作成
既存テンプレートのデザインに従うプレゼンテーションを作成する必要がある場合は、テンプレートスライドを複製・再配置してからプレースホルダーコンテキストを置き換えます。
ワークフロー
-
テンプレートテキストを抽出しビジュアルサムネイルグリッドを作成:
- テキストを抽出:
python -m markitdown template.pptx > template-content.md template-content.mdを読む: テンプレートプレゼンテーションの内容を理解するためにファイル全体を読んでください。このファイルを読む際に範囲制限を設定しないでください。- サムネイルグリッドを作成:
python scripts/thumbnail.py template.pptx - 詳細はサムネイルグリッドの作成セクションを参照
- テキストを抽出:
-
テンプレートを分析してインベントリをファイルに保存:
- ビジュアル分析: サムネイルグリッドをレビューしてスライドレイアウト、デザインパターン、ビジュアル構造を理解
template-inventory.mdにテンプレートインベントリファイルを作成して保存:# テンプレートインベントリ分析 **総スライド数: [数]** **重要: スライドは0インデックス(最初のスライド = 0、最後のスライド = count-1)** ## [カテゴリ名] - スライド0: [利用可能な場合はレイアウトコード] - 説明/目的 - スライド1: [レイアウトコード] - 説明/目的 - スライド2: [レイアウトコード] - 説明/目的 [... すべてのスライドを個別にインデックス付きでリスト ...]
-
テンプレートインベントリに基づいてプレゼンテーションアウトラインを作成:
- ステップ2で利用可能なテンプレートをレビュー
- 最初のスライドにはイントロまたはタイトルテンプレートを選択
- 他のスライドには安全なテキストベースのレイアウトを選択
- 重要: レイアウト構造を実際のコンテンツに合わせる
- 選択したレイアウトをコンテンツマッピングと共に
outline.mdに保存
-
rearrange.pyを使用してスライドを複製、並べ替え、削除:python scripts/rearrange.py template.pptx working.pptx 0,34,34,50,52 -
inventory.pyスクリプトを使用してすべてのテキストを抽出:python scripts/inventory.py working.pptx text-inventory.json- text-inventory.jsonを読む: すべてのシェイプとそのプロパティを理解するためにtext-inventory.jsonファイル全体を読んでください。
-
置換テキストを生成してJSONファイルにデータを保存
- 前のステップのテキストインベントリに基づいて置換コンテンツを生成
- 更新されたインベントリを
replacement-text.jsonに保存
-
replace.pyスクリプトを使用して置換を適用python scripts/replace.py working.pptx replacement-text.json output.pptx
サムネイルグリッドの作成
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 - 列の調整:
--cols 4(範囲: 3-6、グリッドあたりのスライド数に影響) - グリッド制限: 3列 = 12スライド/グリッド、4列 = 20、5列 = 30、6列 = 42
- スライドはゼロインデックス(スライド0、スライド1など)
スライドを画像に変換
PowerPointスライドを視覚的に分析するには、2段階のプロセスで画像に変換します:
-
PPTXをPDFに変換:
soffice --headless --convert-to pdf template.pptx -
PDFページをJPEG画像に変換:
pdftoppm -jpeg -r 150 template.pdf slideこれにより
slide-1.jpg、slide-2.jpgなどのファイルが作成されます。
コードスタイルガイドライン
重要: 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(pdftoppmでPDFを画像に変換) - defusedxml:
pip install defusedxml(安全なXML解析用)