property BookmarkFrom[Handle: FPDF_BOOKMARK]: TBookmark; // read only
BookmarkFrom, alt düzey PDFium bookmark gezinmesi ile üst düzey TBookmark kaydı arasındaki köprüdür. Doğrudan PDFium'dan bir FPDF_BOOKMARK tanıtıcısı elde ettiğinizde (örneğin FPDFBookmark_GetFirstChild, FPDFBookmark_GetNextSibling ile veya bir görüntüleyicide tıklama hit-test'inin parçası olarak), çözülmüş başlık metnini, hedef PageNumber'ı, TPdfAction türünü ve varsa ilişkili URI / dosya yolunu almak için bu indeksleyiciden geçirin
Döndürülen kayıt bir anlık görüntüdür: bookmark dictionary'sini bir kez okur ve hedefi 1 tabanlı sayfa numarasına çözer. Tanıtıcının kendisi de kayıtta saklanır; böylece yeniden ağaç taraması yapmadan PDFium API'lerine geri geçirebilirsiniz
This indexer is the canonical way to implement a custom outline traversal that needs more control than Bookmarks (which enumerates everything depth-first) or BookmarkChildren (which only returns direct children). Mix raw PDFium handles with BookmarkFrom resolution to build, for instance, a lazy-load tree view.
| Handle | FPDF_BOOKMARK. PDFium C API'sinden veya önceki bir TBookmark.Handle alanından alınan nil olmayan bookmark tanıtıcısı. nil geçirmek sıfırla dolu bir kayıt döndürür. Tanıtıcı yalnızca altta yatan doküman yüklüyken geçerlidir |
TBookmark record — do not call any PDFium release function on it. PDFium frees outline handles automatically when the document closes.Action alanı, Bookmark ve LinkAnnotation ile aynı TPdfAction enum'unu kullanır; böylece aynı yönlendirici kod hem outline girdilerinden hem link annotation'larından gelen tıklamaları yönlendirebilirPageNumber is reported as 0. Use HasBookmarkChildren to decide whether to expand or navigate.
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;