property Destination[Index: Integer]: TDestination; // read only
Именованное назначение — это символическое имя (например, "chap5.fig3"), сохранённое в каталоге документа PDF и разрешающееся в конкретный набор страница-позиция-масштаб. Оно позволяет структурам, аннотациям-ссылкам и внешним документам ссылаться на цель по стабильному имени, а не по жёстко заданным координатам страницы, поэтому документ можно разбивать на страницы заново, не ломая входящие ссылки
PDFium Delphi Component сводит как устаревшие словари /Dests, так и современные деревья имён /Names /Dests в единый список с отсчётом от нуля. Destination[Index] возвращает запись TDestination, содержащую имя назначения, целевую страницу с отсчётом от единицы, декодированный ViewMode, исходные ViewParameters, координаты просмотра, коэффициент масштабирования и флаги присутствия
Используйте DestinationCount для получения общего числа именованных назначений, перебирайте их через Destination[I] и используйте DestinationByName, когда целевое имя уже известно
| Index | Integer. Позиция с отсчётом от нуля в сведённом списке именованных назначений. Должна быть в [0, DestinationCount - 1]. Индекс вне диапазона возвращает заполненную нулями запись с Handle = nil |
HasX, HasY и HasZoom отличают назначения "вся страница" / "по ширине" (где эти компоненты отсутствуют) от явных назначений XYZ. Применяйте только компоненты, помеченные как присутствующиеViewMode различает назначения XYZ, Fit, FitH, FitV, FitR, FitB, FitBH и FitBV, не требуя от вызывающих декодировать константы PDFiumViewParameterCount даёт число действительных элементов в фиксированном четырёхэлементном массиве ViewParametersHandle перед навигацией
var
I: Integer;
Dest: TDestination;
begin
Pdf1.LoadFromFile('manual.pdf');
Memo1.Lines.Add(Format('%d named destinations:', [Pdf1.DestinationCount]));
for I := 0 to Pdf1.DestinationCount - 1 do
begin
Dest := Pdf1.Destination[I];
Memo1.Lines.Add(Format('%s -> page %d (X=%.1f Y=%.1f Zoom=%.2f)',
[Dest.Name, Dest.PageNumber, Dest.X, Dest.Y, Dest.Zoom]));
end;
// Navigate to the first destination
if Pdf1.DestinationCount > 0 then
Pdf1.PageNumber := Pdf1.Destination[0].PageNumber;
end;