property ObjectBounds[Index: Integer]: TPdfRectangle; // read only
ページの PDF content stream は page object の並びです。テキスト run、ベクターパス、ラスター画像、shading パターン、埋め込み form XObject です(PDF 32000-1 の § 8.2)。ObjectBounds は、PDFium が CTM スタックとオブジェクト自身の cm matrix を展開したあとの、現在ページの Index 番目のオブジェクトの bounding box を返します。そのため rectangle は、追加の計算なしで hit-test、マスク作成、サムネイル切り出しにそのまま使えます
rectangle は標準の PDF 座標規約に従います。原点はページ左下、単位は 1/72 インチ、Y は上向きに増えます。したがって整形式のドキュメントでは Bottom < Top です。PDFium の FPDFPageObj_GetBounds をラップしており、呼び出し自体は O(1) ですが、パスでは内部で全輪郭頂点を反復するため、オブジェクトごとに何度も読むなら結果のキャッシュが賢明です
有効範囲は PageNumber で選択中のページの 0 .. ObjectCount - 1 です。範囲外のインデックスへアクセスするとゼロ rectangle を返します。型ごとの追加プロパティを読む前にオブジェクト種別で分岐するには、このプロパティを ObjectType と組み合わせてください
| Index | 0 基準の page-object インデックス。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;