property ObjectBounds[Index: Integer]: TPdfRectangle; // read only
頁面的 PDF content stream 是一連串 page objects:文字片段、向量路徑、光柵影像、著色圖樣與嵌入式 Form XObject(PDF 32000-1 § 8.2)。ObjectBounds 會在 PDFium 展平成 CTM stack 與物件自身的 cm matrix 之後,傳回目前頁面上 Index 那個物件的 bounding box,因此不需要再做任何計算就能直接拿來做 hit testing、mask 建構或縮圖裁切
這個矩形使用標準 PDF 座標慣例,原點在頁面左下角,單位是 1/72 inch,Y 軸向上,所以在結構正常的文件中 Bottom < Top。它包裝的是 PDFium 的 FPDFPageObj_GetBounds;這個呼叫本身是 O(1),但對 path 會在內部逐一走訪每個 contour vertex,因此如果同一個物件要讀很多次,快取結果會比較明智
有效範圍是目前由 PageNumber 選定頁面的 0 .. ObjectCount - 1。存取超出範圍的索引會傳回零矩形。請先把這個屬性和 ObjectType 搭配起來,再依物件種類分派,然後才讀取各型別的其他屬性
| Index | 0 起算的頁面物件索引,0 ≤ Index < ObjectCount |
// 標示目前頁面上的每個影像物件
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;