TDestination для именованного назначения по указанному индексу с отсчетом от нуля. Именованные назначения — это косвенные цели, определенные под деревом Dests / Names в каталоге документа, как описано в разделе 12.3.2 PDFproperty Destination[Index: Integer]: TDestination; // read only
Именованное назначение — это символическое имя, например "chap5.fig3", хранимое в каталоге PDF-документа и разрешающееся в конкретную кортежную комбинацию страница-позиция-масштаб. Они позволяют оглавлениям, аннотациям-ссылкам и внешним документам ссылаться на цель по устойчивому имени, а не по жестко заданным координатам страницы, так что документ можно переразбить без поломки входящих ссылок
PDFiumPas сводит и устаревшие словари /Dests, и современные деревья имен /Names /Dests в единый список с нулевой базой. Destination[Index] возвращает запись TDestination, содержащую имя назначения, номер целевой страницы (с отсчетом от 1), координаты просмотра (X, Y), коэффициент масштаба и логические флаги, указывающие, был ли каждый компонент явно задан автором
Используйте DestinationCount, чтобы получить общее число именованных назначений, итерируйтесь с помощью Destination[I] и используйте DestinationByName, когда целевое имя уже известно
| Index | Integer. Позиция с отсчетом от нуля в сводном списке именованных назначений. Должна быть в [0, DestinationCount - 1]. Индекс вне диапазона возвращает нулевую запись с Handle = nil |
HasX, HasY и HasZoom отличают назначения «fit page» / «fit width» (где эти компоненты отсутствуют) от явных XYZ-назначений. Применяйте только те компоненты, которые помечены как присутствующиеMediaBox страницы, если нужны пиксели в пространстве устройстваHandle перед переходом
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;