PDFium Delphi Component Docs

BookmarkFrom Свойство

Компонент: TPdf  ·  Модуль: PDFium
Преобразует необработанный дескриптор FPDF_BOOKMARK в полностью заполненную запись TBookmark, читая заголовок, страницу назначения и метаданные действия для этого узла структуры

Syntax

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

Description

BookmarkFrom — мост между низкоуровневым обходом закладок PDFium и высокоуровневой записью TBookmark. Когда дескриптор FPDF_BOOKMARK попадает к вам напрямую из PDFium (например, через FPDFBookmark_GetFirstChild, FPDFBookmark_GetNextSibling или в составе click hit-test во вьювере), прогоните его через этот индексатор и получите разрешённый текст заголовка, целевой PageNumber, вид TPdfAction и ассоциированный URI / путь к файлу

Возвращаемая запись — снимок: словарь закладки читается один раз, а назначение декодируется в номер страницы с единицы. Сам дескриптор тоже сохраняется в записи, так что его можно передать обратно в API PDFium без повторного обхода дерева

Этот индексатор — канонический способ написать собственный обход outline с большим контролем, чем Bookmarks (перечисляет всё в глубину) или BookmarkChildren (возвращает только прямых детей). Смешивайте сырые дескрипторы PDFium с разрешением через BookmarkFrom, чтобы собрать, к примеру, tree view с ленивой загрузкой

Parameters

HandleFPDF_BOOKMARK. Не-nil дескриптор закладки, полученный из C API PDFium или из поля TBookmark.Handle предыдущей записи. При nil возвращается запись, заполненная нулями. Дескриптор остаётся валидным, только пока базовый документ загружен

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