property ObjectBounds[Index: Integer]: TPdfRectangle; // read only
Content stream страницы — это последовательность объектов страницы: текстовые прогоны, векторные пути, растровые изображения, паттерны шейдинга и встроенные form XObjects (PDF 32000-1 § 8.2). ObjectBounds возвращает габаритный бокс объекта с номером Index на текущей странице после того, как PDFium развернул стек CTM и собственную матрицу cm объекта, поэтому прямоугольник сразу пригоден для hit testing, построения масок или кадрирования миниатюр без дополнительных вычислений
Прямоугольник следует стандартной конвенции координат PDF — начало в левом нижнем углу страницы, единицы 1/72 дюйма, Y растёт вверх — так что в корректном документе Bottom < Top. Это обёртка над FPDFPageObj_GetBounds из PDFium; сам вызов O(1), но внутри для путей итерируются все вершины контуров, поэтому при многократном чтении на объект результат стоит закэшировать
Допустимый диапазон — 0 .. ObjectCount - 1 для страницы, выбранной в PageNumber. Обращение к индексу вне диапазона возвращает нулевой прямоугольник. Сочетайте это свойство с ObjectType, чтобы ветвиться по типу объекта до чтения дополнительных свойств конкретного типа
| Index | Индекс объекта страницы с нуля, 0 ≤ Index < ObjectCount |
// Highlight every image object on the current page.
var I: Integer;
var R: TPdfRectangle;
begin
for I := 0 to Pdf1.ObjectCount - 1 do
if Pdf1.ObjectType[I] = otImage then
begin
R := Pdf1.ObjectBounds[I];
Memo1.Lines.Add(Format('image %d: %.1f,%.1f - %.1f,%.1f (%.1fx%.1f pt)',
[I, R.Left, R.Bottom, R.Right, R.Top,
R.Right - R.Left, R.Top - R.Bottom]));
end;
end;