PDFium Delphi Component Docs

BookmarkFrom propriedade

Componente: TPdf  ·  Unidade: PDFium
Converte um handle bruto FPDF_BOOKMARK em um registro TBookmark totalmente preenchido, lendo o título, a página de destino e os metadados da ação para aquele nó do outline

Syntax

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

Description

BookmarkFrom é a ponte entre a travessia de bookmarks de baixo nível do PDFium e o record de alto nível TBookmark. Sempre que você obtiver um handle FPDF_BOOKMARK diretamente do PDFium (por exemplo por meio de FPDFBookmark_GetFirstChild, FPDFBookmark_GetNextSibling ou como parte de um teste de clique em um visualizador), passe-o por este indexador para receber o texto do título resolvido, o PageNumber de destino, o tipo de TPdfAction e qualquer URI / caminho de arquivo associado.

O record retornado é um snapshot: ele lê o dicionário do bookmark uma vez e decodifica o destino em um número de página baseado em 1. O próprio handle também é armazenado no record, de modo que você possa passá-lo de volta às APIs do PDFium sem outra varredura da árvore.

Este indexador é a forma canônica de implementar uma travessia de outline personalizada que exija mais controle do que Bookmarks (que enumera tudo em profundidade) ou BookmarkChildren (que retorna apenas filhos diretos). Misture handles brutos do PDFium com a resolução de BookmarkFrom para construir, por exemplo, um tree view de carregamento preguiçoso.

Parameters

HandleFPDF_BOOKMARK. Um handle de bookmark não nil obtido da API C do PDFium ou de um campo TBookmark.Handle anterior. Passar nil retorna um record preenchido com zeros. O handle permanece válido apenas enquanto o documento subjacente estiver carregado.

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