
在 PDF 文档中搜索特定文本是文档管理系统、法律审核工具、发票处理器和其他企业应用程序中的常见任务。无论您是试图查找关键字、提取某些值,还是删除敏感信息,自动化 PDF 搜索可以节省大量时间和精力。
在这篇博客文章中,您将学习如何使用 C# 以编程方式在 PDF 文件中搜索文本。我们将通过实用的 C# 代码示例逐步介绍关键功能。
这篇文章涵盖以下主题:
- C# 库用于在 PDF 文档中搜索
- 在 C# 中搜索 PDF 文本
- 在 PDF 中进行不区分大小写的整体单词搜索
- 在 PDF 中使用正则表达式搜索
- 搜索并提取带有位置信息的文本
- 突出显示或替换找到的文本
- 在所有页面或特定页面中搜索
- 搜索和编辑敏感信息
- 免费资源
C# 库用于搜索 PDF 文档
Aspose.PDF for .NET 简化了使用 C# 在 PDF 文件中搜索文本的过程。它允许您查找确切的单词、使用正则表达式匹配模式,甚至可以突出显示或替换匹配的文本——这一切只需几行代码。这个强大的库提供了操作 PDF 文档的强大功能。它使开发人员能够轻松实现搜索功能。使用 Aspose.PDF,您可以快速在 PDF 中找到单词,使其成为软件开发人员不可或缺的工具。
在开始 PDF 文本搜索之前,您需要设置开发环境。按照以下步骤开始使用 Aspose.PDF for .NET:
1. 安装 Aspose.PDF for .NET。
从 releases 下载或通过 NuGet 安装。 在 Visual Studio 中打开您的 .NET 项目,并在 NuGet 包管理控制台中运行以下命令:
PM> Install-Package Aspose.PDF
此命令将 Aspose.PDF 库添加到您的项目中,以便您可以访问其强大的 PDF 处理功能。
2. 导入所需的命名空间
在您的 C# 文件顶部,添加以下 using 指令:
using Aspose.Pdf;
using Aspose.Pdf.Text;
现在你准备好使用 Aspose.PDF 的 API 在你的 PDF 文件中搜索文本了。
在 C# 中搜索 PDF 文本
使用 Aspose.PDF for .NET,您可以轻松地在 PDF 中搜索特定的单词或短语,定位它们的所有实例,并采取高亮显示或提取其详细信息等操作。
按照以下步骤执行基本文本搜索:
- 使用 Document 类加载目标 PDF 文件。
- 创建一个 TextFragmentAbsorber 来定义搜索关键字。
- 通过使用 Accept() 方法在所有页面上运行吸收器。
- 检索所有匹配的文本片段。
- 打印找到的匹配数量。
- 遍历并显示每个匹配及其页码。
以下代码示例实现了这些步骤。
// 加载PDF文件
Document pdfDocument = new Document("sample.pdf");
// 创建一个文本吸收器,使用搜索关键字
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("invoice");
// 将吸收器应用于所有页面
pdfDocument.Pages.Accept(textFragmentAbsorber);
// 获取匹配的文本片段
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;
// 打印关键字被找到的次数
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");
// 遍历并打印每个找到的文本
foreach (TextFragment fragment in textFragments)
{
Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}
输出示例
Found 3 instance(s) of the keyword.
Text: invoice | Page: 1
Text: invoice | Page: 2
Text: invoice | Page: 3
这个示例演示了一个简单的关键字搜索,它可以跨所有页面在 PDF 中工作。您将看到匹配的文本及其页码。
理解PDF搜索中使用的关键类
为了更好地理解代码中发生的事情,以下是涉及的关键类和方法的快速分解:
文档
:表示整个 PDF 文件。它提供对页面、内容和结构的访问。TextFragmentAbsorber
: 在 PDF 中查找给定字符串或模式的所有出现。您还可以启用不区分大小写或基于正则表达式的搜索等功能。Accept()
: 应用吸收器到每个页面。它扫描文档并收集匹配的片段。TextFragments
: 吸收器返回的所有匹配文本片段的集合。TextFragment
: 每个单独的匹配项包含内容、位置和页码等详细信息。
使用 C# 进行不区分大小写和完整单词搜索
当您搜索 PDF 内容时,您需要控制系统如何找到匹配项以确保结果准确。有时,您想忽略字母大小写("Invoice" 与 "invoice"),或者您想仅匹配完整单词——而不是其他单词中的部分匹配。
Aspose.PDF for .NET 为您提供了两者的工具。
不区分大小写的搜索
默认情况下,搜索是区分大小写的。要忽略字母大小写,请使用 TextSearchOptions
并启用 IgnoreCase
:
// 加载 PDF 文件
Document pdfDocument = new Document("sample.pdf");
// 创建一个不区分大小写的文本吸收器的正则表达式
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber("(?i)INVOICE");
// 设置文本搜索选项以启用正则表达式使用
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;
// 将吸收器应用于所有页面
pdfDocument.Pages.Accept(textFragmentAbsorber);
// 检索匹配的文本片段
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;
// 输出找到的比赛数量
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");
// 循环遍历并显示每个找到的文本片段
foreach (TextFragment fragment in textFragments)
{
Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}
这将找到 "Invoice"、"invoice"、"INVOICE" 及其他变体。
仅匹配完整单词
您还可以防止部分匹配。例如,搜索 car
不应匹配 care
或 scar
。
// 加载 PDF 文件
Document pdfDocument = new Document("sample.pdf");
// 创建一个使用正则表达式模式进行整体单词匹配的文本吸收器
TextFragmentAbsorber textFragmentAbsorber = new TextFragmentAbsorber(@"\bcar\b");
// 设置文本搜索选项以启用正则表达式使用
TextSearchOptions textSearchOptions = new TextSearchOptions(true);
textFragmentAbsorber.TextSearchOptions = textSearchOptions;
// 将吸收器应用于所有页面
pdfDocument.Pages.Accept(textFragmentAbsorber);
// 检索匹配的文本片段
TextFragmentCollection textFragments = textFragmentAbsorber.TextFragments;
// 输出找到的匹配数量
Console.WriteLine($"Found {textFragments.Count} instance(s) of the keyword.");
// 循环遍历并显示每个找到的文本片段
foreach (TextFragment fragment in textFragments)
{
Console.WriteLine($"Text: {fragment.Text} | Page: {fragment.Page.Number}");
}
这确保只有单独的`car”一词实例被匹配。
在 PDF 中使用正则表达式进行搜索
在某些情况下,你需要找到的不仅仅是一个特定的单词——你想要匹配像日期、电子邮件地址或参考号码这样的模式。这就是正则表达式(regex)派上用场的地方。
Aspose.PDF for .NET 允许您使用正则表达式在 PDF 文档的任何部分进行高级文本搜索。
示例:在 PDF 中查找所有日期
让我们说您想要查找所有格式为 dd/mm/yyyy
的日期:
// 加载 PDF 并搜索文本
Document pdfDocument = new Document("sample.pdf");
// 在搜索选项中启用正则表达式
TextSearchOptions searchOptions = new TextSearchOptions(true)
{
IsRegularExpressionUsed = true
};
// 创建具有日期模式的吸收器
TextFragmentAbsorber absorber = new TextFragmentAbsorber(@"\d{2}/\d{2}/\d{4}", searchOptions);
// 将吸收剂涂抹在页面上
pdfDocument.Pages.Accept(absorber);
// 循环并打印找到的模式
foreach (TextFragment fragment in absorber.TextFragments)
{
Console.WriteLine($"Found date: {fragment.Text} on Page {fragment.Page.Number}");
}
其他有用的模式:
- Emails:
\b[A-Za-z0-9.%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b
- Phone Numbers:
\d{3}[-.\s]??\d{3}[-.\s]??\d{4}
- 发票号码:
INV-\d+
正则表达式扩展了您的搜索能力,远远超出了静态文本,帮助您从非结构化文档中提取结构化数据。
搜索并提取文本及位置信息
有时候,仅仅找到文本是不够的——您可能需要确切知道它在 PDF 中出现的位置。Aspose.PDF 允许您提取每个匹配项的页码、坐标和格式详细信息。
此功能特别适用于构建索引、标记文档或创建可点击链接。
示例:获取每个匹配项的位置
// 加载 PDF 并搜索文本
Document pdfDocument = new Document("sample.pdf");
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber);
// 获取匹配的片段
TextFragmentCollection fragments = absorber.TextFragments;
// 打印每个匹配的位置信息和文本
foreach (TextFragment fragment in fragments)
{
Console.WriteLine($"Text: {fragment.Text}");
Console.WriteLine($"Page: {fragment.Page.Number}");
Console.WriteLine($"Position - X: {fragment.Position.XIndent}, Y: {fragment.Position.YIndent}");
Console.WriteLine($"Font: {fragment.TextState.Font.FontName}, Size: {fragment.TextState.FontSize}");
Console.WriteLine("------------");
}
Sample Output
Text: invoice
Page: 1
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
Text: invoice
Page: 2
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
Text: invoice
Page: 3
Position - X: 33.482, Y: 708.246
Font: Helvetica, Size: 12
------------
您现在确切知道`invoice”一词出现的位置以及它的样式。这种细节级别为高级处理打开了大门,例如注释、工具提示或动态高亮。
突出显示或替换找到的文本
一旦您在 PDF 中找到了特定文本,您可以通过高亮显示它或甚至用新内容替换它进一步操作。 Aspose.PDF for .NET 使您能够轻松使用 TextFragment
对象样式或修改匹配的文本。
在 PDF 中搜索和高亮文本
您可以通过更改文本的背景和字体颜色来直观地突出显示文本。
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber);
foreach (TextFragment fragment in absorber.TextFragments)
{
// Highlight by changing text appearance
fragment.TextState.BackgroundColor = Color.Yellow;
fragment.TextState.ForegroundColor = Color.Red;
fragment.TextState.FontStyle = FontStyles.Bold;
}
这对审查、标注或生成注释报告很有用。
查找和替换文本
需要在文档中编辑或更新文本吗?只需直接替换即可:
foreach (TextFragment fragment in absorber.TextFragments)
{
fragment.Text = "REDACTED";
}
您甚至可以在替换时应用新的格式:
fragment.TextState.FontSize = 12;
fragment.TextState.Font = FontRepository.FindFont("Arial");
fragment.TextState.ForegroundColor = Color.Black;
通过编程高亮和替换文本,可以自动化许多文档处理任务,例如清理模板、更新过时内容或审查私人数据。
在所有页面或特定页面中搜索
默认情况下,Aspose.PDF 会在 PDF 的所有页面中进行搜索。但有时,您可能希望将搜索限制在特定页面或一系列页面—尤其是在处理大文件或内容可预测时。
Aspose.PDF 使这两件事变得简单。
在所有页面上搜索(默认)
如果您不指定页面,吸收器将自动搜索每个页面。
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
pdfDocument.Pages.Accept(absorber); // Searches all pages
在特定页面上搜索
您还可以通过直接定位单个页面来进行搜索:
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
// Search only on page 2
pdfDocument.Pages[2].Accept(absorber);
在一系列页面上搜索
要搜索自定义范围(例如,页面 2 到 4),只需遍历该范围:
TextFragmentAbsorber absorber = new TextFragmentAbsorber("invoice");
// Loop through selected pages
for (int i = 2; i <= 4; i++)
{
pdfDocument.Pages[i].Accept(absorber);
}
这种方法使您能够全面控制性能和精确度,特别适用于扫描或分段文件。
高级用例:搜索和编辑敏感信息
在法律、HR 或财务文件中,隐藏敏感内容(如姓名、身份证号或账户号码)在共享之前是很常见的。Aspose.PDF for .NET 通过将搜索和编辑功能相结合,使这一过程变得简单。
您可以搜索术语,然后使用 RedactionAnnotation
应用黑色覆盖。
// 加载 PDF 并搜索文本
Document pdfDocument = new Document("sample.pdf");
// 搜索名字 "John Doe"
TextFragmentAbsorber absorber = new TextFragmentAbsorber("John Doe");
pdfDocument.Pages.Accept(absorber);
// 循环遍历找到的片段并进行编辑
foreach (TextFragment fragment in absorber.TextFragments)
{
// 获取位置和尺寸
Aspose.Pdf.Rectangle rect = new Aspose.Pdf.Rectangle(
fragment.Position.XIndent,
fragment.Position.YIndent,
fragment.Position.XIndent + fragment.Rectangle.Width,
fragment.Position.YIndent + fragment.Rectangle.Height
);
// 创建一个编辑注释
RedactionAnnotation redaction = new RedactionAnnotation(fragment.Page, rect)
{
FillColor = Color.Black,
Color = Color.Black
};
// 添加并应用编辑
fragment.Page.Annotations.Add(redaction);
redaction.Redact();
}
// 保存修改后的文档
pdfDocument.Save("SearchAndRedact.pdf");
发生了什么
- 目标文本("John Doe")已被找到并用黑框覆盖。
- 这不仅仅是视觉上的——它从 PDF 层中移除了内容,使其无法从文件中恢复。
获取免费许可证
现在您已经学会了如何使用 Aspose.PDF for .NET 在 PDF 中搜索、提取、突出显示和编辑文本,是时候将这些知识付诸实践了。
试试看:下载免费临时许可证,开始构建您自己的智能 PDF 工具。
在 PDF 中搜索:免费资源
想要超越仅仅在 PDF 中搜索文本吗?通过这些免费的、开发者友好的资源探索 Aspose.PDF for .NET 的全部功能:
开发者指南 学习如何以编程方式创建、修改、转换和保护 PDF 文件。 Aspose.PDF for .NET Documentation
免费在线工具 在您的浏览器中直接转换、合并、拆分和编辑 PDF 文件。 Aspose 免费 PDF 工具
API 参考 了解更多关于 Aspose.PDF for .NET 中可用的类、属性和方法的信息,以加快您的开发。 Aspose.PDF API Reference
支持论坛 向 Aspose 专家提问、报告问题并直接获取答案。 Aspose Support Forum
这些资源是免费的,旨在帮助您充分利用您的 PDF 开发之旅。
结论
在 PDF 文件中搜索文本是许多基于文档的应用程序的一个重要功能——无论是提取数据、审计内容,还是准备文件以进行编辑。使用 Aspose.PDF for .NET,您可以轻松执行关键字搜索,使用正则表达式,突出显示结果,甚至精确而控制地处理敏感信息。Aspose.PDF 提供了一个开发者友好的 API,简化了复杂的 PDF 操作——节省您的时间,同时实现强大的自动化。
如果您有任何问题或需要进一步的帮助,请随时通过我们的 免费支持论坛 联系我们。