PythonでPowerPointのスライド マスターを作成して適用する方法

PowerPointプレゼンテーションを作成する際、**スライド マスター**を活用することで、背景、レイアウト、フォント、配色などの視覚要素を統一でき、資料全体の品質と作業効率が大幅に向上します。複数の資料を一貫したデザインで作成したい場合、Pythonでスライド マスターを自動設定するのは効率的かつ再利用可能なアプローチです。

本記事では、**Pythonを使用してスライド マスターを作成・適用する方法**を詳しく解説します。背景画像の設定、レイアウトスタイルの調整、マスターの切り替えなど、主要な操作をコードとともに紹介します。

この方法には [Free Spire.Presentation for Python](https://jp.e-iceblue.com/introduce/introduce-free-presentation-for-python.html) を使用します。PyPIでのインストールコマンド：  
`pip install spire.presentation`

---

## ステップ解説：Pythonでスライド マスターを作成・適用する

以下は、スライド マスターを作成して適用するための手順です。各ステップでは使用する主なクラスやメソッドも併せて説明しています。

### ステップ1：プレゼンテーションを作成し、スライドのサイズを設定する

- クラス：`Presentation`  
- プロパティ：`.SlideSize.Type = SlideSizeType.Screen16x9`

```python
ppt = Presentation()
ppt.SlideSize.Type = SlideSizeType.Screen16x9  # ワイド画面（16:9）に設定
```

### ステップ2：複数のスライドを追加する

- メソッド：`.Slides.Append()`

```python
for i in range(4):
    ppt.Slides.Append()
```

### ステップ3：スライド マスターを取得・追加する

- プロパティ：`.Masters`  
- メソッド：`.AppendSlide(master)`

```python
first_master = ppt.Masters[0]  # 既定のマスターを取得
ppt.Masters.AppendSlide(first_master)  # 2つ目のマスターを追加
second_master = ppt.Masters[1]
```

### ステップ4：スライド マスターの背景に画像を設定する

- クラス：`RectangleF`, `ShapeType`, `FillFormatType`  
- メソッド：`.AppendEmbedImageByPath()`, `.SlideBackground.Fill.FillType`

以下の例では、ローカル画像をスライドの背景として使用しています：

```python
# 画像ファイルパス
pic1 = "1.jpg"
pic2 = "2.jpg"

# 背景エリアのサイズ指定
rect = RectangleF.FromLTRB(0, 0, ppt.SlideSize.Size.Width, ppt.SlideSize.Size.Height)

# 最初のマスターに背景画像を設定
first_master.SlideBackground.Fill.FillType = FillFormatType.Picture
img1 = first_master.Shapes.AppendEmbedImageByPath(ShapeType.Rectangle, pic1, rect)
first_master.SlideBackground.Fill.PictureFill.Picture.EmbedImage = img1.PictureFill.Picture.EmbedImage

# 2つ目のマスターに背景画像を設定
second_master.SlideBackground.Fill.FillType = FillFormatType.Picture
img2 = second_master.Shapes.AppendEmbedImageByPath(ShapeType.Rectangle, pic2, rect)
second_master.SlideBackground.Fill.PictureFill.Picture.EmbedImage = img2.PictureFill.Picture.EmbedImage
```

### ステップ5：各スライドに異なるマスター レイアウトを適用する

- プロパティ：`.Layouts[index]`, `.Slides[index].Layout`

```python
ppt.Slides[0].Layout = first_master.Layouts[1]  # 1枚目は最初のマスターのレイアウトを使用
for i in range(1, ppt.Slides.Count):  # 2枚目以降は2つ目のマスターを適用
    ppt.Slides[i].Layout = second_master.Layouts[8]
```

### ステップ6：ファイルを保存してリソースを解放する

- メソッド：`.SaveToFile()`, `.Dispose()`

```python
ppt.SaveToFile("output/CustomMasterSlides.pptx", FileFormat.Pptx2013)
ppt.Dispose()
```

---

## 完全なサンプルコード

これまでのステップを統合した完全なコードは以下のとおりです。すぐに実行して確認できます。

```python
from spire.presentation.common import *
from spire.presentation import *

ppt = Presentation()
ppt.SlideSize.Type = SlideSizeType.Screen16x9

for i in range(4):
    ppt.Slides.Append()

first_master = ppt.Masters[0]
ppt.Masters.AppendSlide(first_master)
second_master = ppt.Masters[1]

pic1 = "1.jpg"
pic2 = "2.jpg"

rect = RectangleF.FromLTRB(0, 0, ppt.SlideSize.Size.Width, ppt.SlideSize.Size.Height)

first_master.SlideBackground.Fill.FillType = FillFormatType.Picture
img1 = first_master.Shapes.AppendEmbedImageByPath(ShapeType.Rectangle, pic1, rect)
first_master.SlideBackground.Fill.PictureFill.Picture.EmbedImage = img1.PictureFill.Picture.EmbedImage

second_master.SlideBackground.Fill.FillType = FillFormatType.Picture
img2 = second_master.Shapes.AppendEmbedImageByPath(ShapeType.Rectangle, pic2, rect)
second_master.SlideBackground.Fill.PictureFill.Picture.EmbedImage = img2.PictureFill.Picture.EmbedImage

ppt.Slides[0].Layout = first_master.Layouts[1]
for i in range(1, ppt.Slides.Count):
    ppt.Slides[i].Layout = second_master.Layouts[8]

ppt.SaveToFile("output/CustomMasterSlides.pptx", FileFormat.Pptx2013)
ppt.Dispose()
```

**出力結果イメージ**  
![Pythonでスライド マスターを作成・適用](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/efe607d4-0412-4ebb-a001-9bc388d2b835.png)

---

## まとめ

本記事では、**Free Spire.Presentation for Python** を活用して、スライド マスターの作成、背景画像の設定、異なるレイアウトの適用など、PowerPointを自動で整える方法をご紹介しました。

スライドにヘッダーやページ番号、会社ロゴ、プレースホルダーの追加など、さらに高度なカスタマイズを行いたい場合は、以下の公式ドキュメントもご参照ください：  
👉 [Spire.Presentation 公式ガイド](https://www.e-iceblue.com/Tutorials/Python/Spire.Presentation-for-Python/Program-Guide/Spire.Presentation-for-Python-Program-Guide-Content.html)