You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用Python及PyMUPDF高亮PDF中搜索文本的右侧对应值?

嘿,这个需求我之前也折腾过,用PyMUPDF完全能实现!核心思路就是先定位到目标关键词的位置,再精准找到它右侧的对应内容块,最后给这块内容加上高亮。下面我一步步给你讲具体实现:

实现PyMUPDF高亮关键词右侧对应值的方法

1. 基础准备:导入库并打开PDF

先确保你已经装好了PyMUPDF,然后打开目标文档和对应页面:

import fitz  # PyMUPDF的标准导入方式

doc = fitz.open("your_target.pdf")  # 替换成你的PDF文件路径
page = doc[0]  # 假设内容在第一页,按需调整页码

2. 搜索关键词并获取位置信息

page.search_for()找到关键词的所有匹配项,每个匹配结果都是一个fitz.Rect矩形对象,包含关键词的坐标范围:

target_keyword = "Name:"  # 可以换成Profession:、Hobbies:等
keyword_matches = page.search_for(target_keyword)

3. 定位右侧对应值并添加高亮

根据PDF的排版情况,分两种常见场景处理:

场景1:关键词和对应值在同一行(最普遍)

如果关键词和对应值在同一文本行,我们可以通过文本块的字符位置来定位右侧内容:

for match_rect in keyword_matches:
    # 获取关键词所在行的所有文本块
    line_blocks = page.get_text("blocks", clip=match_rect + fitz.Rect(0, 0, page.rect.width, 0))
    for block in line_blocks:
        block_rect = fitz.Rect(block[:4])
        block_text = block[4].strip()
        if target_keyword in block_text:
            # 计算关键词在文本块中的结束位置
            keyword_end_pos = block_text.find(target_keyword) + len(target_keyword)
            # 估算单个字符的宽度,用来定位右侧内容的起始坐标
            char_width = block_rect.width / len(block_text)
            # 构建对应值的高亮矩形
            value_rect = fitz.Rect(
                block_rect.x0 + keyword_end_pos * char_width,
                block_rect.y0,
                block_rect.x1,
                block_rect.y1
            )
            # 添加高亮注释
            page.add_highlight_annot(value_rect)

场景2:关键词和对应值不在同一行(比如换行布局)

如果对应值在关键词的下一行,我们可以直接搜索关键词下方的区域:

for match_rect in keyword_matches:
    # 定义关键词下方的搜索区域,高度可根据PDF字号调整
    below_rect = fitz.Rect(match_rect.x0, match_rect.y1, page.rect.width, match_rect.y1 + 20)
    # 获取该区域的文本块
    value_blocks = page.get_text("blocks", clip=below_rect)
    for block in value_blocks:
        value_rect = fitz.Rect(block[:4])
        page.add_highlight_annot(value_rect)

4. 保存修改后的PDF

最后别忘保存修改后的文档:

doc.save("highlighted_result.pdf")
doc.close()

几个实用小提示

  • 如果是扫描版PDF(纯图片),PyMUPDF无法直接提取文本,得先结合OCR工具(比如pytesseract)识别文本后再操作。
  • 不同PDF的字体、排版差异大,字符宽度估算可能有误差,你可以根据实际情况调整char_width的计算逻辑,或者直接把关键词之后的整个文本块作为高亮范围。
  • 代码会自动处理所有匹配到的关键词,比如文档里有多个"Name:",都会对应高亮右侧的值。

内容的提问来源于stack exchange,提问作者Lav Mehta

火山引擎 最新活动