iText7 C# 鼠标悬停矩形标注区域无法触发弹窗问题咨询
iText7 C# 实现矩形区域全域悬停触发标注弹窗方案
问题根源
你之前使用的TextAnnotation属于便签类标注,PDF规范默认仅其左上角的图标区域为交互热区,就算绑定矩形区域也不会扩大触发范围,组合多个标注的方式也无法绕开规范限制。
正确实现步骤
直接使用SquareAnnotation(方形高亮标注)搭配PopupAnnotation(弹出标注)即可实现需求:
- 第一步:定义目标矩形区域
iText7 PDF坐标原点为页面左下角,参数依次为左下角X坐标、左下角Y坐标、矩形宽度、矩形高度:
// 示例参数,可根据实际需求调整 Rectangle targetRect = new Rectangle(100, 400, 250, 80);
- 第二步:创建方形高亮标注并配置属性
SquareAnnotation highlightAnnot = new SquareAnnotation(targetRect); // 设置标注弹窗要显示的内容 highlightAnnot.SetContents("这里是你要弹出的标注内容"); // 配置高亮样式,示例为半透明黄色高亮,可自行调整 highlightAnnot.SetColor(ColorConstants.YELLOW); highlightAnnot.SetOpacity(0.3f); // 去掉矩形边框,避免额外显示 highlightAnnot.SetBorder(new PdfArray(new float[] { 0 }));
- 第三步:绑定弹出标注并添加到页面
// 定义弹窗显示的位置和尺寸,示例显示在高亮矩形右上角 Rectangle popupRect = new Rectangle( targetRect.GetX() + targetRect.GetWidth(), targetRect.GetY() + targetRect.GetHeight(), 200, 100 ); PopupAnnotation popupAnnot = new PopupAnnotation(popupRect); // 将弹窗和高亮标注绑定 popupAnnot.SetParent(highlightAnnot); // 默认关闭弹窗,仅悬停时触发显示 popupAnnot.SetOpen(false); // 将两个标注都添加到目标PDF页 pdfPage.AddAnnotation(highlightAnnot); pdfPage.AddAnnotation(popupAnnot);
效果说明
该实现完全遵循PDF 32000规范,主流PDF阅读器均支持悬停在整个高亮矩形的任意位置触发弹窗显示,和你用Pdfsharp实现的效果完全一致。
如果不需要显示高亮底色,只需将
SetOpacity参数设为0即可实现隐形热区悬停触发弹窗的效果。
内容的提问来源于stack exchange,提问作者Dangerous Dev
相关产品推荐
相关产品推荐

