PDFium Delphi Component Docs

BookmarkFrom Eigenschaft

Komponente: TPdf  ·  Unit: PDFium
Konvertiert einen rohen FPDF_BOOKMARK-Handle in einen vollständig gefüllten TBookmark-Datensatz, indem Titel, Zielseite und Aktionsmetadaten für diesen Gliederungsknoten gelesen werden

Syntax

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

Description

BookmarkFrom ist die Brücke zwischen der Low-Level-PDFium-Outline-Traversierung und dem hochsprachlichen TBookmark-Record. Wann immer Sie ein FPDF_BOOKMARK-Handle direkt von PDFium erhalten (etwa über FPDFBookmark_GetFirstChild, FPDFBookmark_GetNextSibling oder als Teil eines Klick-Hit-Tests im Viewer), führen Sie es durch diesen Indexer, um den aufgelösten Titeltext, die Ziel-PageNumber, die TPdfAction-Art und eine zugeordnete URI bzw. einen Dateipfad zu bekommen

Der zurückgegebene Record ist ein Schnappschuss: Er liest das Lesezeichen-Dictionary einmal und dekodiert das Ziel in eine 1-basierte Seitennummer. Das Handle selbst liegt ebenfalls auf dem Record, sodass Sie es ohne erneuten Baum-Durchlauf wieder in PDFium-APIs einspeisen können

Dieser Indexer ist der kanonische Weg für eine eigene Outline-Traversierung, die mehr Kontrolle braucht als Bookmarks (zählt alles depth-first auf) oder BookmarkChildren (liefert nur direkte Kinder). Mischen Sie rohe PDFium-Handles mit der BookmarkFrom-Auflösung, um etwa einen lazy-load TreeView zu bauen

Parameters

HandleFPDF_BOOKMARK. Ein Nicht-nil-Lesezeichen-Handle aus der PDFium-C-API oder aus einem früheren TBookmark.Handle-Feld. nil liefert einen nullgesetzten Record. Das Handle bleibt nur gültig, solange das zugrunde liegende Dokument geladen ist

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