PPTXの作成、編集、分析
概要
ユーザーから.pptxファイルの作成、編集、または内容の分析を依頼される場合があります。.pptxファイルは基本的にZIPアーカイブであり、XMLファイルやその他のリソースが含まれており、読み取りや編集が可能です。タスクごとに様々なツールとワークフローが用意されています。
読み取りと分析
テキスト抽出
プレゼンテーションのテキスト内容を読み取るだけで良い場合は、ドキュメントをMarkdownに変換します:
# ドキュメントを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/- 画像やその他のメディアファイル
フォントと色の抽出
模倣するデザインのサンプルが与えられた場合: 以下の方法を使用して、まずプレゼンテーションのフォントと色を分析します。
- テーマファイルを読む:
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に変換します。
デザインの原則
重要: プレゼンテーションを作成する前に、内容を分析し適切なデザイン要素を選択してください:
- 主題を考慮する: このプレゼンテーションは何についてですか?どんなトーン、業界、雰囲気が示唆されていますか?
- ブランディングを確認する: ユーザーが会社/組織に言及している場合は、そのブランドカラーとアイデンティティを考慮する
- パレットを内容に合わせる: 主題を反映する色を選択する
- アプローチを説明する: コードを書く前に、デザインの選択を説明する
要件:
- コードを書く前に、内容に基づいたデザインアプローチを説明してください
- ウェブセーフフォントのみを使用する: Arial、Helvetica、Times New Roman、Georgia、Courier New、Verdana、Tahoma、Trebuchet MS、Impact
- サイズ、太さ、色を通じて明確な視覚的階層を作成する
- 読みやすさを確保する: 強いコントラスト、適切なサイズのテキスト、クリーンな配置
- 一貫性を保つ: スライド間でパターン、間隔、視覚言語を繰り返す
カラーパレットの選択
色を創造的に選ぶ:
- デフォルトを超えて考える: この特定のトピックに本当に合う色は何ですか?オートパイロットの選択は避けてください。
- 複数の角度を考慮する: トピック、業界、ムード、エネルギーレベル、ターゲットオーディエンス、ブランドアイデンティティ(言及されている場合)
- 冒険心を持つ: 意外な組み合わせを試す - ヘルスケアのプレゼンテーションが緑色である必要はなく、金融が濃紺である必要もありません
- パレットを構築する: 一緒に機能する3〜5色を選ぶ(支配的な色 + サポートカラー + アクセント)
- コントラストを確保する: テキストが背景上で明確に読み取れること
カラーパレットの例(創造性を刺激するために使用 - 選択、適合、または独自のものを作成):
- クラシックブルー: 濃紺 (#1C2833)、スレートグレー (#2E4053)、シルバー (#AAB7B8)、オフホワイト (#F4F6F6)
- ティール&コーラル: ティール (#5EA8A7)、ディープティール (#277884)、コーラル (#FE4447)、ホワイト (#FFFFFF)
- ボールドレッド: レッド (#C0392B)、ブライトレッド (#E74C3C)、オレンジ (#F39C12)、イエロー (#F1C40F)、グリーン (#2ECC71)
- ウォームブラッシュ: モーヴ (#A49393)、ブラッシュ (#EED6D3)、ローズ (#E8B4B8)、クリーム (#FAF7F2)
- バーガンディラグジュアリー: バーガンディ (#5D1D2E)、クリムゾン (#951233)、ラスト (#C15937)、ゴールド (#997929)
- ディープパープル&エメラルド: パープル (#B165FB)、ダークブルー (#181B24)、エメラルド (#40695B)、ホワイト (#FFFFFF)
- クリーム&フォレストグリーン: クリーム (#FFE1C7)、フォレストグリーン (#40695B)、ホワイト (#FCFCFC)
- ピンク&パープル: ピンク (#F8275B)、コーラル (#FF574A)、ローズ (#FF737D)、パープル (#3D2F68)
- ライム&プラム: ライム (#C5DE82)、プラム (#7C3A5F)、コーラル (#FD8C6E)、ブルーグレー (#98ACB5)
- ブラック&ゴールド: ゴールド (#BF9A4A)、ブラック (#000000)、クリーム (#F4F6F6)
- セージ&テラコッタ: セージ (#87A96B)、テラコッタ (#E07A5F)、クリーム (#F4F1DE)、チャコール (#2C2C2C)
- チャコール&レッド: チャコール (#292929)、レッド (#E33737)、ライトグレー (#CCCBCB)
- バイブラントオレンジ: オレンジ (#F96D00)、ライトグレー (#F2F2F2)、チャコール (#222831)
- フォレストグリーン: ブラック (#191A19)、グリーン (#4E9F3D)、ダークグリーン (#1E5128)、ホワイト (#FFFFFF)
- レトロレインボー: パープル (#722880)、ピンク (#D72D51)、オレンジ (#EB5C18)、アンバー (#F08800)、ゴールド (#DEB600)
- ヴィンテージアーシー: マスタード (#E3B448)、セージ (#CBD18F)、フォレストグリーン (#3A6B35)、クリーム (#F4F1DE)
- コースタルローズ: オールドローズ (#AD7670)、ビーバー (#B49886)、エッグシェル (#F3ECDC)、アッシュグレー (#BFD5BE)
- オレンジ&ターコイズ: ライトオレンジ (#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つのカラムを配置します - 一方のカラムにテキスト/箇条書き、もう一方のカラムに注目コンテンツを配置します。これによりバランスが良くなり、チャートや表が読みやすくなります。flexboxを使用して不均等なカラム幅(例:40%/60%の分割)で各コンテンツタイプに最適なスペースを確保します。
- フルスライドレイアウト: 注目コンテンツ(チャート/表)がスライド全体を占めるようにして、最大のインパクトと読みやすさを実現します
- 絶対に縦に積み重ねない: チャートや表をテキストの下に単一のカラムで配置しないでください - 読みやすさとレイアウトの問題を引き起こします
ワークフロー
- 必須 - ファイル全体を読む:
html2pptx.mdを最初から最後まで完全に読んでください。このファイルを読む際に範囲制限を決して設定しないでください。プレゼンテーション作成を進める前に、詳細な構文、重要な書式設定ルール、ベストプラクティスについてファイルの全文を読んでください。 - 各スライドに適切な寸法(例:16:9の場合は720pt×405pt)のHTMLファイルを作成します
- すべてのテキストコンテンツに
<p>、<h1>-<h6>、<ul>、<ol>を使用します - チャートや表が追加される領域には
class="placeholder"を使用します(視認性のためにグレーの背景でレンダリングします) - 重要: グラデーションとアイコンは、まずSharpを使用してPNG画像としてラスタライズし、その後HTMLで参照します
- レイアウト: チャートや表、画像を含むスライドには、読みやすさを向上させるためにフルスライドレイアウトまたは2カラムレイアウトを使用します
- すべてのテキストコンテンツに
html2pptx.jsライブラリを使用してJavaScriptファイルを作成し実行し、HTMLスライドをPowerPointに変換してプレゼンテーションを保存しますhtml2pptx()関数を使用して各HTMLファイルを処理します- PptxGenJS APIを使用してプレースホルダー領域にチャートと表を追加します
pptx.writeFile()を使用してプレゼンテーションを保存します
- ビジュアルバリデーション: サムネイルを生成し、レイアウトの問題を検査します
- サムネイルグリッドを作成:
python scripts/thumbnail.py output.pptx workspace/thumbnails --cols 4 - サムネイル画像を読み取り、注意深く検査します。以下の点を確認:
- テキストの途切れ: テキストがヘッダーバー、シェイプ、スライドの端で途切れていないか
- テキストの重なり: テキストが他のテキストやシェイプと重なっていないか
- 配置の問題: コンテンツがスライドの境界線や他の要素に近すぎないか
- コントラストの問題: テキストと背景の間のコントラストが不十分でないか
- 問題が見つかった場合は、HTMLのマージン/間隔/色を調整し、プレゼンテーションを再生成します
- すべてのスライドが視覚的に正しくなるまで繰り返します
- サムネイルグリッドを作成:
既存のPowerPointプレゼンテーションを編集する
既存のPowerPointプレゼンテーションのスライドを編集する場合は、生の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にあるテンプレートインベントリファイルを作成し、保存する。内容は以下の通り:
# テンプレートインベントリ分析 **全スライド数: [count]** **重要: スライドは0から始まります(最初のスライド = 0、最後のスライド = count-1)** ## [カテゴリ名] - スライド 0: [利用可能な場合はレイアウトコード] - 説明/目的 - スライド 1: [レイアウトコード] - 説明/目的 - スライド 2: [レイアウトコード] - 説明/目的 [... 各スライドをそのインデックスとともに個別にリストする必要があります ...]- サムネイルグリッドの使用: 視覚的なサムネイルを参照して以下を特定する:
- レイアウトパターン(タイトルスライド、コンテンツレイアウト、セクション区切り)
- 画像プレースホルダーの場所と数
- スライドグループ間のデザインの一貫性
- 視覚的な階層と構造
- このインベントリファイルは、次のステップで適切なテンプレートを選択するために必須です。
-
テンプレートインベントリに基づいてプレゼンテーションのアウトラインを作成:
- ステップ2で利用可能なテンプレートを確認する。
- 最初のスライドには、導入またはタイトルテンプレートを選択します。これは最初のテンプレートの1つにする必要があります。
- 他のスライドには、安全でテキストベースのレイアウトを選択します。
- 重要: レイアウト構造を実際の内容に合わせる:
- 単一カラムレイアウト: 統一されたナレーションまたは単一のトピックに使用
- 2カラムレイアウト: 正確に2つの異なるアイテム/概念がある場合にのみ使用
- 3カラムレイアウト: 正確に3つの異なるアイテム/概念がある場合にのみ使用
- 画像+テキストレイアウト: 実際に挿入する画像がある場合にのみ使用
- 引用レイアウト: 強調のためではなく、実際の人の引用(帰属あり)にのみ使用
- コンテンツよりも多くのプレースホルダーがあるレイアウトは決して使用しない
- 2つのアイテムがある場合、それらを3カラムレイアウトに無理やり入れない
- 4つ以上のアイテムがある場合、複数のスライドに分割するか、リスト形式の使用を検討する
- レイアウトを選択する前に、実際のコンテンツの数を数える
- 選択したレイアウトの各プレースホルダーが意味のあるコンテンツで満たされることを確認する
(翻訳のため省略)