查看: 653|回复: 0

Python PDF文本查找与高亮标注的固定匹配和正则匹配方案

[复制链接]
发表于 5 小时前 | 显示全部楼层 |阅读模式
在PDF内容审核、数据提取和文档自动化处理中,常常需要把指定的关键词或者符合格式规则的文本找出来并添加高亮。手动翻阅PDF不仅耗时,而且容易漏项。Free Spire.PDF for Python提供了一套简洁的封装,通过PdfDocument、PdfTextFinder等类型即可完成页面遍历、文本匹配和颜色标注,不用处理复杂的PDF底层结构。该免费版仅支持处理10页以内的PDF,适合日常轻量调试和少量文档的自动化标注。

需要先安装依赖:
  1. pip install spire.pdf.free
复制代码

一、固定关键词全局匹配高亮

如果目标文本是明确的,例如要在整个PDF中集中标注“云服务器”这一关键词,可以使用逐页遍历加精准查找的方式。核心流程为:加载文档、循环每一页、创建PdfTextFinder检索器、调用Find方法取得匹配对象、调用HighLight给文本上色。

完整脚本如下:
  1. from spire.pdf import *
  2. from spire.pdf.common import *
  3. pdf = PdfDocument()
  4. pdf.LoadFromFile("示例.pdf")
  5. for i in range(pdf.Pages.Count):
  6.     page = pdf.Pages.get_Item(i)
  7.     pdfTextFinder = PdfTextFinder(page)
  8.     result = pdfTextFinder.Find("云服务器")
  9.     for find in result:
  10.         find.HighLight(Color.get_Cyan())
  11. pdf.SaveToFile("output/查找并突出显示.pdf")
  12. pdf.Close()
复制代码

这段代码中,PdfDocument.LoadFromFile用于读取本地PDF文件;pdf.Pages.Count取得总页数,确保每个页面都不会漏检。PdfTextFinder每次基于当前页面实例化,Find方法返回的是所有匹配文本片段的对象集合,而非简单布尔值。遍历集合后统一调用HighLight,即可将匹配文本背景设置为青色。Color.get_Cyan()可以替换成其他颜色常量,比如Color.get_DeepPink()。

需要特别提醒的是,保存路径中的output目录必须存在,否则SaveToFile会报目录不存在的错误。建议在脚本开头加入自动建目录逻辑:
  1. import os
  2. os.makedirs("output", exist_ok=True)
复制代码

二、正则表达式模糊匹配高亮

在很多业务中,目标文本没有固定内容,但存在统一格式,例如数字、小数、百分比、手机号、日期等。此时可以开启正则匹配模式,通过一条表达式批量命中格式相近的文本。

下面的示例匹配整数、小数和百分数三种数值形式:
  1. from spire.pdf import *
  2. from spire.pdf.common import *
  3. pdf = PdfDocument()
  4. pdf.LoadFromFile("示例.pdf")
  5. page = pdf.Pages.get_Item(0)
  6. pdfTextFinder = PdfTextFinder(page)
  7. pdfTextFinder.Options.Parameter = TextFindParameter.Regex
  8. pattern = r'\d+(?:\.\d+)?%?'
  9. result = pdfTextFinder.Find(pattern)
  10. for find in result:
  11.     find.HighLight(Color.get_DeepPink())
  12. pdf.SaveToFile("output/查找并突出显示.pdf")
  13. pdf.Close()
复制代码

该脚本的要点在于,通过将Options.Parameter指定为TextFindParameter.Regex,PdfTextFinder会把Find方法传入的字符串当作正则表达式处理。示例中的r'\d+(?:\.\d+)?%?'可拆解为:\d+匹配纯整数;(?:\.\d+)?匹配可选的小数部分;%?匹配可选的百分号。因此10、99.9、50%这类数据都会被高亮。

上述代码只对第一页执行检索,页码索引由get_Item(0)决定。如果需要全文匹配,只需参考场景一中的循环逻辑,把正则查找和上色逻辑放到每一页的遍历中执行即可。

三、常见问题与使用建议

1. 文档保存失败:如果输出目录不存在,写入文件会抛出路径异常。先执行os.makedirs("output", exist_ok=True)可以避免这个问题。

2. 超出页数限制:免费组件限制只能处理10页以内的PDF。超过10页的文档可以提前拆分成多个子文件,再分别执行查找高亮操作。

3. 高亮精准度:默认匹配会覆盖包含目标文本片段的搜索结果。如果业务要求整词匹配或者区分大小写,可以继续配置检索器的Options参数,调整匹配模式后再执行Find。

PDF文本查找与高亮标注的两种方案,分别适合明确关键词检索和规则化文本检索。代码量小,没有冗余的外部依赖,适合集成在文档处理脚本中。对于短篇幅PDF的内容标注、数据提取预处理和人工审阅辅助,这套方法能够明显减少重复操作时间。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-9-7 18:29 , Processed in 0.021592 second(s), 17 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部