使用C# iTextSharp如何区分PDF中的链接注释与脚注注释
你观察到的F字段可以作为区分普通链接与脚注链接的有效判断依据,这一判断符合PDF官方规范的属性定义:
PDF规范中注释字典的F字段是位掩码格式的标记位,值为4对应打印标记位,代表该注释需要随文档内容一同打印。脚注类跳转链接属于文档内容的一部分,默认会开启打印标记,而普通外部跳转链接通常不会设置该标记,因此不会出现该字段或字段值不等于4。
你可以在原有Link类型判断的逻辑中新增校验逻辑即可实现区分,修改后的代码片段如下:
else if ((subType.Equals(PdfName.LINK)) && (strCommentsVariables.IndexOf("Link") != -1)) { PdfNumber annotFlag = annotationDic.GetAsNumber(PdfName.F); // 脚注链接会携带F=4的打印标记 if (annotFlag != null && annotFlag.IntValue == 4) { strCommentType = "脚注链接"; } else { strCommentType = "普通链接"; } }
如果要进一步降低误判概率,还可以结合注释的动作字段做双重校验:
- 脚注链接的动作(
A字段)通常是内部页面跳转的GoTo类型 - 普通外部链接的动作通常是
URI类型
双重校验可以兼容更多非标准工具生成的PDF文档。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

