property ObjectBounds[Index: Integer]: TPdfRectangle; // read only
页面的 PDF 内容流是一串 页面对象:文本运行、矢量路径、光栅图像、
着色图案以及嵌入式 Form XObject(PDF 32000-1 § 8.2)
ObjectBounds 会返回当前页面上编号为 Index 的对象边界框,
该边界框是在 PDFium 压平 CTM 栈和对象自身 cm 矩阵之后得到的,
因此可直接用于命中测试、遮罩构建或缩略图裁剪,无需再做额外计算
该矩形使用标准 PDF 坐标约定——原点在页面左下角,单位为 1/72 英寸,Y 轴向上——
因此在结构正确的文档中 Bottom < Top。它封装了 PDFium 的
FPDFPageObj_GetBounds;该调用本身是 O(1),但对于路径会在内部遍历
每个轮廓顶点,因此如果要多次读取同一对象,缓存结果会更合适
当前由 PageNumber 选中的页面,其有效范围是
0 .. ObjectCount - 1。访问越界索引会返回零矩形。建议将此属性与
ObjectType 搭配使用,以便在读取更多按类型属性前
先按对象类别分派处理
| Index | Zero-based page-object index, 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;