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