從文檔(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 文檔中提取文本的方法。
- 創建 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->setStartPage() 和 PdfExtractor->setEndPage() 函數設置起始頁碼和結束頁碼。
- 使用 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 for C++ 的更多信息
您可以使用 文檔 探索更多關於 Aspose.PDF for C++ 的信息。