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

如何在PDF中给高亮文本添加圆形边框并增加描边厚度

解决方案

关键问题修正与优化点

  • 高亮注释厚度设置错误:原代码中highlight.set_colors({"stroke":(0, 1, 0), "thickness": 2})里的thickness不属于颜色配置的有效参数,需单独通过set_border()设置边框厚度。
  • 圆形半径适配文本:固定半径70可能导致圆过大或过小,应根据文本区域的宽高动态计算合适半径,确保完整包围目标文本。
  • 描边厚度提升:直接调整shape.finish()中的width参数即可增加描边厚度,比如设为6或8。

修正后的完整代码

import fitz

def highlight_text(pdf_file, room_id):
    text = str(room_id)
    for page in pdf_file:
        # 搜索目标文本
        text_instances = page.search_for(text)
        
        for inst in text_instances:
            # 添加文本高亮注释
            highlight = page.add_highlight_annot(inst)
            # 设置高亮颜色与边框厚度
            highlight.set_colors({"fill": (0, 1, 0), "stroke": (0, 0, 0)})  # 填充绿,边框黑
            highlight.set_border(width=2)  # 设置高亮边框厚度
            highlight.update()
            
            # 创建形状对象绘制圆形框
            shape = page.new_shape()
            # 计算文本区域中心与适配半径
            center_x = (inst.x0 + inst.x1) / 2
            center_y = (inst.y0 + inst.y1) / 2
            # 取文本宽高的最大值的一半,再加10作为边距,确保包围文本
            radius = max(inst.x1 - inst.x0, inst.y1 - inst.y0) / 2 + 10
            # 绘制圆形
            shape.draw_circle((center_x, center_y), radius)
            # 设置描边颜色、无填充、描边厚度
            shape.finish(color=(0, 1, 0), fill=None, width=6)
            shape.commit()
    
    # 保存修改后的PDF
    pdf_file.save("highlighted.pdf", garbage=4, deflate=True, clean=True)

# 执行示例
pdf = fitz.open("OK31017-ML0100-DWG-ZA-B1.pdf")
highlight_text(pdf, "MECH PUMP ROOM (WATER FEATURE 12)")

代码说明

  • 动态半径计算:通过max(inst.x1 - inst.x0, inst.y1 - inst.y0) / 2 + 10计算半径,保证圆形能完全覆盖目标文本,同时保留一定边距。
  • 高亮注释优化:分离颜色设置与边框厚度设置,修正原代码的参数错误,让高亮样式更符合预期。
  • 描边厚度调整:将shape.finish()的width设为6(可根据需求调整为8、10等),大幅提升圆形框的可见性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 00:35:31