PDFをPNG画像に変換する、Pythonで簡単に実現する方法

PDF文書は、異なるプラットフォーム間で情報を共有するための標準的な形式となりました。しかし、PDFはテキストやグラフィカルなコンテンツの整合性を保持するための堅牢な方法を提供する一方で、画像は視覚的なコミュニケーションの領域を支配し続けています。画像は、多くのデバイスで広くサポートされており、ウェブサイトやプレゼンテーション、さまざまな他の文書にシームレスに統合することができます。そのため、PDFを画像に変換することは、コンテンツ配信のアクセシビリティと多様性を向上させるための重要な解決策として登場しています。さらに、PDFを画像に変換することで、テキストのコピーまたは変更がより困難になる追加の保護層が提供されます。この記事では、Pythonを使用して**PDFドキュメントを簡単に画像に変換する方法**を紹介します。

- **[PDFページをPNG画像に変換する](#pdfページをpng画像に変換する)**
- **[PDFドキュメントを複数の画像に変換する](#pdfドキュメントを複数の画像に変換する)**
- **[PDFドキュメントを長い画像に変換する](#pdfドキュメントを長い画像に変換する)**

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

## PDFページをPNG画像に変換する
PDF文書をロードした後、**PdfDocument.SaveAsImage(int pageIndex)** メソッドを使用して、PDF文書の特定のページをPNG画像として保存することができます。その後、画像をPNGファイルとして保存します。具体的な手順は以下の通りです。
- **PdfDocument** クラスのオブジェクトを作成し、**PdfDocument.LoadFromFile()** メソッドを使用してPDF文書をロードします。
- 指定したページを **PdfDocument.SaveAsImage()** メソッドを使用してPNG画像として保存します。
- **Save()** メソッドを使用してPNG画像をファイルに保存します。
- PDF文書を閉じます。

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

# PdfDocumentクラスのオブジェクトを作成し、PDFドキュメントを読み込む
pdf = PdfDocument()
pdf.LoadFromFile("サンプル.pdf")

# ドキュメントの2ページ目をpng画像に変換する
image = pdf.SaveAsImage(1, PdfImageType.Bitmap)

# 画像をpngファイルに保存する
image.Save("output/画像/ページ-2.png")
pdf.Close()
```

**PDFドキュメント**
![PDFページをPNG画像に変換する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/6830ff9b-66af-99c1-cf16-e12a01c6a911.png)

**2ページからの変換画像**
![PDFページをPNG画像に変換する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/7c9eccec-589a-1679-1c07-68af0440f736.png)

## PDFドキュメントを複数の画像に変換する
PDF文書のすべてのページを個々のPNGファイルに変換する必要がある場合は、文書の各ページをループしてPNGファイルとして保存するだけです。以下に詳細な手順を示します。
- **PdfDocument** クラスのオブジェクトを作成し、**PdfDocument.LoadFromFile()** メソッドを使用してPDF文書をロードします。
- 文書内のページをループして、**PdfDocument.SaveAsImage()** メソッドを使用して各ページを画像に変換します。そして、各画像をPNGファイルに保存します。
- 文書を閉じます。

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

# PdfDocumentクラスのオブジェクトを作成し、PDFドキュメントを読み込む
pdf = PdfDocument()
pdf.LoadFromFile("サンプル.pdf")

# ドキュメント内の各ページをループする
for i in range(pdf.Pages.Count):
    # ページを画像に変換する
    image = pdf.SaveAsImage(i, PdfImageType.Bitmap)
    # 画像をPNGファイルとして保存する
    image.Save(f"output/画像/ページ-{i + 1}.png")

pdf.Close()
```

**ドキュメントの全ページから変換画像**
![PDFドキュメントを複数の画像に変換する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/6422b151-34d6-b11d-e0ac-0f81b81b8a50.png)

## PDFドキュメントを長い画像に変換する
PDFのすべてのページを1つの長い画像に変換するには、まずすべてのページを個別の画像に変換し、その後、PILの画像処理機能を使用してこれらの画像データを結合します。以下に、詳細な手順を示します。
- **PdfDocument** クラスのオブジェクトを作成し、**PdfDocument.LoadFromFile()** メソッドを使用してPDF文書をロードします。
- 文書内のページをループして、**PdfDocument.SaveAsImage()** メソッドを使用して各ページを画像に変換します。そして、各画像データを読み込み、リストに格納します。
- 最初の画像の長さと幅を取得します。
- 各画像を順番に長い画像に貼り付ける。
- 長い画像をPNGファイルとして保存します。

**コード例**
Python
```python
from spire.pdf import *
from spire.pdf.common import *
from PIL import Image
import io

# PdfDocumentクラスのオブジェクトを作成し、PDFドキュメントを読み込む
pdf = PdfDocument()
pdf.LoadFromFile("サンプル.pdf")

# 画像ストリームを保存するためのリストを作成する
images = []

# ドキュメント内の各ページをループする
for i in range(pdf.Pages.Count):
    # 各ページを画像に変換し、リストに保存する
    imageStream = pdf.SaveAsImage(i, PdfImageType.Bitmap)
    imageData = imageStream.ToArray()
    image = Image.open(io.BytesIO(imageData))
    images.append(image)

# 最初のページとそのサイズを取得する
firstImage = images[0]
imageWidth, imageHeight = firstImage.size

# 長い画像として新しい画像を作成する
mergedImage = Image.new('RGB', (imageWidth, imageHeight * len(images)))

# 各画像を順番に長い画像に貼り付ける
for index, image in enumerate(images):
    mergedImage.paste(image, (0, index * imageHeight))

# 長い画像をPNGファイルとして保存する
mergedImage.save("output/画像/長い画像.png")
pdf.Close()
```

**変換した長い画像**
![PDFドキュメントを長い画像に変換する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/c6b1f972-cb56-4280-ded7-4820f7d35545.png)

上記はPythonを使ってPDF文書を画像に変換する方法を示しています。Spire.PDF for Pythonは他にも多くの機能をサポートしています。詳しくは[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)で議論することもできます。