在实际开发中,PDF 文档几乎无处不在,从报告、合同到教材、试卷都有广泛应用。在处理这些文档时,常常需要对文本进行搜索和高亮,例如标记报告中的关键术语、合同条款,或者提取特定内容进行分析。手动处理不仅费时,还容易遗漏关键内容,因此自动化的文本查找和高亮就显得非常必要。
本文将通过四个示例,详细介绍如何在 Java 中实现 PDF 中文文本的查找与高亮操作:
-
单页文本查找与高亮
-
指定区域内文本查找与高亮
-
整篇文档文本查找与高亮
-
使用正则表达式查找并高亮
库安装
本文示例使用 Spire.PDF for Java 来处理 PDF 文档,它提供了完整的 PDF 操作接口,包括加载、查找、编辑和高亮文本。你可以通过官网下载 JAR 包并引入项目,也可以通过 Maven 引入依赖:
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.pdf</artifactId>
<version>12.4.4</version>
</dependency>
</dependencies>
安装好库之后,就可以在 Java 中对 PDF 文档进行操作,无需依赖 Adobe Acrobat 等第三方软件。
示例一:在单页中查找并高亮中文文本
有时候,我们只需要对 PDF 中某一页进行查找,例如查找第一页报告中的关键术语"数据库"。这种场景适用于快速标注或页面内容审阅。
完整代码示例如下:
java
import com.spire.ms.System.Collections.Generic.List;
import com.spire.pdf.FileFormat;
import com.spire.pdf.PdfDocument;
import com.spire.pdf.PdfPageBase;
import com.spire.pdf.texts.PdfTextFinder;
import com.spire.pdf.texts.PdfTextFragment;
import com.spire.pdf.texts.TextFindParameter;
import java.awt.*;
import java.util.EnumSet;
public class FindAndHighlightTextInPage {
public static void main(String[] args) {
PdfDocument doc = new PdfDocument();
doc.loadFromFile("C:\\Users\\Administrator\\Desktop\\示例文档.pdf");
PdfPageBase page = doc.getPages().get(0);
PdfTextFinder finder = new PdfTextFinder(page);
// 设置查找选项:全字匹配且忽略大小写
finder.getOptions().setTextFindParameter(EnumSet.of(TextFindParameter.WholeWord));
finder.getOptions().setTextFindParameter(EnumSet.of(TextFindParameter.IgnoreCase));
// 查找文本"数据库"
List<PdfTextFragment> results = finder.find("数据库");
// 高亮找到的文本
for (PdfTextFragment textFragment : results) {
textFragment.highLight(Color.LIGHT_GRAY);
}
doc.saveToFile("output/HighlightTextInPage.pdf", FileFormat.PDF);
doc.dispose();
}
}
适用场景:单页注释、报告审阅、快速查找某页重要内容。
示例二:在指定矩形区域内查找并高亮文本
有些时候,我们只希望查找 PDF 页面中的特定区域,如页眉、页脚或表格区域,避免对整页内容无差别高亮。此时可以使用 setFindArea() 方法指定矩形区域。
示例代码:
java
import java.awt.geom.Rectangle2D;
finder.getOptions().setFindArea(new Rectangle2D.Float(0, 0, 841, 180)); // 页眉区域
List<PdfTextFragment> results = finder.find("报告");
for (PdfTextFragment textFragment : results) {
textFragment.highLight(Color.LIGHT_GRAY);
}
在完整项目中,你可以结合示例一的页面加载逻辑,将矩形区域限定在顶部页眉、底部页脚或任意自定义区域。这样不仅可以提高查找效率,还能避免误高亮文档中其他部分的相同词汇。
适用场景:合同页眉高亮、报告章节标题标注、表格内容查找。
示例三:在整个文档中查找并高亮文本
对于需要处理整篇文档的需求,例如在合同集合、教材或报告中查找"合同条款",可以遍历每一页进行查找和高亮。
示例代码:
java
for (Object pageObj : doc.getPages()) {
PdfPageBase page = (PdfPageBase) pageObj;
PdfTextFinder finder = new PdfTextFinder(page);
finder.getOptions().setTextFindParameter(EnumSet.of(TextFindParameter.WholeWord));
finder.getOptions().setTextFindParameter(EnumSet.of(TextFindParameter.IgnoreCase));
List<PdfTextFragment> results = finder.find("合同条款");
for (PdfTextFragment textFragment : results) {
textFragment.highLight(Color.LIGHT_GRAY);
}
}
通过这种方式,可以一次性处理整个文档,无需手动翻页查找,大幅节省人工操作时间。
适用场景:合同全文审查、批量报告注释、教材关键内容标注。
示例四:使用正则表达式查找并高亮文本
当查找的文本具有一定规律性,例如章节标题、编号或特殊格式时,正则表达式会非常有用。例如查找所有以"第"开头、以"章"结尾的章节标题:
java
finder.getOptions().setTextFindParameter(EnumSet.of(TextFindParameter.Regex));
String pattern = "\\b第\\w*章\\b";
List<PdfTextFragment> results = finder.find(pattern);
for (PdfTextFragment textFragment : results) {
textFragment.highLight(Color.LIGHT_GRAY);
}
正则匹配不仅可以查找固定词汇,还能匹配模式化文本,如编号、日期、序列号等,提高查找灵活性。
适用场景:章节标题标注、序列号提取、敏感信息查找与标注。
总结
通过这四个示例,我们可以看到 Java 中 PDF 中文文本查找与高亮的几种典型场景:
-
单页高亮:快速标注指定页面文本。
-
矩形区域高亮:精确控制搜索范围,避免误高亮。
-
整篇文档高亮:适合批量处理文档内容。
-
正则表达式高亮:灵活匹配复杂文本模式。
借助 Spire.PDF,我们可以用简单的代码实现强大的 PDF 文本处理功能,非常适合在合同审查、报告分析、教材标注等场景中使用。