PythonでWord文書を画像に変換する

Word文書は、テキスト、画像、表などのコンテンツを編集するための機能豊富なフォーマットです。しかし、Word文書は表示に不便であり、表示デバイスやシステムに一定の要件があります。表示問題を解決するための一般的な方法は、Word文書を画像形式に変換して、文書の内容とレイアウトを保持し、異なるプラットフォームやデバイスでの一貫性のある表示を確保し、表示環境要件を低減することです。本文では、**Word文書を画像ファイルに変換**して表示および共有する方法について説明します。 本文で使用される方法には[Spire.Doc for Python](https://www.e-iceblue.com/Introduce/doc-for-python.html)が必要です。

Spire.Doc for Pythonライブラリは[公式サイト](https://www.e-iceblue.com/Download/Spire-Doc-Python.html)からダウンロードするか、pipでインストールできます。
```
pip install Spire.Doc
```

## Word文書の各ページをPNG画像に変換する
**Document.SaveImageToStreams(ImageType.Bitmap)** メソッドを使用して、ドキュメントの各ページをPNG画像に変換し、リストを返すことができます。リスト内の画像をPNGファイルとして保存するか、すべての画像を保存することができます。 Doc、Docx、Docm、Dot、Dotx、Dot、Odtなどの形式に対応しており、 **Document.LoadFromFile(fileName: str, fileFormat: FileFormat, password: str)** メソッドでドキュメントをロードする際に **FileFormat** クラスの詳細情報を確認できます。 以下は操作手順です。

- **Document** クラスのオブジェクトを作成します。
- **Document.LoadFromFile()** メソッドを使用してWord文書をロードします。
- **Document.SaveImageToStreams(ImageType.Bitmap)** メソッドを使用してドキュメントをPNG画像に変換し、リストを返します。
- リスト内の画像をPNGファイルとして保存します。

**Python**
```Python
from spire.doc import *
from spire.doc.common import *

inputFile = "G:/文書/例.docx"

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

# Word文書をロードします
doc.LoadFromFile(inputFile)

# ドキュメントの各ページをビットマップに変換し、リストで返します
imageStream = doc.SaveImageToStreams(ImageType.Metafile)

# リスト内のビットマップをファイルに保存します
for i, image in enumerate(imageStream):
    outputFile = f"output/Images/image_{i}.png"
    with open(outputFile, "wb") as f:
        f.write(image.ToArray())

doc.Close()
```

**文書**
![Word文書を画像に変換](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/90b37351-4ed1-5595-d0be-c4be18a3a7a2.png)

**変換結果**
![Word文書の各ページをPNG画像に変換](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/ad55fcf2-36fd-437a-0e28-7c6f5931686d.png)

## Word文書をJPG画像に変換する
**Document.SaveImageToStreams()** メソッドでは直接JPEG形式で画像を保存できません。リスト内のPNG画像をJPEG形式に変換して保存するためにPillowライブラリを導入することができます。
コンソールで以下のコマンドを入力し、Pillowをインストールする：
```
pip install Pillow
```

操作手順は以下の通りです。

- **Document** クラスのオブジェクトを作成します。
- **Document.LoadFromFile()** メソッドを使用してWord文書をロードします。
- **Document.SaveImageToStreams(ImageType.Bitmap)** メソッドを使用してドキュメントをPNG画像に変換し、リストを返します。
- リスト内のビットマップをJPEG形式に変換してファイルに保存します。

**Python**
```Python
from spire.doc import *
from spire.doc.common import *
from PIL import Image
import io

inputFile = "G:/文書/例.docx"

# Documentクラスのオブジェクトを作成
doc = Document()

# Word文書をロードする
doc.LoadFromFile(inputFile)

# ドキュメントの各ページをビットマップに変換し、PNG形式で保存する
imageStream = doc.SaveImageToStreams(ImageType.Metafile)

# Pillowを使用してPNGイメージデータをJPEG形式に変換し、保存する
for i, image in enumerate(imageStream):
    img = Image.open(io.BytesIO(image.ToArray()))
    jpg_file = f"output/Images/image_{i}.jpg"
    img.convert("RGB").save(jpg_file, "JPEG")

doc.Close()
```

**変換結果**
![Word文書をJPG画像に変換](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/7657a6b4-6103-2eae-8c3b-f007a4d66b58.png)

**保存時に他の形式に設定することもできます。**

## Word文書を長い画像に変換する
Spire.Doc for Pythonで文書を画像に変換した後は、Pillowで画像データを長い画像として出力することもできます。操作手順は以下の通りです。

- **Document** クラスのオブジェクトを作成します。
- **Document.LoadFromFile()** メソッドを使用してWord文書をロードします。
- **Document.SaveImageToStreams(ImageType.Bitmap)** メソッドを使用してドキュメントをPNG画像に変換し、リストを返します。
- 画像データを1枚の長い画像に合成します。
- 合成した画像を保存します。

**Python**
```Python
from spire.doc import *
from spire.doc.common import *
from PIL import Image
import io

inputFile = "G:/文書/例.docx"

# Documentクラスのオブジェクトを作成
doc = Document()

# Word文書をロードする
doc.LoadFromFile(inputFile)

# ドキュメントの各ページをビットマップに変換し、リストとして返す
imageStream = doc.SaveImageToStreams(ImageType.Metafile)

# Pillowを使用して画像データを1つの長い画像に結合する
images = []
for image in imageStream:
    img = Image.open(io.BytesIO(image.ToArray()))
    images.append(img)

combined_image = Image.new("RGB", (images[0].width, sum(img.height for img in images)))
y_offset = 0
for img in images:
    combined_image.paste(img, (0, y_offset))
    y_offset += img.height

# 結合された画像を1つの長い画像として保存する
combined_image.save("output/Images/combined_image.jpg", "JPEG")

doc.Close()
```
**変換結果**
![Word文書を長い画像に変換](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/999d6124-e4b1-3ed9-b417-6746b73cef93.png)

> **この記事では、Word文書を画像に変換するためのSpire.Doc for Pythonの使用方法について説明します。Spire.Doc for Pythonには他にも多くの機能がありますので、[Spire.Doc for Pythonのチュートリアル](https://www.e-iceblue.com/Tutorials/Python/Spire.Doc-for-Python/Program-Guide/Spire.Doc-for-Python-Program-Guide-Content.html)を参照してください。 もし質問があれば、[Spire.Docのフォーラム](https://www.e-iceblue.com/forum/spire-doc-f6.html)で議論に参加することもできます。**