使用 C++ 查找和替换 PDF 中的文本

PDF 是一种流行的格式,广泛用于在组织和个人之间共享文档。在某些情况下,您必须在共享之前查找并替换 PDF 文档中的某些文本。您可以手动执行此操作,但这会花费更多时间且效率较低。更好更快的选择是以编程方式执行此操作。在本文中,您将学习如何使用 C++ 查找和替换 PDF 文件中的文本。

用于在 PDF 文件中查找和替换文本的 C++ API

Aspose.PDF for C++ 是一个用于处理 PDF 文件的 C++ 库。它提供了一系列功能,可帮助您自动化 PDF 工作流程的各个方面。其中一项功能是查找和替换 PDF 文件中的文本。您可以通过 NuGet 安装 API,也可以直接从 下载 部分下载。

PM> Install-Package Aspose.PDF.Cpp

使用 C++ 查找和替换 PDF 中的文本

Aspose.PDF for C++ 提供 TextFragmentAbsorber 类用于在 PDF 文档中搜索文本。您使用要查找的文本初始化此类,并使用它来检索所有匹配的文本片段。一旦所有片段都可用,您可以遍历它们并替换文本。以下是使用 C++ 在 PDF 文件中查找和替换文本的步骤。

以下是使用 C++ 在整个 PDF 文件中查找和替换文本的示例代码。

// 加载 PDF 文件
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\Sample 1.pdf");

// 创建 TextAbsorber 对象以查找输入搜索短语的所有实例
auto textFragmentAbsorber = MakeObject<TextFragmentAbsorber>(u"Document");

// 接受所有页面的吸收器
pdfDocument->get_Pages()->Accept(textFragmentAbsorber);

// 获取提取的文本片段
auto textFragmentCollection = textFragmentAbsorber->get_TextFragments();

// 遍历片段
for (auto textFragment : textFragmentCollection)
{
	// 更新文本和其他属性
	textFragment->set_Text(u"UPDATED TEXT");
	textFragment->get_TextState()->set_Font(FontRepository::FindFont(u"TimesNewRoman"));
	textFragment->get_TextState()->set_FontSize(22);
}

// 保存生成的 PDF 文档。
pdfDocument->Save(u"OutputDirectory\\UpdatedDocument.pdf");

C++ 查找和替换特定 PDF 页面中的文本

在某些情况下,您只想查找和替换特定页面上的文本而不是整个文档。为此,接受要替换文本的页面的 TextFragmentAbsorber 对象。以下是在 PDF 文档的特定页面上查找和替换文本的步骤。

以下是使用 C++ 在特定 PDF 页面上查找和替换文本的示例代码。

// 加载 PDF 文件
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\Sample 1.pdf");

// 创建 TextAbsorber 对象以查找输入搜索短语的所有实例
auto textFragmentAbsorber = MakeObject<TextFragmentAbsorber>(u"Document");

// 接受文件第二页的吸收体
pdfDocument->get_Pages()->idx_get(2)->Accept(textFragmentAbsorber);

// 获取提取的文本片段
auto textFragmentCollection = textFragmentAbsorber->get_TextFragments();

// 遍历片段
for (auto textFragment : textFragmentCollection)
{
	// 更新文本和其他属性
	textFragment->set_Text(u"UPDATED TEXT");
	textFragment->get_TextState()->set_Font(FontRepository::FindFont(u"TimesNewRoman"));
	textFragment->get_TextState()->set_FontSize(22);
}

// 保存生成的 PDF 文档。
pdfDocument->Save(u"OutputDirectory\\UpdatedDocument2.pdf");

使用 C++ 替换 PDF 页面区域中的文本

您可以指定要替换文本的页面区域,而不是搜索整个页面。为此,API 提供了 Rectangle 类。以下是在 PDF 页面的特定部分中查找和替换文本的步骤。

以下是在特定 PDF 页面区域中查找和替换文本的示例代码。

// 加载 PDF 文件
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\Sample 1.pdf");

// 创建 TextAbsorber 对象以查找输入搜索短语的所有实例
auto textFragmentAbsorber = MakeObject<TextFragmentAbsorber>(u"Document");

// 在页面范围内搜索文本
textFragmentAbsorber->get_TextSearchOptions()->set_LimitToPageBounds(true);

// 为 TextSearchOptions 指定页面区域
textFragmentAbsorber->get_TextSearchOptions()->set_Rectangle(MakeObject<Rectangle>(100, 100, 800, 700));

// 接受文件第一页的吸收体
pdfDocument->get_Pages()->idx_get(1)->Accept(textFragmentAbsorber);

// 获取提取的文本片段
auto textFragmentCollection = textFragmentAbsorber->get_TextFragments();

// 遍历片段
for (auto textFragment : textFragmentCollection)
{
	// 更新文本和其他属性
	textFragment->set_Text(u"UPDATED TEXT");
	textFragment->get_TextState()->set_Font(FontRepository::FindFont(u"TimesNewRoman"));
	textFragment->get_TextState()->set_FontSize(22);
}

// 保存生成的 PDF 文档。
pdfDocument->Save(u"OutputDirectory\\UpdatedDocument.pdf");

使用正则表达式查找和替换 PDF 文件中的文本

Aspose.PDF for C++ 还提供了使用正则表达式搜索文本的能力。使用正则表达式,您可以查找电子邮件地址或电话号码等文本。为此,您必须指定正则表达式而不是搜索字符串,并使用 TextSearchOptions 类来指示您正在使用正则搜索的表达式。以下是使用正则表达式在 PDF 文件中查找和替换文本的步骤。

以下是使用正则表达式查找和替换 PDF 文件中的文本的示例代码。

// 加载 PDF 文件
auto pdfDocument = MakeObject<Document>(u"SourceDirectory\\Sample 2.pdf");

// 创建 TextAbsorber 对象以查找输入搜索短语的所有实例
auto textFragmentAbsorber = MakeObject<TextFragmentAbsorber>(u"\\d{4} - \\d{4}"); // Like 1999-2000

// 设置文本搜索选项以启用正则表达式使用
auto textSearchOptions = MakeObject<TextSearchOptions>(true);
textFragmentAbsorber->set_TextSearchOptions(textSearchOptions);

// 接受文档所有页面的吸收体
pdfDocument->get_Pages()->Accept(textFragmentAbsorber);

// 获取提取的文本片段
auto textFragmentCollection = textFragmentAbsorber->get_TextFragments();

// 遍历片段
for (auto textFragment : textFragmentCollection)
{
	// 更新文本和其他属性
	textFragment->set_Text(u"UPDATED TEXT");
	textFragment->get_TextState()->set_Font(FontRepository::FindFont(u"TimesNewRoman"));
	textFragment->get_TextState()->set_FontSize(22);
}

// 保存生成的 PDF 文档。
pdfDocument->Save(u"OutputDirectory\\UpdatedDocument.pdf");

获得免费许可证

您可以通过请求 免费的临时许可证 来试用该 API,而不受评估限制。

结论

在本文中,您学习了如何使用 C++ 查找和替换 PDF 文件中的文本。您已经了解了如何替换整个 PDF 文档、特定 PDF 页面或页面的特定区域中的文本。此外,您还学习了如何使用正则表达式搜索和替换文本。 Aspose.PDF for C++ 是一个强大的 API,具有许多附加功能,使处理 PDF 文档变得轻而易举。您可以使用 官方文档 详细探索 API。如果您有任何问题,请随时在 论坛 上与我们联系。

也可以看看