从 PDF 文档中提取文本功能在各个领域都有着广泛的应用。当处理大量的 PDF 格式合同、报告和财务数据。提取 PDF 文本可以快速检索关键信息,进行数据分析;当需要将 PDF 文档内容翻译成其他语言时,可以先提取原 PDF 文档文本内容;同时从 PDF 文档中提取的文本内容可以作为数据输入的一部分,与其他系统或应用进行无缝对接。在本文中,您将学习如何使用 Spire.PDF for C++ 从 PDF 文档中提取文本。
安装 Spire.PDF for C++
有两种方法可以将 Spire.PDF for C++ 集成到您的应用程序中。一种方法是通过 NuGet 安装它,另一种方法是从我们的网站下载包并将库复制到您的程序中。通过 NuGet 安装更简单,更推荐使用。您可以通过访问以下链接找到更多详细信息。
如何将 Spire.PDF for C++ 集成到 C++ 程序中
从指定页面提取所有文本
Spire.PDF for C++ 提供的 PdfTextExtractor 类用于从可搜索的 PDF 文件中提取文本,PdfTextExtractOptions 类用于管理提取选项。在未设置特定的提取选项时,默认情况下 PdfTextExtractor->ExtractText() 方法会从指定的页面中提取所有文本。详细的步骤如下:
- 创建 PdfDocument 对象。
- 使用 PdfDocument->LoadFromFile() 方法加载 PDF 文件。
- 使用 PdfDocument->GetPages()->GetItem() 方法获取特定的页面。
- 创建 PdfTextExtractor 对象。
- 创建 PdfTextExtractOptions 对象。
- 使用 PdfTextExtractor->ExtractText(PdfTextExtractOptions) 方法从所选页面中提取文本。
- 将提取的文本写入 TXT 文件。
- C++
#include "Spire.Pdf.o.h"
#include <locale>
#include <codecvt>
using namespace Spire::Pdf;
using namespace std;
int main()
{
// 创建PdfDocument对象
intrusive_ptr<PdfDocument> doc = new PdfDocument();
// 加载PDF文档
doc->LoadFromFile(L"极昼极夜是怎么形成的.pdf");
// 获取PDF第一页,遍历文档所有页便可提取文档所有文本内容
intrusive_ptr<PdfPageBase> page = doc->GetPages()->GetItem(0);
// 创建PdfTextExtractor 对象
intrusive_ptr<PdfTextExtractor> textExtractor = new PdfTextExtractor(page);
// 创建PdfTextExtractOptions 对象
intrusive_ptr<PdfTextExtractOptions> extractOptions = new PdfTextExtractOptions();
// 从页面中提取文本
wstring text = textExtractor->ExtractText(extractOptions);
// 写入到 txt 文件中
wofstream write(L"提取文本.txt");
auto LocUtf8 = locale(locale(""), new std::codecvt_utf8<wchar_t>);
write.imbue(LocUtf8);
write << text;
// 释放对象
write.close();
doc->Close();
}
从页面矩形区域提取文本
使用 PdfTextExtractOptions.ExtractArea 属性可以指定一个页面矩形区域进行 PDF 文本内容的提取。具体步骤如下:
- 创建 PdfDocument 对象。
- 使用 PdfDocument->LoadFromFile() 方法加载 PDF 文件。
- 使用 PdfDocument->GetPages()->GetItem() 方法获取特定的页面。
- 创建 PdfTextExtractor 对象。
- 创建 PdfTextExtractOptions 对象。
- 使用 PdfTextExtractOptions->SetExtractArea() 设置页面区域范围。
- 使用 PdfTextExtractor->ExtractText(PdfTextExtractOptions) 方法从所指定的页面区域中提取文本。
- 将提取的文本写入 TXT 文件。
- C++
#include "Spire.Pdf.o.h"
#include <locale>
#include <codecvt>
using namespace Spire::Pdf;
using namespace std;
int main()
{
// 创建PdfDocument对象
intrusive_ptr<PdfDocument> doc = new PdfDocument();
// 加载PDF文档
doc->LoadFromFile(L"极昼极夜是怎么形成的.pdf");
// 获取PDF第一页
intrusive_ptr<PdfPageBase> page = doc->GetPages()->GetItem(0);
// 创建PdfTextExtractor 对象
intrusive_ptr<PdfTextExtractor> textExtractor = new PdfTextExtractor(page);
// 创建PdfTextExtractOptions 对象
intrusive_ptr<PdfTextExtractOptions> extractOptions = new PdfTextExtractOptions();
// 设置提取区域范围
extractOptions->SetExtractArea(new RectangleF(0, 0, 600, 200));
// 从页面指定区域范围提取文本
wstring text = textExtractor->ExtractText(extractOptions);
// 写入到 txt 文件中
wofstream write(L"从指定区域提取文本.txt");
auto LocUtf8 = locale(locale(""), new std::codecvt_utf8<wchar_t>);
write.imbue(LocUtf8);
write << text;
// 释放对象
write.close();
doc->Close();
}
设置简单提取选项提取文本
Spire.PDF for C++ 使用上面提及的方式或设置 PdfTextExtractOptions->SetIsSimpleExtraction(false) 提取文本时,产品内部是根据文本坐标位置计算排序来提取。当设置 PdfTextExtractOptions->SetIsSimpleExtraction(true) 简单提取选项提取是根据文本在页面中绘制的逻辑顺序提取,即先绘制在页面的内容会先提取,后绘制的内容后提取,不管它的具体坐标位置。具体步骤如下:
- 创建 PdfDocument 对象。
- 使用 PdfDocument->LoadFromFile() 方法加载 PDF 文件。
- 使用 PdfDocument->GetPages()->GetItem() 方法获取特定的页面。
- 创建 PdfTextExtractor 对象。
- 创建 PdfTextExtractOptions 对象。
- 使用 PdfTextExtractOptions->SetIsSimpleExtraction(true) 设置简单选项提取文本。
- 使用 PdfTextExtractor->ExtractText(PdfTextExtractOptions) 方法根据设置选项提取文本。
- 将提取的文本写入 TXT 文件。
- C++
#include "Spire.Pdf.o.h"
#include <locale>
#include <codecvt>
using namespace Spire::Pdf;
using namespace std;
int main()
{
// 创建PdfDocument对象
intrusive_ptr<PdfDocument> doc = new PdfDocument();
// 加载PDF文档
doc->LoadFromFile(L"示例.pdf");
// 获取PDF第一页
intrusive_ptr<PdfPageBase> page = doc->GetPages()->GetItem(0);
// 创建PdfTextExtractor 对象
intrusive_ptr<PdfTextExtractor> textExtractor = new PdfTextExtractor(page);
// 创建PdfTextExtractOptions 对象
intrusive_ptr<PdfTextExtractOptions> extractOptions = new PdfTextExtractOptions();
// 设置简单提取选项为true来提取文本
extractOptions->SetIsSimpleExtraction(true);
// 提取文本
wstring text = textExtractor->ExtractText(extractOptions);
// 写入到 txt 文件中
wofstream write(L"提取文本.txt");
auto LocUtf8 = locale(locale(""), new std::codecvt_utf8<wchar_t>);
write.imbue(LocUtf8);
write << text;
// 释放对象
write.close();
doc->Close();
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。