PDFium Delphi Component 文件

BookmarkFrom 属性

组件: TPdf  ·  单元: PDFium
通过读取该大纲节点的标题、目标页面和动作元数据,把原始的 FPDF_BOOKMARK 句柄转换为完整填充的 TBookmark 记录

语法

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

说明

BookmarkFrom 是底层 PDFium 书签遍历与高层 TBookmark 记录之间的桥梁。当你直接从 PDFium 获得 FPDF_BOOKMARK 句柄时(例如通过 FPDFBookmark_GetFirstChild、FPDFBookmark_GetNextSibling,或在查看器中作为点击命中测试的一部分),把它传入该索引器即可获得解析后的标题文本、目标 PageNumber、TPdfAction 种类以及关联的 URI / 文件路径

返回的记录是一个快照:它只读取一次书签字典,并把目标解码为从 1 开始的页码。句柄本身也存储在记录上,因此你可以把它传回 PDFium API,而无需再次遍历树

该索引器是实现自定义大纲遍历的规范方式,适用于需要比 Bookmarks(深度优先枚举所有条目)或 BookmarkChildren(只返回直接子节点)更多控制的场景。把原始 PDFium 句柄与 BookmarkFrom 解析混合使用,例如可以构建延迟加载的树视图

参数

HandleFPDF_BOOKMARK。从 PDFium C API 或先前的 TBookmark.Handle 字段获得的非 nil 书签句柄。传入 nil 会返回全零记录。只有底层文档处于加载状态时句柄才保持有效

备注

示例

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;

参见

Bookmark, Bookmarks, BookmarkChildren, HasBookmarkChildren