ドキュメント(PDF、ワードプロセッシング、Webページなど)からのテキスト抽出には、デジタル情報の世界でさまざまなユースケースがあります。たとえば、ドキュメントの解析、テキスト分析の実行、情報検索、ドキュメントのコンテンツのデータベースへの保存などに使用できます。絞り込んでみると、PDFはデジタル情報を保持および共有するために最も広く使用されているドキュメント形式の1つです。この人気により、PDFドキュメントは膨大な情報源になっています。したがって、PDFドキュメントからのテキストの解析または抽出は、多くのテキスト分析シナリオに関係する可能性があります。
この記事では、C++アプリケーションでPDFの解析を自動化するために、C++を使用してPDFドキュメントからテキストを抽出する方法を示します。次のテキスト抽出シナリオについて説明します。
- C++を使用してPDFドキュメントからテキストを抽出します。
- C++を使用して、PDFドキュメントの特定のページからテキストを抽出します。
- C++を使用したPDFドキュメントからのページごとのテキスト抽出。
C++PDFリーダーおよびテキスト抽出ライブラリ
PDFドキュメントからテキストを抽出するために、PDFドキュメントを作成、変換、および解析するための強力なPDFライブラリであるAspose.PDF for C++を使用します。 ダウンロードセクションから、ライブラリファイルと実行中のコードサンプルをダウンロードできます。
C++を使用してPDFからテキストを抽出する
Aspose.PDF for C++を使用すると、いくつかの簡単な手順でPDFドキュメントを解析できます。以下は、PDFドキュメントからテキストを抽出するためのレシピです。
- PdfExtractorクラスのオブジェクトを作成します。
- PdfExtractor->BindPdf()関数を使用してPDFドキュメントをロードします。
- PdfExtractor->ExtractText()関数を使用して、PDFドキュメントからPdfExtractorにテキストを抽出します。
- 抽出したテキストをMemoryStreamオブジェクトに保存します。
- MemoryStreamから文字列としてテキストを読み取ります。
次のコードサンプルは、C++を使用してPDFからテキストを抽出する方法を示しています。
auto extractor = MakeObject<Facades::PdfExtractor>();
// ソースPDFドキュメントをバインドする
extractor->BindPdf(u"candy.pdf");
// PDFからPdfExtractorにテキストを抽出します
extractor->ExtractText();
auto memStream = MakeObject<IO::MemoryStream>();
// テキストをメモリストリームに保存する
extractor->GetText(memStream);
auto unicode = System::Text::Encoding::get_Unicode();
String allText = unicode->GetString(memStream->ToArray());
// 抽出したテキストを印刷する
Console::WriteLine(u"Extracted text:");
Console::WriteLine(allText);
C++を使用してPDFの特定のページからテキストを抽出する
数ページのPDFからのみテキストを抽出する必要がある場合があります。このような場合、開始ページ番号と終了ページ番号を設定することで、PDFのページの範囲を指定できます。以下は、PDFドキュメントの特定のページからテキストを抽出する手順です。
- PdfExtractorクラスのオブジェクトを作成します。
- PdfExtractor->BindPdf()関数を使用してPDFドキュメントをロードします。
- PdfExtractor->set_StartPage()関数とPdfExtractor->set_EndPage()関数をそれぞれ使用して、開始ページ番号と終了ページ番号を設定します。
- PdfExtractor->ExtractText()関数を使用してPDFからテキストを抽出します。
- 抽出したテキストをMemoryStreamオブジェクトに保存します。
- MemoryStreamから文字列としてテキストを読み取ります。
次のコードサンプルは、C++でPDFの特定のページからテキストを抽出する方法を示しています。
auto extractor = MakeObject<Facades::PdfExtractor>();
// ソースPDFドキュメントをバインドする
extractor->BindPdf(u"candy.pdf");
// ページ範囲を設定する
extractor->set_StartPage(2);
extractor->set_EndPage(2);
// PDFからPdfExtractorにテキストを抽出します
extractor->ExtractText();
auto memStream = MakeObject<IO::MemoryStream>();
// テキストをメモリストリームに保存する
extractor->GetText(memStream);
auto unicode = System::Text::Encoding::get_Unicode();
String allText = unicode->GetString(memStream->ToArray());
// 抽出したテキストを印刷する
Console::WriteLine(u"Extracted text:");
Console::WriteLine(allText);
C++でPDFからページごとのテキストを抽出する
PDFドキュメントからすべてのテキストを抽出する代わりに、ドキュメントのすべてのページから個別にテキストを抽出できます。以下は、PDFからページごとのテキスト抽出を実行する手順です。
- PdfExtractorクラスのオブジェクトを作成します。
- PdfExtractor->BindPdf()関数を使用してPDFドキュメントをロードします。
- PdfExtractor->ExtractText()関数を呼び出して、PDFドキュメントからPdfExtractorにテキストを取得します。
- PdfExtractor->HasNextPageText()関数を使用してすべてのページをループします。
- PdfExtractor->GetNextPageText()関数を使用して、テキストをメモリストリームに抽出します。
- メモリストリームからテキストを読み取ります。
次のコードサンプルは、C++でPDFからページごとにテキストを抽出する方法を示しています。
auto extractor = MakeObject<Facades::PdfExtractor>();
// ソースPDFドキュメントをバインドする
extractor->BindPdf(u"candy.pdf");
// PDFからPdfExtractorにテキストを抽出します
extractor->ExtractText();
auto unicode = System::Text::Encoding::get_Unicode();
int pageNumber = 1;
while (extractor->HasNextPageText())
{
auto memStream = MakeObject<IO::MemoryStream>();
extractor->GetNextPageText(memStream);
String text;
// StreamReaderコンストラクターでUnicodeエンコーディングタイプを指定します
auto streamReader = MakeObject<StreamReader>(memStream, unicode);
streamReader->get_BaseStream()->Seek(0, SeekOrigin::Begin);
text = streamReader->ReadToEnd();
streamReader->Dispose();
// 抽出したテキストを印刷する
std::cout << "Page: " << pageNumber << "\n";
Console::Write(text);
std::cout << "\n------------------------\n";
pageNumber++;
}
Aspose.PDF forC++の詳細
ドキュメントを使用して、C++用のAspose.PDFの詳細を調べることができます。