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

如何提取PDF中链接注释对应的超链接显示文本 现有代码仅能提取地址

获取PDF链接注释对应显示文本的实现方案

原方法失效原因

PDF规范中链接注释本身没有强制绑定对应显示文本:

  • annot.GetTitle() 用于提取注释的可选说明标题,仅少数特殊生成的PDF会填充该字段
  • annot.GetContents() 用于提取注释的可选描述内容,绝大多数PDF生成工具不会将链接的显示文本存入该字段
    所以两个方法返回null是正常现象。

正确实现思路

链接注释会标注自身在页面上的坐标范围,只需要提取该坐标范围内的页面文本即可得到链接对应的显示内容,基于iText的完整实现如下:

原有逻辑补充代码

在你原有获取到PdfArray rectArray = annot.GetRectangle();的位置,补充以下代码即可:

using iText.Kernel.Geom;
using iText.Kernel.Pdf.Canvas.Parser;
using iText.Kernel.Pdf.Canvas.Parser.Filter;
using iText.Kernel.Pdf.Canvas.Parser.Listener;

// 转换注释坐标为矩形对象
float x = rectArray.GetAsNumber(0).FloatValue();
float y = rectArray.GetAsNumber(1).FloatValue();
float width = rectArray.GetAsNumber(2).FloatValue() - x;
float height = rectArray.GetAsNumber(3).FloatValue() - y;
Rectangle linkRect = new Rectangle(x, y, width, height);

// 配置区域过滤的文本提取策略
TextRegionEventFilter regionFilter = new TextRegionEventFilter(linkRect);
LocationTextExtractionStrategy extractionStrategy = new LocationTextExtractionStrategy();
extractionStrategy.SetEventFilter(regionFilter);

// 提取指定区域文本
string linkDisplayText = PdfTextExtractor.GetTextFromPage(page, extractionStrategy);

注意事项

  • 部分PDF的文本坐标和注释坐标可能存在微小偏差,如果出现提取内容不全的情况,可以适当将x、y坐标各减1,width、height各加2,扩大提取范围即可
  • 如果你使用的是旧版iTextSharp,核心逻辑一致,仅API命名存在小幅差异

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:15:06