從 PDF C++ 中提取文本

從文檔(PDF、文字處理、網頁等)中提取文本在數字信息領域有多種用例。例如,它可用於解析文檔、執行文本分析、信息檢索、將文檔內容存儲到數據庫中等等。如果我們縮小範圍,PDF 是使用最廣泛的文檔格式之一,用於保存和共享數字信息。這種流行使 PDF 文檔成為一個巨大的信息源。因此,從 PDF 文檔中解析或提取文本可能涉及許多文本分析場景。

為了在 C++ 應用程序中自動執行 PDF 解析,本文演示瞭如何使用 C++ 從 PDF 文檔中提取文本。它涵蓋以下文本提取方案:

  • 使用 C++ 從 PDF 文檔中提取文本。
  • 使用 C++ 從 PDF 文檔的特定頁面中提取文本。
  • 使用 C++ 從 PDF 文檔逐頁提取文本。

C++ PDF 閱讀器和文本提取器庫

為了從 PDF 文檔中提取文本,我們將使用 Aspose.PDF for C++,這是一個強大的 PDF 庫,用於創建、轉換和解析 PDF 文檔。您可以從 下載 部分下載庫文件以及運行代碼示例。

使用 C++ 從 PDF 中提取文本

Aspose.PDF for C++ 允許您通過幾個簡單的步驟解析 PDF 文檔。以下是從 PDF 文檔中提取文本的方法。

以下代碼示例展示瞭如何使用 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 文檔中的特定頁面提取文本的步驟。

以下代碼示例顯示瞭如何使用 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 逐頁提取文本的步驟。

以下代碼示例顯示瞭如何在 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 for C++ 的更多信息

您可以使用 文檔 探索更多關於 Aspose.PDF for C++ 的信息。

也可以看看