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

PDFは、組織と個人の間でドキュメントを共有するために広く使用されている一般的な形式です。共有する前に、PDFドキュメント内の一部のテキストを見つけて置き換える必要があるシナリオがあるかもしれません。これは手動で行うことができますが、時間がかかり、効率が低下します。より適切で高速なオプションは、これをプログラムで実行することです。この記事では、C++を使用してPDFファイル内のテキストを検索および置換する方法を学習します。

PDFファイル内のテキストを検索して置換するためのC++API

Aspose.PDF for C++は、PDFファイルを操作するためのC++ライブラリです。 PDFワークフローのさまざまな側面を自動化するのに役立つ一連の機能を提供します。そのような機能の1つは、PDFファイル内のテキストを検索して置き換えることです。 APIは、NuGetからインストールするか、ダウンロードセクションから直接ダウンロードできます。

PM> Install-Package Aspose.PDF.Cpp

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

Aspose.PDF for C++は、PDFドキュメント内のテキストを検索するためのTextFragmentAbsorberクラスを提供します。このクラスを検索するテキストで初期化し、それを使用して一致するすべてのテキストフラグメントを取得します。すべてのフラグメントが利用可能になったら、それらをループしてテキストを置き換えます。以下は、C++を使用してPDFファイル内のテキストを検索して置換する手順です。

以下は、C++を使用してPDFファイル全体のテキストを検索して置換するためのサンプルコードです。

// PDFファイルをロード
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\Sample 1.pdf");

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

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

// 抽出されたテキストフラグメントを取得します
auto textFragmentCollection = textFragmentAbsorber->get_TextFragments();

// フラグメントをループします
for (auto textFragment : textFragmentCollection)
{
	// テキストやその他のプロパティを更新する
	textFragment->set_Text(u"UPDATED TEXT");
	textFragment->get_TextState()->set_Font(FontRepository::FindFont(u"TimesNewRoman"));
	textFragment->get_TextState()->set_FontSize(22);
}

// 結果のPDFドキュメントを保存します。
pdfDocument->Save(u"OutputDirectory\\UpdatedDocument.pdf");

C++特定のPDFページのテキストを検索して置換

ドキュメント全体ではなく、特定のページのテキストのみを検索して置換したい場合があります。このために、テキストを置き換えるページのTextFragmentAbsorberオブジェクトを受け入れます。以下は、PDFドキュメントの特定のページのテキストを検索して置換する手順です。

以下は、C++を使用して特定のPDFページのテキストを検索して置換するためのサンプルコードです。

// PDFファイルをロード
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\Sample 1.pdf");

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

// ドキュメントの2ページ目のアブソーバーを受け入れます
pdfDocument->get_Pages()->idx_get(2)->Accept(textFragmentAbsorber);

// 抽出されたテキストフラグメントを取得します
auto textFragmentCollection = textFragmentAbsorber->get_TextFragments();

// フラグメントをループします
for (auto textFragment : textFragmentCollection)
{
	// テキストやその他のプロパティを更新する
	textFragment->set_Text(u"UPDATED TEXT");
	textFragment->get_TextState()->set_Font(FontRepository::FindFont(u"TimesNewRoman"));
	textFragment->get_TextState()->set_FontSize(22);
}

// 結果のPDFドキュメントを保存します。
pdfDocument->Save(u"OutputDirectory\\UpdatedDocument2.pdf");

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

ページ全体を検索する代わりに、テキストを置き換えるページの領域を指定できます。このために、APIはRectangleクラスを提供します。以下は、PDFページの特定の部分のテキストを検索して置換する手順です。

以下は、特定のPDFページ領域のテキストを検索して置換するためのサンプルコードです。

// PDFファイルをロード
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\Sample 1.pdf");

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

// ページ境界内のテキストを検索
textFragmentAbsorber->get_TextSearchOptions()->set_LimitToPageBounds(true);

// TextSearchOptionsのページ領域を指定します
textFragmentAbsorber->get_TextSearchOptions()->set_Rectangle(MakeObject<Rectangle>(100, 100, 800, 700));

// ドキュメントの最初のページのアブソーバーを受け入れます
pdfDocument->get_Pages()->idx_get(1)->Accept(textFragmentAbsorber);

// 抽出されたテキストフラグメントを取得します
auto textFragmentCollection = textFragmentAbsorber->get_TextFragments();

// フラグメントをループします
for (auto textFragment : textFragmentCollection)
{
	// テキストやその他のプロパティを更新する
	textFragment->set_Text(u"UPDATED TEXT");
	textFragment->get_TextState()->set_Font(FontRepository::FindFont(u"TimesNewRoman"));
	textFragment->get_TextState()->set_FontSize(22);
}

// 結果のPDFドキュメントを保存します。
pdfDocument->Save(u"OutputDirectory\\UpdatedDocument.pdf");

正規表現を使用してPDFファイル内のテキストを検索および置換

Aspose.PDF for C++には、正規表現を使用してテキストを検索する機能もあります。正規表現を使用すると、メールアドレスや電話番号などのテキストを見つけることができます。このためには、検索文字列の代わりに正規表現を指定し、TextSearchOptionsクラスを使用して正規表現を使用していることを示す必要があります。検索用の式。以下は、正規表現を使用してPDFファイル内のテキストを検索および置換する手順です。

以下は、正規表現を使用してPDFファイル内のテキストを検索および置換するためのサンプルコードです。

// PDFファイルをロード
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\Sample 2.pdf");

// TextAbsorberオブジェクトを作成して、入力検索フレーズのすべてのインスタンスを検索します
auto textFragmentAbsorber = MakeObject<TextFragmentAbsorber>(u"\\d{4} - \\d{4}"); // Like 1999-2000

// 正規表現の使用を有効にするためのテキスト検索オプションを設定します
auto textSearchOptions = MakeObject<TextSearchOptions>(true);
textFragmentAbsorber->set_TextSearchOptions(textSearchOptions);

// ドキュメントのすべてのページでアブソーバーを受け入れます
pdfDocument->get_Pages()->Accept(textFragmentAbsorber);

// 抽出されたテキストフラグメントを取得します
auto textFragmentCollection = textFragmentAbsorber->get_TextFragments();

// フラグメントをループします
for (auto textFragment : textFragmentCollection)
{
	// テキストやその他のプロパティを更新する
	textFragment->set_Text(u"UPDATED TEXT");
	textFragment->get_TextState()->set_Font(FontRepository::FindFont(u"TimesNewRoman"));
	textFragment->get_TextState()->set_FontSize(22);
}

// 結果のPDFドキュメントを保存します。
pdfDocument->Save(u"OutputDirectory\\UpdatedDocument.pdf");

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

無料の一時ライセンスをリクエストすることで、評価の制限なしにAPIを試すことができます。

結論

この記事では、C++を使用してPDFファイル内のテキストを検索および置換する方法を学習しました。 PDFドキュメント全体、特定のPDFページ、またはページの特定の領域のテキストを置き換える方法を見てきました。さらに、正規表現を使用してテキストを検索および置換する方法を学習しました。 Aspose.PDF for C++は、PDFドキュメントの操作を簡単にする多くの追加機能を備えた強力なAPIです。 公式ドキュメントを使用して、APIを詳細に調べることができます。ご不明な点がございましたら、フォーラムまでお気軽にお問い合わせください。

関連項目