PythonでPDF内のテキストを検索し、テキストを強調表示する方法

PDF文書の読書効率を高めるには、重要なテキストを強調するために鮮やかな色を使用することがよくあります。この一般的に採用されている方法は、特に長いPDFにおいて、読者がナビゲートしたり内容を強調したりするのを助けます。文書作成者はPythonプログラムを活用することで、ハイライト処理を簡単かつ迅速に実行することができます。この記事では、Pythonプログラムを使用して**PDF文書内のテキストを検索し、テキストを強調する方法**を説明します。

- **[PDF内のテキストの検索とハイライト](#pdf内のテキストの検索とハイライト)**
- **[PDFページ上の特定領域のテキストを検索・ハイライト](#pdfページ上の特定領域のテキストを検索ハイライト)**
- **[正規表現によるPDF内のテキストの検索とハイライト](#正規表現によるpdf内のテキストの検索とハイライト)**

この記事の方法は[Python用のSpire.PDF](https://www.e-iceblue.com/Introduce/pdf-for-python.html)を必要とします。これはWebサイトまたはPyPIから入手できます：
```powershell
pip install Spire.PDF
```

## PDF内のテキストの検索とハイライト
**PdfPageBase.FindText()** メソッドを使用すると、 開発者はページ上の特定のテキストをすべて検索することができます。このメソッドを使用する際、開発者は検索する文字列と、**TextFindParameter.IgnoreCase**(検索時に大文字小文字を無視する)のような検索オプションをメソッドのパラメータとして渡すことで、カスタマイズされたテキスト検索を行うことができます。テキストを取得したら、**ApplyHighLight()** メソッドでハイライト色を適用できます。以下は、特定のテキストの出現箇所をすべてハイライトする例です。

- **PdfDocument** クラスのオブジェクトを作成し、**PdfDocument.LoadFromFile()** メソッドを使ってPDF文書を読み込みます。
- ドキュメント内のページをループします。
- **PdfDocument.Pages.get_Item()** メソッドを使用してページを取得します。
- **PdfPageBase.FindText()** メソッドを使用して、ページ上の特定のテキストの出現箇所をすべて検索します。
- 見つかったテキストをループし、**ApplyHighLight()** メソッドを使用して、見つかった各テキストにハイライト色を適用します。
- **PdfDocument.SaveToFile()** メソッドを使用してドキュメントを保存します。

**Python**
```python
from spire.pdf import *
from spire.pdf.common import*

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

# PDFドキュメント内のページをループで処理する
for i in range(pdf.Pages.Count):
    # ページを取得する
    page = pdf.Pages.get_Item(i)
    # 特定のテキストの出現箇所を検索する
    result = page.FindText("クラウドサーバー", TextFindParameter.none)
    # 検索されたテキストをハイライト表示する
    for text in result.Finds:
        text.ApplyHighLight(Color.get_Cyan())

# ドキュメントを保存する
pdf.SaveToFile("output/検索とハイライト.pdf")
```

![PDF内のテキストの検索とハイライト](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/f8a77e18-4c61-86bc-8045-f76480b19ae2.png)

## PDFページ上の特定領域のテキストを検索・ハイライト
PDFページ全体から指定されたテキストを見つけて強調表示するだけでなく、開発者は **PdfPageBase.FindText()** メソッドに **RectangleF** インスタンス（ページ上の矩形領域を指す）を渡して、ページ上の指定された領域から指定されたテキストを見つけることもできます。その詳細な手順は以下のとおりです。

- **PdfDocument** クラスのオブジェクトを作成し、**PdfDocument.LoadFromFile()** メソッドを使ってPDF文書を読み込みます。
- **PdfDocument.Pages.get_Item()** メソッドを使って文書の最初のページを取得します。
- **RectangleF** のインスタンスを作成します。
- **PdfPageBase.FindText()** メソッドを使用して、最初のページの指定した矩形領域内で特定のテキストが出現する箇所をすべて検索します。
- 見つかったテキストをループし、**ApplyHighLight()** メソッドを使用して各テキストにハイライト色を適用します。
- **PdfDocument.SaveToFile()** メソッドを使用してドキュメントを保存します。

**Python**
```python
from spire.pdf.common import *
from spire.pdf import *

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

# ページを取得する
pdfPageBase = pdf.Pages.get_Item(0)

# 矩形領域を定義する
rctg = RectangleF(0.0, 0.0, pdfPageBase.ActualSize.Width, 300.0)

# 矩形領域内で指定のテキストの出現箇所を検索する
findCollection = pdfPageBase.FindText(rctg, "クラウドサーバー", TextFindParameter.IgnoreCase)

# 検索されたテキストをループで処理する
for find in findCollection.Finds:
    # 各検索結果のテキストをハイライト表示する
    find.ApplyHighLight(Color.get_Green())

# ドキュメントを保存する
pdf.SaveToFile("output/領域内の検索とハイライト.pdf")
pdf.Close()
```

![PDFページ上の特定領域のテキストを検索・ハイライト](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/93a19299-e70a-ec4f-76c0-b0bdf390e362.png)

## 正規表現によるPDF内のテキストの検索とハイライト
**PdfPageBase.FindText()** メソッドの検索オプションをTextFindParameter.Regexとして指定すると、開発者はPDFページ上のテキストを正規表現で検索することができます。以下はその例です。

- **PdfDocument** クラスのオブジェクトを作成し、**PdfDocument.LoadFromFile()** メソッドを使ってPDF文書を読み込みます。
- 正規表現文字列を指定します。
- **PdfDocument.Pages.get_Item()** メソッドを使ってページを取得します。
- **PdfPageBase.FindText()** メソッドを使用して、ページ上の正規表現と一致するテキストを検索します。
- マッチしたテキストをループし、**ApplyHighLight()** メソッドを使用してテキストにハイライト色を適用します。
- **PdfDocument.SaveToFile()** メソッドを使用してドキュメントを保存します。

**Python**
```python
from spire.pdf import *
from spire.pdf.common import *

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

# 数字とパーセンテージにマッチする正規表現を指定する
regex = r'\d+(?:\.\d+)?%?'

# ドキュメントの2ページ目を取得する
page = pdf.Pages.get_Item(1)

# 指定された正規表現を使用してページ上のテキストを検索する
result = page.FindText(regex, TextFindParameter.Regex)

# マッチしたテキストをハイライト表示する
for text in result.Finds:
    text.ApplyHighLight(Color.get_DeepPink())

# ドキュメントを保存する
pdf.SaveToFile("output/正規表現での検索とハイライト.pdf")
```

![正規表現によるPDF内のテキストの検索とハイライト](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/dfca710d-89c1-a16e-e61a-cdcd98d226dd.png)


上記のコンテンツでは、Pythonを使用して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)に行くことができます。