ADR-0017 プレビューはマスターの装飾も描き、書き出しはフッター類のプレースホルダーを複製する
状況
- 書式はマスター pptx の責務(ADR-0002)で、書き出しはレイアウトから作るのでマスターのロゴ・背景・図形は PowerPoint 側で継承されていた。
- 一方プレビューは、レイアウトのプレースホルダーの位置だけを読み、白地にシステムフォントで描いていた。ロゴも背景もフッターも無く、テーマのフォント・配色も使っていないため、書き出し結果との見た目の差が大きかった。
- python-pptx はスライドを作るとき日付・フッター・スライド番号のプレースホルダーを複製しないので、書き出した pptx にはフッターとページ番号が出ていなかった。
決定
importMaster はプレースホルダーに加えて、スライドマスターと各レイアウトの装飾を読む: 背景(単色・グラデーションの先頭色・画像)、画像(データ URL)、単色塗り・線の図形(角丸・楕円・直線を含む)、固定文字のテキストボックス、グループ(座標変換して平坦化)。showMasterSp="0" のレイアウトではマスターの装飾を隠す。色は srgbClr / schemeClr(テーマ経由、bg1→lt1 などの別名)/ sysClr と lumMod / lumOff / tint / shade / alpha を解決する。
- プレースホルダーの見た目も読む: 枠の塗り、先頭段落の文字色・サイズ・揃え・上下位置。レイアウトに無ければマスターの同じプレースホルダーから継承し、文字色の既定はマスターの
titleStyle / bodyStyle。
SlideCanvas はそれらを描く: 背景 → マスターの装飾 → レイアウトの装飾 → フッター類(スライド番号はその番号、日付は frontmatter の date、固定文字はそのまま)→ タイトルと本文。文字にはテーマのフォント(日本語フォントがあれば優先)と文字色を使う。
- 書き出しはレイアウトの日付・フッター・スライド番号のプレースホルダーをスライドに複製する。番号はフィールドのまま値を入れ、日付は frontmatter の
date を固定文字で入れる(無ければ日付のプレースホルダーは置かない)。空のフッターは他の未使用プレースホルダーと同様に除く。
- 描かないもの: グラデーション(先頭色で近似)、影や効果、パターン・画像塗りの図形、表・グラフ・SmartArt(
graphicFrame)、EMF / WMF / TIFF の画像。プレビューは目安であり、忠実な描画は PowerPoint に任せる方針は変えない。
結果
- ロゴ、帯、背景、社名フッター、ページ番号がプレビューに出て、書き出しとの差が「効果と特殊な図形」だけになる。
MasterProfile に master.decor / master.background / titleColor / bodyColor、MasterLayout に decor / background / showMasterShapes、Placeholder に style / text / field が増える。deck.json の契約は変えない(マスターの名前とレイアウト名だけを持つ)。
- 画像はデータ URL としてメモリ上のプロファイルに載る。ディスクには書かない。
状態
- 2026-09-08 実装。装飾入りマスターのテストは見本 pptx に OOXML を注入して作る(
tests/helpers/decoratedMaster.ts)。