PDF文書の結合と分割： PythonでPDFを簡単に管理

PDF文書は、情報の共有やデータの保存において広く使用されていますが、時には複数のPDFファイルを結合または分割する必要が生じます。結合することで、関連するドキュメントを一つにまとめ、整理された形で提供することができます。一方で、分割することで、大きなPDFファイルをより管理しやすいサイズに分割し、必要な範囲の情報にアクセスしやすくすることができます。Pythonを使用することで、これらの作業を効率的に行うことができます。この記事では、PDF文書を管理するために**Pythonを使ってPDF文書を結合したり分割したりする**ことについて説明します。

- **[MergeFiles()メソッドによるPDF文書の結合](#mergefilesメソッドによるpdf文書のマージ)**
- **[内容のコピーによるPDF文書の結合](#内容のコピーによるpdf文書の結合)**
- **[PDF文書の選択されたページの結合](#pdf文書の選択されたページの結合)**
- **[単一ページ文書へのPDF文書の分割](#単一ページ文書へのpdf文書の分割)**
- **[ページ範囲によるPDF文書の分割](#ページ範囲によるpdf文書の分割)**

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

## MergeFiles()メソッドによるPDF文書のマージ
**PdfDocument** クラスはPDF文書を表します。このクラスの中で、**MergeFiles()** メソッドを使用すると、パラメータとしてファイルパスのリストを渡すことで、複数のPDF文書を1つの文書に結合することができます。
以下はその手順の一例である。
1. PDF文書のファイルパスのリストを作成します。
2. **PdfDocument.MergeFiles()** メソッドを使用してPDF文書を結合します。
3. **PdfDocument.SaveToFile()** メソッドを使用して、結合された文書を新しいPDF文書として保存します。

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

# PDFファイルパスのリストを作成する
inputFile1 = "Sample1.pdf"
inputFile2 = "Sample2.pdf"
inputFile3 = "Sample3.pdf"
files = [inputFile1, inputFile2, inputFile3]

# PDFドキュメントを結合する
pdf = PdfDocument.MergeFiles(files)

# 結果のドキュメントを保存する
pdf.Save("output/PDF文書の結合.pdf", FileFormat.PDF)
pdf.Close()
```

**PDF文書の結合結果**
![MergeFiles()メソッドによるPDF文書のマージ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/79490649-d132-7823-4cde-b25b605f153e.png)

## 内容のコピーによるPDF文書の結合
PDFファイルの結合は、**PdfDocument.AppendPage(PdfDocument)** メソッドを使用してPDFファイルから新しいPDFファイルにページをコピーすることによっても行うことができます。詳しい手順は以下の通りです。
1. PDF文書のファイルパスのリストを作成します。
2. 各PDF文書を **PdfDocument** クラスのオブジェクトとして読み込み、リストに追加する。
3. 新しいPDF文書を作成するために **PdfDocument** クラスのオブジェクトを作成します。
4. 読み込んだ各PDF文書をループし、**PdfDocument.appendPage()** メソッドを使って新しいPDF文書にそのページを挿入します。
5. **PdfDocument.SaveToFile()** メソッドを使って新しいPDF文書を保存します。

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

# PDFファイルパスのリストを作成する
file1 = "Sample1.pdf"
file2 = "Sample2.pdf"
file3 = "Sample3.pdf"
files = [file1, file2, file3]

# 各PDFファイルをPdfDocumentオブジェクトとしてロードし、リストに追加する
pdfs = []
for file in files:
    pdfs.append(PdfDocument(file))

# PdfDocumentクラスのオブジェクトを作成する
newPdf = PdfDocument()

# 読み込んだPDF文書のページを新しいPDF文書に挿入する
for pdf in pdfs:
    newPdf.AppendPage(pdf)

# 新しいPDF文書を保存する
newPdf.SaveToFile("output/内容のコピー.pdf")
newPdf.Close()
```

**PDF文書の結合結果**
![内容のコピーによるPDF文書の結合](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/03ae99ef-ac72-8584-0727-012a40ccfe0f.png)

## PDF文書の選択されたページの結合
また、**PdfDocument.InsertPage()** メソッドや **PdfDocument.InsertPageRange()** メソッドを使用して、あるPDF文書から別のPDF文書へページを選択・挿入し、指定したPDFページの結合を可能にすることもできます。詳しい手順は以下の通りです。
1. PDFファイルパスのリストを作成します。
2. 各PDF文書を **PdfDocument** クラスのオブジェクトとして読み込み、リストに追加します。
3. **PdfDocument** クラスのオブジェクトを作成して、新しいPDF文書を作成します。
4. **PdfDocument.InsertPage(PdfDocument, pageIndex: int)** メソッドと **PdfDocument.InsertPageRange(PdfDocument, startIndex: int, endIndex: int)** メソッドを用いて、読み込んだ文書の選択したページを新しいPDF文書に挿入します。
5. **PdfDocument.SaveToFile()** メソッドを使用して新しいPDF文書を保存します。

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

# PDFファイルのパスのリストを作成します
file1 = "Sample1.pdf"
file2 = "Sample2.pdf"
file3 = "Sample3.pdf"
files = [file1, file2, file3]

# 各PDFファイルをPdfDocumentオブジェクトとして読み込み、リストに追加します
pdfs = []
for file in files:
    pdfs.append(PdfDocument(file))

# PdfDocumentクラスのオブジェクトを作成します
newPdf = PdfDocument()

# 読み込まれたPDFドキュメントから選択したページを新しいドキュメントに挿入します
newPdf.InsertPage(pdfs[0], 0)
newPdf.InsertPage(pdfs[1], 3)
newPdf.InsertPageRange(pdfs[2], 0, 1)

# 新しいPDFドキュメントを保存します
newPdf.SaveToFile("output/ページの選択.pdf")
newPdf.Close()
```

**PDF文書の結合結果**
![2023-12-20_164426.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/c12635f8-92d6-7b08-9174-796cc90cc12a.png)

## 単一ページ文書へのPDF文書の分割
**PdfDocument.Split(PdfDocument)** メソッドを使用して、複数ページのPDF文書を複数の単一ページのPDFファイルに分割することができます。以下はその詳細な手順です。
1. **PdfDocument** クラスのオブジェクトを作成し、**PdfDocument.LoadFromFile()** メソッドを使ってPDFファイルを読み込みます。
2. **PdfDocument.Split()** メソッドを使用して、ドキュメントを複数の単一ページPDFファイルに分割します。

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

# PdfDocumentオブジェクトを作成します
doc = PdfDocument()

# PDFファイルを読み込みます
doc.LoadFromFile("output/PDF文書の結合.pdf")

# PDFファイルを複数の単一ページのPDFファイルに分割します
doc.Split("Output/PDF/PDFの分割-{0}.pdf", 1)
doc.Close()
```

**PDF文書の分割結果**
![単一ページ文書へのPDF文書の分割](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/49c8a54d-e9d8-a1cd-e95e-cefd8d22c13d.png)

## ページ範囲によるPDF文書の分割
ページ範囲によって2つ以上のPDFファイルにPDFファイルを分割するには、2つ以上の新しいPDFファイルを作成し、次に新しく作成されたPDFファイルにソースPDFからページの特定のページまたは範囲をインポートする必要があります。以下は、詳細な手順です。
1. **PdfDocument** クラスのオブジェクトを作成し、**PdfDocument.LoadFromFile()** メソッドを使ってPDFファイルを読み込みます。
2. 別の3つの **PdfDocument** オブジェクトを作成します。
3. **PdfDocument.InsertPage()** メソッドを使用して、ソースファイルから最初のページを最初のドキュメントにインポートします。
4. **PdfDocument.InsertPageRange()** メソッドを使用して、ソースファイルから2-4ページを2番目のドキュメントにインポートします。
5. **PdfDocument.InsertPageRange()** メソッドを使用して、ソースファイルから3番目のドキュメントに残りのページをインポートします。
6. **PdfDocument.SaveToFile()** メソッドを使用して3つのドキュメントを保存します。

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

# PdfDocumentオブジェクトを作成します
doc = PdfDocument()

# PDFファイルを読み込みます
doc.LoadFromFile("output/PDF文書の結合.pdf")

# 3つのPdfDocumentオブジェクトを作成します
newDoc_1 = PdfDocument()
newDoc_2 = PdfDocument()
newDoc_3 = PdfDocument()

# ソースファイルの最初のページを最初のドキュメントに挿入します
newDoc_1.InsertPage(doc, 0)

# ソースファイルの2〜4ページを2番目のドキュメントに挿入します
newDoc_2.InsertPageRange(doc, 1, 3)

# ソースファイルの残りのページを3番目のドキュメントに挿入します
newDoc_3.InsertPageRange(doc, 4, doc.Pages.Count - 1)

# 3つのドキュメントを保存します
newDoc_1.SaveToFile("output/PDF1/PDF分割-1.pdf")
newDoc_2.SaveToFile("output/PDF1/PDF分割-2.pdf")
newDoc_3.SaveToFile("output/PDF1/PDF分割-3.pdf")

# PdfDocumentオブジェクトを閉じます
doc.Close()
newDoc_1.Close()
newDoc_2.Close()
newDoc_3.Close()
```

**PDF文書の分割結果**
![ページ範囲によるPDF文書の分割](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/aa21545d-f9be-292b-3ea5-016edbc0d2a3.png)

> **上記では、Pythonを使用してPDF文書、結合および分割するPDF文書を操作する方法について説明します。 単純なマージと分割に加えて、上記のメソッドはまた、自由にPDFページを操作するために使用することができますので、新しいPDFドキュメントの組成。Spire.PDF for Pythonは、必要に応じて、他の多くのPDF文書操作関数があり、あなたが見るために[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)に行くことができます。**