property LinkAnnotationCount[PageNumber: Integer]: Integer; // read only
LinkAnnotationCount は、1 基準の PageNumber 引数で指定されたページ上のサブタイプ /Link entry の数を返します(PDF 1.7 仕様 12.5.6.5 節)。現在アクティブなページに限定され全注釈サブタイプを数える AnnotationCount と違い、このインデックス付きプロパティは任意のページを直接対象にし、リンク注釈だけに絞ります。テキストやグラフィックスの周囲のクリック領域を包み、destination、URI、launch アクション、名前付きアクションを指す entry です
PageNumber は 1 .. PageCount の範囲で渡します。Active が False のとき、ページインデックスが不正なとき、ページにリンク注釈がないときは 0 です。PDFium Delphi Component は「自動検出」された Web URL も WebLinkCount として別途公開しています。そちらはテキストパターンの走査によるもので、LinkAnnotationCount には含まれません
TLinkAnnotation レコードを取り出すには、0 から LinkAnnotationCount[PageNumber] - 1 のインデックスで LinkAnnotation[PageNumber, Index] を使います。bounding rectangle、ターゲットページ番号、アクションタイプ、複数行リンクの四辺形点、解決済みのアクション payload が入ります。リンクメタデータのロードはページあたり O(n) なので、多くのページを回すならキャッシュしてください
Index とは異なりますWebLinkCount と組み合わせてください0 を返すので、try/except なしでスレッドから使っても安全です
var P, I: Integer;
var Link: TLinkAnnotation;
for P := 1 to Pdf1.PageCount do
for I := 0 to Pdf1.LinkAnnotationCount[P] - 1 do
begin
Link := Pdf1.LinkAnnotation[P, I];
Memo1.Lines.Add(Format('p%d link → page %d', [P, Link.PageNumber]));
end;