property BookmarkFrom[Handle: FPDF_BOOKMARK]: TBookmark;// solo lectura
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
| Handle | FPDF_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 |
TBookmark; no llame a ninguna función de liberación de PDFium sobre él. PDFium libera los manejadores de esquema automáticamente cuando el documento se cierraAction resuelto usa el mismo enum TPdfAction que Bookmark y LinkAnnotation, de modo que el mismo código de despacho pueda enrutar los clics de las entradas de esquema y de las anotaciones de enlace por igualPageNumber se informa como 0. Use HasBookmarkChildren para decidir si expandir o navegar
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;