PDFium Delphi Component Docs

BookmarkFrom Propiedad

Componente: TPdf  ·  Unidad: PDFium
Convierte un manejador FPDF_BOOKMARK sin procesar en un registro TBookmark completamente rellenado leyendo el título, la página de destino y los metadatos de acción de ese nodo de esquema

Syntax

property BookmarkFrom[Handle: FPDF_BOOKMARK]: TBookmark;// solo lectura

Description

BookmarkFrom es el puente entre el recorrido de marcadores de bajo nivel de PDFium y el registro TBookmark de alto nivel. Siempre que obtenga un manejador FPDF_BOOKMARK directamente de PDFium (por ejemplo, a través de FPDFBookmark_GetFirstChild, FPDFBookmark_GetNextSibling, o como parte de una prueba de clic en un visor), páselo por este indexador para recibir el texto del título resuelto, el PageNumber de destino, el tipo TPdfAction y cualquier URI / ruta de archivo asociada

El registro devuelto es una instantánea: lee el diccionario del marcador una vez y decodifica el destino en un número de página de base 1. El manejador en sí también se almacena en el registro para que pueda pasarlo de vuelta a las API PDFium sin otro recorrido del árbol

Este indexador es la forma canónica de implementar un recorrido de esquema personalizado que necesita más control que Bookmarks (que enumera todo en profundidad primero) o BookmarkChildren (que solo devuelve hijos directos). Mezcle manejadores PDFium sin procesar con la resolución de BookmarkFrom para construir, por ejemplo, una vista de árbol de carga diferida

Parameters

HandleFPDF_BOOKMARK. Un manejador de marcador no nulo obtenido de la API C de PDFium o de un campo TBookmark.Handle anterior. Pasar nil devuelve un registro rellenado con ceros. El manejador solo permanece válido mientras el documento subyacente esté cargado

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