PDFium Delphi Component Docs

BookmarkFrom Proprietà

Componente: TPdf  ·  Unità: PDFium
Converte un handle FPDF_BOOKMARK grezzo in un record TBookmark completamente popolato leggendo il titolo, la pagina di destinazione e i metadati dell'azione per quel nodo dell'outline

Syntax

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

Description

BookmarkFrom è il ponte tra l'attraversamento dei segnalibri PDFium di basso livello e il record TBookmark di alto livello. Ogni volta che ottieni un handle FPDF_BOOKMARK direttamente da PDFium (per esempio tramite FPDFBookmark_GetFirstChild, FPDFBookmark_GetNextSibling, o come parte di un hit-test di clic in un viewer), passalo a questo indicizzatore per ricevere il testo del titolo risolto, il PageNumber di destinazione, il tipo TPdfAction e l'eventuale URI / percorso file associato

Il record restituito è uno snapshot: legge il dizionario del segnalibro una sola volta e decodifica la destinazione in un numero di pagina a base uno. L'handle stesso è memorizzato nel record, così puoi passarlo di nuovo alle API PDFium senza un'altra scansione dell'albero

Questo indicizzatore è il modo canonico per implementare un attraversamento personalizzato della struttura che richiede più controllo di Bookmarks (che enumera tutto in profondità) o BookmarkChildren (che restituisce solo i figli diretti). Mescola handle PDFium grezzi con la risoluzione di BookmarkFrom per costruire, per esempio, una tree view a caricamento lazy

Parameters

HandleFPDF_BOOKMARK. Un handle di segnalibro non nil ottenuto dalla API C di PDFium o da un campo TBookmark.Handle precedente. Passare nil restituisce un record azzerato. L'handle resta valido solo finché il documento sottostante è caricato

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