使用循环能否实现PyMuPDF遍历列表批量高亮PDF多个目标文本?
解答
for循环完全是该需求的可行解决方案,且是实现成本最低的方案,不需要掌握复杂Python语法就能落地。
核心修改逻辑非常简单:
- 把原本存储单个待高亮文本的变量,替换为存储所有目标文本的列表
- 遍历列表中的每一个文本项,逐个执行位置搜索、添加高亮标注的操作
- 注意文件保存操作必须放在所有循环执行完成之后,不要放到循环内部,否则会出现只有最后一个搜索词被高亮的问题
- 若某个搜索词在页面中不存在,
search_for会返回空列表,直接传入高亮方法不会触发报错,不需要额外写异常判断逻辑
适配多搜索词的修改后代码如下:
import fitz # 打开待标注的PDF文档 doc = fitz.open("test3.pdf") # 存储所有需要高亮的文本,可自由增删列表元素 search_texts = [ "lidiar con estas problemáticas", "这里替换为你需要高亮的第二个文本", "这里替换为你需要高亮的第三个文本" ] # 指定操作页面,原示例取文档第一页 page = doc[0] # 遍历所有待搜索文本,逐个添加高亮 for text in search_texts: quads = page.search_for(text, quads=True) page.add_highlight_annot(quads) # 所有标注完成后统一保存新文件 doc.save("test3_anotado.pdf")
如果你的使用场景是整本书全页面批量高亮,只需要额外加一层页面遍历逻辑即可,参考代码:
import fitz doc = fitz.open("test3.pdf") search_texts = ["待高亮文本1", "待高亮文本2", "待高亮文本3"] # 遍历文档中每一页 for page in doc: # 每页都遍历所有待搜索文本添加高亮 for text in search_texts: quads = page.search_for(text, quads=True) page.add_highlight_annot(quads) doc.save("test3_anotado.pdf")
内容的提问来源于stack exchange,提问作者Ramiro
相关产品推荐
相关产品推荐

