PythonでPDFページを分割および結合する

PDFページの分割および結合は、PDFコンテンツの印刷や組版などの再構成に役立ちます。Pythonプログラムを使用することで、開発者は簡単にPDFドキュメントから1ページを複数のページに分割したり、複数のPDFページを1ページに結合したりすることができます。この記事では、Pythonプログラムで**PDFページを分割および結合する方法**を示します。

- **[Pythonで1つのPDFページを複数のPDFページに分割する方法](#pythonで1つのpdfページを複数のpdfページに分割する方法)**
- **[Pythonで複数のPDFページを1つのページに結合する方法](#pythonで複数のpdfページを1つのページに結合する方法)**

この記事の方法には、[Spire.PDF for Python](https://www.e-iceblue.com/Download/Spire-PDF-Python.html)が必要です。公式ウェブサイトからダウンロードするか、PyPIを介してインストールできます：`pip install Spire.PDF`。

## Pythonで1つのPDFページを複数のPDFページに分割する方法
開発者は、**PdfPageBase.CreateTemplate().Draw(newPage PdfPageBase, PointF)** メソッドを使用して、新しいPDFページ上にPDFページを描画します。描画時、現在の新しいページに元のページのコンテンツが完全に収まらない場合、自動的に新しいページが作成され、残りのコンテンツがそれに描画されます。したがって、新しいPDFドキュメントを作成し、ページサイズを指定してPDFページを水平または垂直に指定の分割を実現することができます。
PDFページを垂直に2つの別々のPDFページに分割する手順は次のとおりです：

1. **PdfDocument** クラスのオブジェクトを作成し、**PdfDocument.LoadFromFile()** メソッドを使用してPDFドキュメントをロードします。
2. **PdfDocument.Pages.get_Item()** メソッドを使用して、ドキュメントの最初のページを取得します。
3. **PdfDocument** クラスのオブジェクトを作成して新しいPDFドキュメントを作成します。
4. **PdfDocument.PageSettings.Margins.All** プロパティを介して新しいドキュメントの余白を0に設定します。
5. **PdfPageBase.Size.Width** プロパティと **PdfPageBase.Size.Height** プロパティを介して取得したページの幅と高さを取得します。
6. **PdfDocument.PageSettings.Width** プロパティを取得したページと同じ幅に設定し、**PdfDocument.PageSettings.Height** プロパティを取得したページの高さの半分に設定します。
7. **PdfDocument.Pages.Add()** メソッドを使用して新しいドキュメントに新しいページを追加します。
8. **PdfPageBase.CreateTemplate().Draw()** メソッドを使用して、取得したページのコンテンツを新しいページ上に描画します。
9. **PdfDocument.SaveToFile()** メソッドを使用して新しいドキュメントを保存します。

**コード例：**
```python
from spire.pdf import *
from spire.pdf.common import *

# PdfDocumentクラスのオブジェクトを作成し、PDFドキュメントをロードします
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")

# ドキュメントの最初のページを取得します
page = pdf.Pages.get_Item(0)

# 新しいPDFドキュメントを作成します
newPdf = PdfDocument()

# 新しいPDFドキュメントの余白を0に設定します
newPdf.PageSettings.Margins.All = 0.0

# 取得したページの幅と高さを取得します
width = page.Size.Width
height = page.Size.Height

# 新しいPDFドキュメントの幅を取得したページと同じに設定し、高さを取得したページの高さの半分に設定します
newPdf.PageSettings.Width = width
newPdf.PageSettings.Height = height / 2

# 新しいPDFドキュメントに新しいページを追加します
newPage = newPdf.Pages.Add()

# 取得したページの内容を新しいページに描画します
page.CreateTemplate().Draw(newPage, PointF(0.0, 0.0))

# 新しいPDFドキュメントを保存します
newPdf.SaveToFile("output/SplitPDFPage.pdf")
pdf.Close()
newPdf.Close()
```

**結果：**
![Pythonで1つのPDFページを複数のPDFページに分割する方法](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/d93d1b31-a85e-8a79-0ff4-0682eefe7127.png)


## Pythonで複数のPDFページを1つのページに結合する方法
同様に、開発者は異なるページを同じPDFページ上に描画することでPDFページを結合することができます。ただし、結合するページはできるだけ同じ幅または高さであることが好ましいです。そうでない場合は、正しい描画を保証するために最大値を取る必要があります。
2つのPDFページを1つのPDFページに結合するための詳細な手順は次のとおりです：
1. **PdfDocument** クラスのオブジェクトを作成し、**PdfDocument.LoadFromFile()** メソッドを使用してPDFドキュメントをロードします。
2. **PdfDocument.Pages.get_Item()** メソッドを使用して、ドキュメントの最初のページと2番目のページを取得します。
3. **PdfDocument** クラスのオブジェクトを作成して新しいPDFドキュメントを作成します。
4. **PdfDocument.PageSettings.Margins.All** プロパティを介して新しいドキュメントの余白を0に設定します。
5. **PdfPageBase.Size.Width** プロパティと **PdfPageBase.Size.Height** プロパティを介して2つの取得したページの幅と高さを取得します。
6. **PdfDocument.PageSettings.Width** プロパティを取得したページと同じ幅に設定し、**PdfDocument.PageSettings.Height** プロパティを2つの取得したページの高さの合計に設定します。
7. **PdfPageBase.CreateTemplate().Draw()** メソッドを使用して、2つの取得したページのコンテンツを新しいページ上に描画します。
8. **PdfDocument.SaveToFile()** メソッドを使用して新しいドキュメントを保存します。

コード例：
```python
from spire.pdf import *
from spire.pdf.common import *

# PdfDocumentクラスのオブジェクトを作成し、PDFドキュメントをロードします
pdf = PdfDocument()
pdf.LoadFromFile("Sample1.pdf")

# ドキュメントの最初のページと2番目のページを取得します
page = pdf.Pages.get_Item(0)
page1 = pdf.Pages.get_Item(1)

# 新しいPDFドキュメントを作成します
newPdf = PdfDocument()

# 新しいPDFドキュメントの余白を0に設定します
newPdf.PageSettings.Margins.All = 0.0

# 新しいドキュメントのページ幅を取得したページと同じに設定します
newPdf.PageSettings.Width = page.Size.Width

# 新しいドキュメントのページ高さを取得した2つのページの高さの合計に設定します
newPdf.PageSettings.Height = page.Size.Height + page1.Size.Height

# 新しいPDFドキュメントに新しいページを追加します
newPage = newPdf.Pages.Add()

# 取得したページの内容を新しいページに描画します
page.CreateTemplate().Draw(newPage, PointF(0.0, 0.0))
page1.CreateTemplate().Draw(newPage, PointF(0.0, page.Size.Height))

# 新しいドキュメントを保存します
newPdf.SaveToFile("output/MergePDFPages.pdf")
pdf.Close()
newPdf.Close()
```

**結果：**
![Pythonで複数のPDFページを1つのページに結合する方法](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/e29b1a06-b8ba-c730-2e2d-dacce8b1b187.png)


### 結論
この記事では、PDFページを分割し、複数のPDFページを1つのPDFページに結合する方法を示しました。
このAPIには他にも多くの機能がありますので、詳細な情報については[Spire.PDF for Pythonのチュートリアル](https://www.e-iceblue.com/Tutorials/Python/Spire.PDF-for-Python/Program-Guide/Spire.PDF-for-Python-Program-Guide-Content.html)をご覧ください。技術サポートについては、[Spire.PDFフォーラム](https://www.e-iceblue.com/forum/spire-pdf-f7.html)にアクセスしてください。

**[無料ライセンスの申請](https://www.e-iceblue.com/TemLicense.html)**