从 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++ 的信息。

也可以看看