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 解析混合使用,即可建構例如延遲載入的樹狀檢視
| Handle | FPDF_BOOKMARK。從 PDFium C API 或先前 TBookmark.Handle 欄位取得的非 nil 書籤控制代碼。傳入 nil 會傳回全零記錄。該控制代碼僅在底層文件載入期間保持有效 |
TBookmark 記錄擁有 — 不要對它呼叫任何 PDFium 釋放函式。PDFium 會在文件關閉時自動釋放大綱控制代碼Action 欄位使用與 Bookmark 和 LinkAnnotation 相同的 TPdfAction 列舉,因此同一套分派程式碼可同時路由來自大綱項目與連結註解的點選PageNumber 會回報為 0。請使用 HasBookmarkChildren 決定要展開還是導覽
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;