PDFium Delphi Component Docs

ObjectBounds プロパティ

コンポーネント: TPdf  ·  ユニット: PDFium
現在 page 上の 1 つの page object に対する、すべての CTM と object ごとの matrix を適用した後の PDF user-space 座標による、ぴったり合った axis-aligned bounding rectangle です

Syntax

property ObjectBounds[Index: Integer]: TPdfRectangle; // read only

Description

ページの 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 と組み合わせてください

Parameters

Index0 基準の page-object インデックス。0 ≤ Index < ObjectCount

Remarks

Example

// 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;

See Also

ObjectCount, ObjectType, ObjectHandle, ObjectTransparent, PageNumber