You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Fitz高亮PDF中包含指定单词的整段文本?

使用Fitz(PyMuPDF)高亮PDF中的整段文本

完全可以用Fitz实现整段高亮,核心思路是定位目标单词所在的文本块(通常对应一个段落),然后给该文本块的边界框添加高亮标注,具体步骤和代码示例如下:

实现步骤

  1. 打开PDF并定位目标页面
    用Fitz打开目标PDF文档,获取需要处理的页面对象:

    import fitz
    
    doc = fitz.open("input.pdf")
    page = doc[0]  # 替换为目标页码(从0开始计数)
    
  2. 找到目标单词所在的文本块
    Fitz的page.get_text("words")会返回页面所有单词的位置和层级信息(包含块编号、行编号),我们可以通过遍历找到包含目标单词的文本块,再计算该块的整体边界框:

    target_word = "需要定位的单词"
    target_block_no = None
    
    # 获取页面所有单词的详细信息:(x0, y0, x1, y1, 单词文本, 块编号, 行编号, 单词编号)
    all_words = page.get_text("words")
    
    # 查找包含目标单词的块编号
    for word_info in all_words:
        if word_info[4] == target_word:
            target_block_no = word_info[5]
            break
    
    # 计算目标块的整体边界框
    if target_block_no is not None:
        block_words = [w for w in all_words if w[5] == target_block_no]
        # 取块内所有单词的最小/最大坐标,得到整个块的矩形范围
        rect = fitz.Rect(
            min(w[0] for w in block_words),
            min(w[1] for w in block_words),
            max(w[2] for w in block_words),
            max(w[3] for w in block_words)
        )
    
  3. 给文本块添加高亮标注
    用page.add_highlight_annot()方法给计算出的矩形添加高亮,还可以自定义高亮颜色:

    if target_block_no is not None:
        annot = page.add_highlight_annot(rect)
        # 可选:设置高亮颜色(这里是黄色,RGB值范围0-1)
        annot.colors = {"stroke": (1.0, 1.0, 0.0)}
        annot.update()
    
  4. 保存修改后的PDF

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

注意事项

  • 多数PDF中,一个段落对应一个文本块,但部分复杂排版的PDF可能会将段落拆分为多个块,这种情况下需要通过行的位置(比如相邻行的y坐标差)判断哪些块属于同一段落,再合并它们的边界框。
  • 如果目标单词在多个段落出现,需要额外逻辑处理(比如遍历所有匹配的块编号,逐个添加高亮)。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 05:52:17