PythonでPDFをテキストに変換し、テキストを抽出

PDFドキュメントから情報を迅速かつ効率的に抽出することは、専門家にとって非常に重要です。大量のPDFファイルを処理する際に、PDFを編集可能なテキスト形式に変換することで時間と労力を節約することができます。そして、強力なPython言語がそのような場面で役立ちます。Pythonの豊富なAPIを活用して、Pythonプログラムで**PDFをテキスト（txtファイル）に簡単に変換し**、**PDFのテキストを容易に抽出**することができます。

この記事では、Pythonを使用してPDFをテキストに変換する方法と、PythonのPDFファイル処理における役割を紹介します。以下のトピックを含みます：

- **[Pythonを使用してPDFをテキストに変換する手順](#pythonを使用してpdfをテキストに変換する手順)**
- **[レイアウトを維持しないPDFをテキストに変換](#レイアウトを維持しないpdfをテキストに変換)**
- **[レイアウトを維持するテキストにPDFを変換](#レイアウトを維持するテキストにpdfを変換)**
- **[指定したPDFページ領域からのテキスト抽出](#指定したpdfページ領域からのテキスト抽出)**

この記事で使用する変換方法には、[Spire.PDF for Python](https://jp.e-iceblue.com/download/spire-pdf-for-python.html)が必要です。公式ウェブサイトからダウンロードするか、PyPIを通じてインストールすることができます：`pip install spire.pdf` または `pip install spire.pdf.free`。

また、[Spire.PDF for Pythonの無料版](https://jp.e-iceblue.com/introduce/introduce-free-pdf-for-python.html)を使用して、軽量のPDFファイル処理を行うこともできます。

## Pythonを使用してPDFをテキストに変換する手順
PDFをテキストに変換する前に、変換が提供する主な利点について理解しましょう：

- **編集可能**：PDFをテキストに変換することで、文書の操作が容易になります。テキストファイルはほとんどのデバイスで開いて編集することができます。
- **アクセシビリティ**：テキストファイルはPDFに比べてアクセスしやすいです。コンピュータやモバイルデバイスで簡単にテキストファイルを閲覧できます。
- **他のアプリケーションとの統合とデータ共有**：テキストファイルはさまざまなアプリケーションやワークフローにシームレスに統合し、データの共有を実現することができます。

**Pythonを使用してPDFドキュメントをテキストファイルに変換する手順は以下の通りです：**

1. モジュールをインポートします。
2. **PdfDocument**クラスのオブジェクトを作成し、**LoadFromFile()** メソッドを使用してPDFファイルをロードします。
3. **PdfTextExtractOptions**クラスのオブジェクトを作成し、テキストの抽出オプションを設定します。これにはすべてのテキストの抽出、非表示テキストの表示、指定領域のテキストのみの抽出、および単純な抽出などが含まれます。
4. **PdfDocument.Pages.get_Item()** メソッドを使用してドキュメント内の各ページを取得し、各ページに基づいて**PdfTextExtractor**オブジェクトを作成し、**Extract()** メソッドを使用してページからテキストを抽出し、オプションを指定します。
5. 抽出したテキストをテキストファイルとして保存し、**PdfDocument**オブジェクトを閉じます。

## レイアウトを維持しないPDFをテキストに変換
PDFをテキストに抽出する際に、シンプルな抽出方法を使用すると、プログラムは空白領域を保持せず、各文字列の現在のY位置を追跡し、Y位置が変化すると改行文字を出力結果に挿入します。
```python
from spire.pdf import PdfDocument
from spire.pdf import PdfTextExtractOptions
from spire.pdf import PdfTextExtractor

# PdfDocumentクラスのオブジェクトを作成し、PDFファイルをロードします
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")

# テキストを保存するための文字列オブジェクトを作成します
extracted_text = ""

# PdfExtractorのオブジェクトを作成します
extract_options = PdfTextExtractOptions()
# シンプルな抽出方法を使用するように設定します
extract_options.IsSimpleExtraction = True

# ドキュメント内のページをループします
for i in range(pdf.Pages.Count):
    # ページを取得します
    page = pdf.Pages.get_Item(i)
    # ページをパラメータとして渡してPdfTextExtractorのオブジェクトを作成します
    text_extractor = PdfTextExtractor(page)
    # ページからテキストを抽出します
    text = text_extractor.ExtractText(extract_options)
    # 抽出されたテキストを文字列オブジェクトに追加します
    extracted_text += text

# 抽出されたテキストをテキストファイルに書き込みます
with open("output/抽出テキスト.txt", "w", encoding="utf-8") as file:
    file.write(extracted_text)
pdf.Close()
```

元のドキュメント
![レイアウトを維持しないPDFをテキストに変換](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/ad562723-fbf1-d9f6-eca6-3d090a668ad3.png)

出力されたテキストファイル
![レイアウトを維持しないPDFをテキストに変換](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/f7ebf9b6-6cd9-e6be-7c45-d820f0a719d4.png)

## レイアウトを維持するテキストにPDFを変換
PDFのデフォルトの抽出方法を使用すると、プログラムは空白を含めてテキストを行ごとに抽出します。
```python
from spire.pdf import PdfDocument
from spire.pdf import PdfTextExtractOptions
from spire.pdf import PdfTextExtractor

# PdfDocumentクラスのオブジェクトを作成し、PDFファイルをロードします
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")

# テキストを保存するための文字列オブジェクトを作成します
extracted_text = ""

# PdfExtractorのオブジェクトを作成します
extract_options = PdfTextExtractOptions()

# ドキュメント内のページをループします
for i in range(pdf.Pages.Count):
    # ページを取得します
    page = pdf.Pages.get_Item(i)
    # ページをパラメータとして渡してPdfTextExtractorのオブジェクトを作成します
    text_extractor = PdfTextExtractor(page)
    # ページからテキストを抽出します
    text = text_extractor.ExtractText(extract_options)
    # 抽出されたテキストを文字列オブジェクトに追加します
    extracted_text += text

# 抽出されたテキストをテキストファイルに書き込みます
with open("output/抽出テキスト.txt", "w", encoding="utf-8") as file:
    file.write(extracted_text)
pdf.Close()
```

出力されたテキストファイル
![レイアウトを維持するテキストにPDFを変換](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/295f0484-fcdc-c4f9-adce-bfa75b2e7616.png)

## 指定したPDFページ領域からのテキスト抽出
```python
from spire.pdf import PdfDocument
from spire.pdf import PdfTextExtractOptions
from spire.pdf import PdfTextExtractor
from spire.pdf import RectangleF

# PdfDocumentクラスのオブジェクトを作成し、PDFファイルをロードします
pdf = PdfDocument()
pdf.LoadFromFile("Sample.pdf")

# PdfExtractorのオブジェクトを作成します
extract_options = PdfTextExtractOptions()

# 特定のページ領域を抽出するように設定します
extract_options.ExtractArea = RectangleF(50.0, 220.0, 700.0, 200.0)

# ページを取得します
page = pdf.Pages.get_Item(0)

# PdfTextExtractorのオブジェクトを作成します
text_extractor = PdfTextExtractor(page)

# ページからテキストを抽出します
extracted_text = text_extractor.ExtractText(extract_options)

# 抽出されたテキストをテキストファイルに書き込みます
with open("output/抽出テキスト.txt", "w", encoding="utf-8") as file:
    file.write(extracted_text)
pdf.Close()
```

出力されたテキストファイル
![指定したPDFページ領域からのテキスト抽出](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/20bb98ca-5300-e819-cc11-47ac3468e424.png)

### 結論
この記事では、Pythonを使用してPDFをテキストに変換する方法について説明しました。操作手順とコードの例に従うことで、Pythonプログラムで迅速なPDFからテキストへの変換を実現することができます。Spire.PDF for Pythonの使用中に問題が発生した場合は、[Spire.PDFフォーラム](https://www.e-iceblue.com/forum/spire-pdf-f7.html)で技術サポートを入手できます。

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