property BookmarkFrom[Handle: FPDF_BOOKMARK]: TBookmark; // read only
BookmarkFrom is de brug tussen bladwijjer-doorkruzing op laag niveau van PDFium en het TBookmark-record op hoog niveau. Telkens wanneer u direct een FPDF_BOOKMARK-handle uit PDFium verkrijgt (bijvoorbeeld via FPDFBookmark_GetFirstChild, FPDFBookmark_GetNextSibling, of als onderdeel van een klik-hit-test in een viewer), geeft u deze door aan deze indexer om de opgeloste titeltekst, het doel-PageNumber, het TPdfAction-type en eventuele bijbehorende URI / bestandspad te ontvangen.
Het teruggegeven record is een momentopname: het leest het bladwijzerwoordenboek eenmaal en decodeert de bestemming naar een op 1 gebaseerd paginanummer. De handle zelf wordt ook op het record opgeslagen, zodat u deze terug kunt doorgeven aan PDFium-API's zonder nog een boomwandeling.
Deze indexer is de canonieke manier om een aangepaste outline-doorkruising te implementeren die meer controle nodig heeft dan Bookmarks (dat alles diepte-eerst opsomt) of BookmarkChildren (dat alleen directe onderliggende items teruggeeft). Meng ruwe PDFium-handles met BookmarkFrom-resolutie om bijvoorbeeld een lazy-load-boomweergave te bouwen.
| Handle | FPDF_BOOKMARK. Een non-nil bladwijzerhandle verkregen via de PDFium C-API of vanuit een eerder TBookmark.Handle-veld. Het doorgeven van nil geeft een met nullen gevuld record terug. De handle blijft alleen geldig zolang het onderliggende document is geladen. |
TBookmark-record — roep er geen PDFium-vrijgavefunctie op aan. PDFium geeft outline-handles automatisch vrij wanneer het document sluit.Action-veld gebruikt dezelfde TPdfAction-enum als Bookmark en LinkAnnotation, zodat dezelfde dispatcher-code klikken van outline-entries en link-annotaties op gelijke wijze kan routeren.PageNumber gerapporteerd als 0. Gebruik HasBookmarkChildren om te beslissen of u moet uitvouwen of navigeren.
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;