C#はPDF内のテキストを検索して置換します

検索と置換オプションを使用すると、ドキュメント内の特定のテキストを一度に置換できます。このように、ドキュメント全体のテキストの各出現箇所を手動で見つけて更新する必要はありません。この記事ではさらに一歩進んで、PDFドキュメントのテキストの検索と置換機能を自動化する方法について説明します。特に、C#を使用して、PDF全体、特定のページ、またはページ領域内のテキストを検索して置換する方法を学習します。

PDF内のテキストを検索して置換するC#API

Aspose.PDF for .NETは、.NETアプリケーションの基本的なPDF操作機能と高度なPDF操作機能を提供するC#クラスライブラリです。 APIを使用すると、PDFファイル内のテキストをさまざまな方法でシームレスに検索して置き換えることもできます。 APIのDLLをダウンロードするか、NuGetを使用してインストールできます。

PM> Install-Package Aspose.PDF

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

以下は、PDFドキュメント内のテキストを検索して置換する手順です。

  • Documentクラスを使用して、パスを使用してPDFドキュメントをロードします。
  • TextFragmentAbsorberクラスのインスタンスを作成し、そのコンストラクターに検索フレーズを提供します。
  • Document.Pages.Accept(TextFragmentAbsorber)を使用して、PDFのすべてのページのテキストアブソーバーを受け入れます。
  • 抽出されたテキストフラグメントをTextFragmentCollectionオブジェクトに取得します。
  • 見つかったTextFragmentCollectionをループして、各フラグメントのテキストを置き換えます。
  • Document.Save(String)メソッドを使用して、更新されたPDFドキュメントを保存します。

次のコードサンプルは、C#を使用してPDF内のテキストを検索して置換する方法を示しています。

// ドキュメントを開く
Document pdfDocument = new Document("Document.pdf");

// TextAbsorberオブジェクトを作成して、入力検索フレーズのすべてのインスタンスを検索します
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("text");

// すべてのページの吸収体を受け入れる
pdfDocument.Pages.Accept(textFragmentAbsorber);

// 抽出されたテキストフラグメントを取得します
TextFragmentCollection textFragmentCollection = textFragmentAbsorber.TextFragments;

// フラグメントをループします
foreach (TextFragment textFragment in textFragmentCollection)
{
    // テキストやその他のプロパティを更新する
    textFragment.Text = "TEXT";
    textFragment.TextState.Font = FontRepository.FindFont("Verdana");
    textFragment.TextState.FontSize = 22;
    textFragment.TextState.ForegroundColor = Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Blue);
    textFragment.TextState.BackgroundColor = Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Green);
}
            
// 結果のPDFドキュメントを保存します。
pdfDocument.Save("updated-document.pdf");

C#を使用して特定のPDFページのテキストを置き換える

以下は、PDFドキュメントの特定のページのテキストを検索して置き換える手順です。

  • Documentクラスを使用して、パスを使用してPDFドキュメントをロードします。
  • TextFragmentAbsorberクラスのインスタンスを作成し、そのコンストラクターに検索フレーズを提供します。
  • [Document.Pages1.Accept(TextFragmentAbsorber)]12を使用して、目的のページのテキストアブソーバーを受け入れます。
  • 見つかったTextFragmentAbsorber.TextFragmentsコレクションをループして、各フラグメントのテキストを置き換えます。
  • Document.Save(String)メソッドを使用して、更新されたPDFドキュメントを保存します。

次のコードサンプルは、C#を使用してPDFの特定のページのテキストを検索して置換する方法を示しています。

// ドキュメントを開く
Document pdfDocument = new Document("Document.pdf");

// TextAbsorberオブジェクトを作成して、入力検索フレーズのすべてのインスタンスを検索します
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("text");

// 必要に応じてアブソーバーを受け入れます
pdfDocument.Pages[1].Accept(textFragmentAbsorber);

// 抽出されたテキストフラグメントを取得します
TextFragmentCollection textFragmentCollection = textFragmentAbsorber.TextFragments;

// フラグメントをループします
foreach (TextFragment textFragment in textFragmentCollection)
{
    // テキストやその他のプロパティを更新する
    textFragment.Text = "TEXT";
    textFragment.TextState.Font = FontRepository.FindFont("Verdana");
    textFragment.TextState.FontSize = 22;
    textFragment.TextState.ForegroundColor = Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Blue);
    textFragment.TextState.BackgroundColor = Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Green);
}

// 結果のPDFドキュメントを保存します。
pdfDocument.Save("updated-document.pdf");

C#を使用してPDFページ領域のテキストを置き換える

PDFドキュメントのページの特定の領域にあるテキストを検索して置き換えることもできます。次の手順は、特定の領域を定義して、その中のテキストを置き換える方法を示しています。

  • Documentクラスを使用して、パスを使用してPDFドキュメントをロードします。
  • TextFragmentAbsorberクラスのインスタンスを作成し、そのコンストラクターに検索フレーズを提供します。
  • Document.Pages[0].Accept(TextFragmentAbsorber)を使用して、目的のページのテキストアブソーバーを受け入れます。
  • Rectangleクラスを使用してページ領域を定義します。
  • TextFragmentAbsorber.TextFragmentsコレクションをループして、各フラグメントのテキストを置き換えます。
  • Document.Save(String)メソッドを使用して、更新されたPDFドキュメントを保存します。

次のコードサンプルは、C#を使用してPDF内の特定のページ領域のテキストを検索して置換する方法を示しています。

// PDFファイルをロード
Document pdf = new Document("Document.pdf");

// TextFragmentAbsorberオブジェクトをインスタンス化します
TextFragmentAbsorber TextFragmentAbsorberAddress = new TextFragmentAbsorber();

// ページ境界内のテキストを検索
TextFragmentAbsorberAddress.TextSearchOptions.LimitToPageBounds = true;

// TextSearchオプションのページ領域を指定します
TextFragmentAbsorberAddress.TextSearchOptions.Rectangle = new Rectangle(100, 100, 200, 200);

// PDFファイルの最初のページからテキストを検索
pdf.Pages[1].Accept(TextFragmentAbsorberAddress);

// 個々のTextFragmentを反復処理します
foreach (TextFragment tf in TextFragmentAbsorberAddress.TextFragments)
{
    // テキストを空白文字に更新
    tf.Text = "";
}

// テキスト置換後に更新されたPDFファイルを保存する
pdf.Save("output.pdf");

C#の正規表現を使用してPDFのテキストを置き換える

正規表現を使用して、特定のパターンに一致するテキストオカレンスを検索して置き換えることもできます。このためには、単純な検索フレーズの代わりに正規表現を提供し、TextSearchOptionsを使用するだけで済みます。そのための手順は次のとおりです。

次のコードサンプルは、C#を使用した正規表現を使用してPDF内のテキストを検索および置換する方法を示しています。

// ドキュメントを開く
Document pdfDocument = new Document("Document.pdf");

// TextAbsorberオブジェクトを作成して、正規表現に一致するすべてのフレーズを検索します
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("\\d{4}-\\d{4}"); // Like 1999-2000

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

// 1ページのアブソーバーを受け入れる
pdfDocument.Pages[1].Accept(textFragmentAbsorber);

// 抽出されたテキストフラグメントを取得します
TextFragmentCollection textFragmentCollection = textFragmentAbsorber.TextFragments;

// フラグメントをループします
foreach (TextFragment textFragment in textFragmentCollection)
{
    // テキストやその他のプロパティを更新する
    textFragment.Text = "New Phrase";
    // オブジェクトのインスタンスに設定します。
    textFragment.TextState.Font = FontRepository.FindFont("Verdana");
    textFragment.TextState.FontSize = 22;
    textFragment.TextState.ForegroundColor = Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Blue);
    textFragment.TextState.BackgroundColor = Aspose.Pdf.Color.FromRgb(System.Drawing.Color.Green);
}

// PDFを保存
pdfDocument.Save("output.pdf");

結論

最近では、Webまたはデスクトップアプリケーション内からPDFドキュメントを操作するために、PDF自動化が広く採用されています。この記事では、C#を使用してプログラムでテキストを検索および置換する便利なPDF自動化機能について説明しました。ステップバイステップガイドとコードサンプルは、PDF全体、PDFの特定のページ、またはページ領域のテキストを検索して置き換える方法を示しています。 APIのドキュメントを使用して、より高度な機能を調べることができます。

関連項目