property ObjectTransparent[Index: Integer]: Boolean; // read only
PDF 1.4 が導入した Transparency Imaging Model(PDF 32000-1 の § 11)により、任意の page object は graphics-state の alpha(ca/CA)と blend mode(ExtGState 辞書の BM)を指定できます。ObjectTransparent は、PDFium が Index のオブジェクトでどちらかを検出したら True を返します。つまりレンダラーは単純な上塗りができず、オブジェクトのために独立した compositing バッファを確保する必要があります
これは、現在ページ全体に透明コンテンツがあるかを報告する Transparent のオブジェクト単位版です。ページの高コストな部分だけをフラット化したい、透明性を理解しない印刷現場のパイプライン向けに受け入れる PDF を監査したい、完全に不透明な大多数のオブジェクトで compositing をショートカットしてカスタム描画を速くしたい、そういうときに使います
結果は挿入時点でのオブジェクト自身の graphics state を反映します。オブジェクトを変更しても(例: alpha を 255 以外にしてネイティブの FPDFPageObj_SetFillColor を呼ぶ)、報告値が変わるのは UpdatePage と ReloadPage がキャッシュ済みページを再構築したあとです
| Index | 0 基準の page-object インデックス。0 ≤ Index < ObjectCount |
True を報告しますFalse を報告することがあります。このプロパティはオブジェクト自体を記述するもので、兄弟とどう合成されるかは表しませんFPDFPageObj_HasTransparency をラップしており、ObjectCount を回すループ内でも呼び出しコストを意図的に安くしています
// Count opaque vs transparent objects on the current page.
var I, NOpaque, NAlpha: Integer;
begin
NOpaque := 0; NAlpha := 0;
for I := 0 to Pdf1.ObjectCount - 1 do
if Pdf1.ObjectTransparent[I] then Inc(NAlpha)
else Inc(NOpaque);
Memo1.Lines.Add(Format('opaque=%d, transparent=%d', [NOpaque, NAlpha]));
end;