PDF を C# を使用して検索する

特定のテキストを PDF ドキュメントで検索することは、文書管理システム、法的レビューツール、請求書処理装置、その他の企業アプリケーションにおいて一般的なタスクです。キーワードを特定したり、特定の値を抽出したり、機密情報を編集したりする場合でも、PDF検索の自動化は多くの時間と労力を節約できます。

このブログ投稿では、C#を使用してプログラムmatically PDFファイル内のテキストを検索する方法を学びます。実用的なC#コードの例を用いて、段階的に主要な機能を説明します。

この記事では以下のトピックを扱っています:

C# ライブラリを使用して PDF ドキュメントを検索する

Aspose.PDF for .NET は、C# を使用して PDF ファイル内のテキストを検索するプロセスを簡素化します。正確な単語を見つけたり、正規表現を使用してパターンを一致させたり、一致したテキストをハイライトまたは置き換えたりすることができます。すべてがわずか数行のコードで実現できます。この強力なライブラリは、PDF ドキュメントを操作するための強力な機能を提供します。開発者が検索機能を簡単に実装できるようにします。Aspose.PDF を使用すると、PDF 内の単語を迅速に見つけることができ、ソフトウェア開発者にとって非常に貴重なツールになります。

PDFテキスト検索に入る前に、開発環境を設定する必要があります。Aspose.PDF for .NETを始めるために、次の手順に従ってください:

1. Aspose.PDF for .NET をインストールします。

releases からダウンロードするか、NuGet 経由でインストールしてください。Visual Studio で .NET プロジェクトを開き、NuGet パッケージ マネージャー コンソールで次のコマンドを実行します:

PM> Install-Package Aspose.PDF

このコマンドは、Aspose.PDFライブラリをあなたのプロジェクトに追加し、その強力なPDF処理機能にアクセスできるようにします。

2. 必要な名前空間をインポートする

C#ファイルの最上部に、これらの using ディレクティブを追加します:

using Aspose.Pdf;
using Aspose.Pdf.Text;

今、Aspose.PDF の API を使用して PDF ファイル内のテキストを検索する準備が整いました。

C#を使用してPDF内のテキストを検索する

Aspose.PDF for .NETを使用すると、PDF内の特定の単語やフレーズを簡単に検索し、それらのすべてのインスタンスを特定し、ハイライトしたり詳細を抽出したりするなどのアクションを実行できます。

以下の手順に従って、基本的なテキスト検索を実行してください:

  1. ターゲットPDFファイルをDocumentクラスを使用してロードします。
  2. TextFragmentAbsorber を作成して、検索キーワードを定義します。
  3. 全ページで Accept() メソッドを使用して吸収器を実行します。
  4. すべての一致するテキストフラグメントを取得します。
  5. マッチの数を印刷します。
  6. 各マッチをループして、そのページ番号と共に表示します。

以下のコード例は、これらのステップを実装しています。

// PDFファイルを読み込んでください。
Document pdfDocument = new Document("sample.pdf");

// 検索キーワードを使用してテキストアブソーバーを作成します。
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("invoice");

// すべてのページにアブソーバーを適用してください。
pdfDocument.Pages.Accept(textFragmentAbsorber);

// 一致したテキストの断片を取得する
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;

// キーワードが見つかった回数を印刷します。
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");

// 各見つかったテキストをループして印刷します。
foreach (TextFragment fragment in textFragments)
{
    Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}

出力例

Found 3 instance(s) of the keyword.
Text: invoice | Page: 1
Text: invoice | Page: 2
Text: invoice | Page: 3

この例は、PDF内のすべてのページで機能するシンプルなキーワード検索を示しています。マッチしたテキストとそのページ番号が表示されます。

PDF検索で使用される主要なクラスの理解

コードで何が起こっているのかをよりよく理解するために、関係する主要なクラスとメソッドの簡単な内訳を示します:

  • Document: PDFファイル全体を表します。ページ、コンテンツ、構造へのアクセスを提供します。
  • TextFragmentAbsorber: PDF内の指定された文字列またはパターンのすべての出現を見つけます。また、大文字と小文字を区別しない検索や正規表現に基づく検索などの機能を有効にすることもできます。
  • Accept(): 各ページにアブソーバーを適用します。ドキュメントをスキャンし、一致するフラグメントを収集します。
  • TextFragments: 吸収器によって返された一致したテキストフラグメントのコレクションです。
  • TextFragment: 各個別の一致は、内容、位置、およびページ番号などの詳細とともに。

C#を使用した大文字と小文字を区別しない完全一致検索

PDFコンテンツを検索する際には、システムが一致を見つける方法を制御して、正確な結果を保証する必要があります。場合によっては、文字の大文字と小文字を無視したい("Invoice" 対 "invoice")場合や、部分一致ではなく完全な単語のみを一致させたい場合があります。

Aspose.PDF for .NET は、両方の作業を行うためのツールを提供します。

ケース無視検索

デフォルトでは、検索は大文字と小文字を区別します。文字の大文字小文字を無視するには、TextSearchOptionsIgnoreCase 有効で使用します:

// Load the PDF file
Document pdfDocument = new Document("sample.pdf");

// テキストアブソーバーを大文字小文字を区別しない正規表現で作成してください。
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("(?i)INVOICE");

// テキスト検索オプションを設定して正規表現の使用を可能にします
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;

// すべてのページにアブソーバーを適用してください。
pdfDocument.Pages.Accept(textFragmentAbsorber);

// 一致したテキストの断片を取得してください。
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;

// Output the number of matches found
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");

// テキストフラグメントをループして表示します。
foreach (TextFragment fragment in textFragments)
{
    Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}

この検索は「Invoice」、「invoice」、「INVOICE」、およびその他のバリエーションを見つけます。

完全な単語のみを一致させる

部分一致も防ぐことができます。例えば、carを検索してもcarescarに一致しないようにするべきです。

// Load the PDF file
Document pdfDocument = new Document("sample.pdf");

// テキストアブソーバーを作成するには、完全な単語一致のための正規表現パターンを使用します。
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(@"\bcar\b");

// テキスト検索オプションを設定して、正規表現の使用を有効にします。
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;

// すべてのページにアブソーバーを適用します。
pdfDocument.Pages.Accept(textFragmentAbsorber);

// 一致するテキストフラグメントを取得します
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;

// 見つかった試合数を出力します。
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");

// 見つかった各テキストフラグメントをループして表示する
foreach (TextFragment fragment in textFragments)
{
    Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}

これは「car」という単語の単独のインスタンスのみが一致することを保証します。

PDFの中で正規表現を使った検索

特定の単語だけでなく、日付、メールアドレス、または参照番号などのパターンを一致させる必要がある場合があります。そのため、正規表現(regex)が役立ちます。

Aspose.PDF for .NET を使用すると、PDF ドキュメントの任意の部分で高度なテキスト検索のために regex を使用できます。

例:PDF内のすべての日付を見つける

dd/mm/yyyy形式の日付をすべて見つけたいとしましょう:

// PDFを読み込み、テキストを検索します。
Document pdfDocument = new Document("sample.pdf");

// 検索オプションでregexを有効にする
TextSearchOptions searchOptions = new TextSearchOptions(true)
{
    IsRegularExpressionUsed = true
};

// 日付パターンを持つアブソーバーを作成します
TextFragmentAbsorber absorber = new TextFragmentAbsorber(@"\d{2}/\d{2}/\d{4}", searchOptions);

// ページに吸収剤を適用してください。
pdfDocument.Pages.Accept(absorber);

// 見つかったパターンをループして印刷する
foreach (TextFragment fragment in absorber.TextFragments)
{
    Console.WriteLine($"Found date: {fragment.Text} on Page {fragment.Page.Number}");
}

他の便利なパターン:

  • Emails: \b[A-Za-z0-9.%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b
  • Phone Numbers: \d{3}[-.\s]??\d{3}[-.\s]??\d{4}
  • 請求書番号: INV-\d+

Regex は静的テキストを超えた検索機能を拡張し、非構造化ドキュメントから構造化データを抽出するのに役立ちます。

テキストを検索し、位置の詳細を抽出します。

時には、テキストを見つけるだけでは十分ではありません。PDF内の正確な場所を知る必要があるかもしれません。Aspose.PDFを使用すると、すべての一致のページ番号、座標、およびフォーマットの詳細を抽出できます。

この機能は、インデックスの構築、ドキュメントのタグ付け、またはクリック可能なリンクの作成に特に役立ちます。

例:各一致の位置を取得する

// PDFを読み込み、テキストを検索します。
Document pdfDocument = new Document("sample.pdf");
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber);

// マッチした断片を取得する
TextFragmentCollection fragments = absorber.TextFragments;

// 各一致の位置とテキストを印刷してください
foreach (TextFragment fragment in fragments)
{
    Console.WriteLine($"Text: {fragment.Text}");
    Console.WriteLine($"Page: {fragment.Page.Number}");
    Console.WriteLine($"Position - X: {fragment.Position.XIndent}, Y: {fragment.Position.YIndent}");
    Console.WriteLine($"Font: {fragment.TextState.Font.FontName}, Size: {fragment.TextState.FontSize}");
    Console.WriteLine("------------");
}

サンプル出力

Text: invoice
Page: 1
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
Text: invoice
Page: 2
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
Text: invoice
Page: 3
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------

あなたは今、「請求書」という単語がどこにあるか、どのようにスタイルが適用されているかを正確に知っています。このレベルの詳細は、注釈、ツールチップ、または動的ハイライトなどの高度な処理の扉を開きます。

見つかったテキストのハイライトまたは置き換え

PDF内の特定のテキストを見つけたら、それをハイライト表示したり、新しいコンテンツに置き換えたりすることで、さらに進めることができます。Aspose.PDF for .NETを使用すると、TextFragmentオブジェクトを利用して、一致したテキストのスタイルを簡単に変更したり修正したりできます。

PDF内のテキストを検索して強調表示する

テキストの背景とフォントの色を変更することで、視覚的に強調することができます。

TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber);

foreach (TextFragment fragment in absorber.TextFragments)
{
    // Highlight by changing text appearance
    fragment.TextState.BackgroundColor = Color.Yellow;
    fragment.TextState.ForegroundColor = Color.Red;
    fragment.TextState.FontStyle = FontStyles.Bold;
}

これは、レビュー、赤ライン作業、または注釈付きレポートを作成するのに役立ちます。

テキストの検索と置換

文書のテキストを修正または更新する必要がありますか?直接置き換えてください:

foreach (TextFragment fragment in absorber.TextFragments)
{
    fragment.Text = "REDACTED";
}

新しいフォーマットを置き換えながら適用することもできます:

fragment.TextState.FontSize = 12;
fragment.TextState.Font = FontRepository.FindFont("Arial");
fragment.TextState.ForegroundColor = Color.Black;

プログラムでテキストをハイライトして置き換えることで、テンプレートのクリーニング、古くなったコンテンツの更新、またはプライベートデータの検閲など、多くの文書処理タスクを自動化できます。

すべてのページまたは特定のページを検索する

デフォルトでは、Aspose.PDFはPDF内のすべてのページを検索します。しかし、特に大きなファイルで作業している場合やコンテンツが予測可能な場合には、特定のページまたはページの範囲に検索を制限したいことがあります。

Aspose.PDFは、両方を簡単に行うことができます。

すべてのページを検索 (デフォルト)

ページを指定しない場合、アブソーバーは自動的にすべてのページを検索します。

TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber); // Searches all pages

特定のページを検索する

単一のページを直接ターゲットにして検索することもできます:

TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");

// Search only on page 2
pdfDocument.Pages[2].Accept(absorber);

範囲内のページを検索する

カスタム範囲を検索するには(例:ページ2から4まで)、範囲をループするだけです:

TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");

// Loop through selected pages
for (int i = 2; i <= 4; i++)
{
    pdfDocument.Pages[i].Accept(absorber);
}

このアプローチは、特にスキャンされた文書やセクション化された文書に対して、パフォーマンスと精度に完全なコントロールを提供します。

高度なユースケース:機密情報の検索と赤分

法務、HR、または財務文書では、共有する前に名前、ID、または口座番号などの機密情報を隠すことが一般的です。Aspose.PDF for .NETは、検索機能と抹消機能を組み合わせることで、これを簡単に行うことができます。

用語を検索し、次に RedactionAnnotation を使用して黒いオーバーレイを適用できます。

// PDFを読み込み、テキストを検索します。
Document pdfDocument = new Document("sample.pdf");

// 「John Doe」という名前を検索してください。
TextFragmentAbsorber absorber = new TextFragmentAbsorber("John Doe");
pdfDocument.Pages.Accept(absorber);

// 見つかった断片をループして黒塗りする
foreach (TextFragment fragment in absorber.TextFragments)
{
    // 位置と寸法を取得する
    Aspose.Pdf.Rectangle rect = new Aspose.Pdf.Rectangle(
        fragment.Position.XIndent,
        fragment.Position.YIndent,
        fragment.Position.XIndent + fragment.Rectangle.Width,
        fragment.Position.YIndent + fragment.Rectangle.Height
    );

    // 赤刷り注釈を作成する
    RedactionAnnotation redaction = new RedactionAnnotation(fragment.Page, rect)
    {
        FillColor = Color.Black,
        Color = Color.Black
    };

    // Add and apply redaction
    fragment.Page.Annotations.Add(redaction);
    redaction.Redact();
}
// Save the modified document
pdfDocument.Save("SearchAndRedact.pdf");

何が起こるのか

  • ターゲットテキスト("ジョン・ドウ")は見つかり、黒いボックスで覆われています。
  • これは単なる視覚的なものではなく、PDFレイヤーからコンテンツを削除し、ファイルから復元不可能にします。

無料ライセンスを取得する

今、あなたが Aspose.PDF for .NET を使って PDF 内のテキストを検索、抽出、ハイライト、削除する方法を学んだので、その知識を実践に移す時が来ました。

自分で試してみてください:無料の一時ライセンスをダウンロードして、自分自身のスマートPDFツールを作り始めましょう。

PDF内を検索: 無料リソース

PDF内のテキストを検索するだけを超えたいですか?これらの無料で開発者に優しいリソースを使って、Aspose.PDF for .NETの全機能を探求してください:

  • 開発者ガイド PDFファイルをプログラム的に作成、修正、変換、保護する方法を学びましょう。 Aspose.PDF for .NET Documentation

  • 無料オンラインツール ブラウザで直接PDFファイルを変換、統合、分割、編集します。 Aspose Free PDF Tools

  • API リファレンス Aspose.PDF for .NETのクラス、プロパティ、およびメソッドについて学び、開発を加速させましょう。 Aspose.PDF API Reference

  • サポートフォーラム 質問をする、問題を報告する、そしてAsposeの専門家から直接回答を得る。 Aspose Support Forum

これらのリソースは無料で利用でき、PDF開発の旅から最大限の利益を得るために役立ちます。

結論

PDFファイル内のテキストを検索することは、データを抽出したり、コンテンツを監査したり、ファイルを塗りつぶす準備をしたりするなど、多くのドキュメントベースのアプリケーションにとって重要な機能です。Aspose.PDF for .NETを使用すると、キーワード検索を簡単に実行したり、正規表現を使用したり、結果をハイライトしたり、敏感な情報を精度と制御を持って塗りつぶしたりできます。Aspose.PDFは、複雑なPDF操作を簡素化する開発者向けのAPIを提供し、時間を節約しながら強力な自動化を可能にします。

ご質問がある場合やさらなる支援が必要な場合は、ぜひ私たちの free support forum にお問い合わせください。

See Also