如何在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
相关产品推荐
相关产品推荐

