function GetLinkedAnnotationChain(AnnotIndex: Integer; Relationship: TPdfAnnotationRelationship; MaxDepth: Integer = 64): TPdfIntegerArray;
| AnnotIndex | Integer。開始注釈の現在のページ上での 0 始まりインデックスで、範囲は 0 .. AnnotationCount - 1 です |
| Relationship | TPdfAnnotationRelationship。parPopup は /Popup エントリを辿り、parInReplyTo は /IRT 返信エントリを辿ります |
| MaxDepth | Integer。辿るリンクの最大数です。1 から 4096 の間でなければならず、そうでなければ EPdfError が発生します。既定値は 64 です |
| Result | TPdfIntegerArray。訪問順に並んだ、リンクされた注釈のページインデックスです。開始注釈にそのようなリンクがない場合は空になります |
GetLinkedAnnotationIndex を繰り返し適用します。開始注釈から要求された関係に従って次の注釈へ進み、そこからさらに進み、途中の各インデックスを収集します。結果は、議論の返信スレッドまたはポップアップチェーンを、ページ注釈インデックスの単純な配列として表したものです
辿りは 3 つの条件で停止します。現在の注釈にそれ以上のリンクがない場合、訪問したリンク数が MaxDepth に達した場合、または次のインデックスがすでに訪問済みの注釈を再訪しようとした場合です (開始インデックスは訪問済みとみなされます)。このサイクルガードにより、/IRT エントリがループする不正なドキュメントでも呼び出しは安全です
開始インデックス自体は結果に含まれません。含まれるのはそれが導く注釈だけです。要求されたリンクを持たない注釈では、エラーではなく空の配列が返ります
1 .. 4096 の範囲外の MaxDepth は、注釈が 1 つも開かれる前に EPdfError を発生させます
var
Chain: TPdfIntegerArray;
Index: Integer;
begin
// collect the whole reply thread under annotation 5
Chain := Pdf1.GetLinkedAnnotationChain(5, parInReplyTo);
for Index in Chain do
Memo1.Lines.Add(Pdf1.Annotation[Index].ContentsText);
end;