PDFium Delphi Component Docs

BookmarkFrom プロパティ

コンポーネント: TPdf  ·  ユニット: PDFium
raw FPDF_BOOKMARK handle を、title、destination page、action metadata を読み取って完全な TBookmark record に変換します

Syntax

property BookmarkFrom[Handle: FPDF_BOOKMARK]: TBookmark; // read only

Description

BookmarkFrom は、低レベルの PDFium bookmark 走査と高レベルの TBookmark レコードをつなぐ橋です。PDFium から直接 FPDF_BOOKMARK ハンドルを取得したとき(例: FPDFBookmark_GetFirstChild や FPDFBookmark_GetNextSibling 経由、ビューアーでのクリック hit-test の一環など)は、このインデクサに渡せば解決済みの title テキスト、ターゲットの PageNumber、TPdfAction の種類、関連する URI / ファイルパスを受け取れます

返されるレコードはスナップショットです。bookmark 辞書を 1 回読み、destination を 1 基準のページ番号へデコードします。ハンドル自体もレコードに格納されるため、ツリーを再走査せずに PDFium API へそのまま渡せます

Bookmarks(深さ優先で全部列挙)や BookmarkChildren(直下の子のみ)より細かな制御が要る outline 走査を作るときは、このインデクサが正攻法です。生の PDFium ハンドルと BookmarkFrom による解決を組み合わせれば、たとえば遅延ロードのツリービューも組めます

Parameters

HandleFPDF_BOOKMARK。PDFium C API または既存の TBookmark.Handle フィールドから得た、nil でない bookmark ハンドル。nil を渡すとゼロ埋めのレコードが返ります。ハンドルは基底のドキュメントがロードされている間のみ有効です

Remarks

Example

procedure TForm1.DumpOutline(const Bm: TBookmark; Depth: Integer);
var
  Child: FPDF_BOOKMARK;
  Sub: TBookmark;
begin
  Memo1.Lines.Add(StringOfChar(' ', Depth * 2) + Bm.Title +
    Format(' -> page %d', [Bm.ActionPageNumber]));
  Child := FPDFBookmark_GetFirstChild(Pdf1.Document, Bm.Handle);
  while Child <> nil do
  begin
    Sub := Pdf1.BookmarkFrom[Child];
    DumpOutline(Sub, Depth + 1);
    Child := FPDFBookmark_GetNextSibling(Pdf1.Document, Child);
  end;
end;

See Also

Bookmark, Bookmarks, BookmarkChildren, HasBookmarkChildren