PDFium Delphi Component Docs

ObjectTransparent プロパティ

コンポーネント: TPdf  ·  ユニット: PDFium
page object が PDF transparency に関与しているかを示します — 非不透明の fill / stroke alpha か、Normal 以外の blend mode を持つ場合です — そのため、単純な painter's-algorithm rendering ではなく compositing が必要になります

Syntax

property ObjectTransparent[Index: Integer]: Boolean; // read only

Description

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 がキャッシュ済みページを再構築したあとです

Parameters

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

Remarks

Example

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

See Also

ObjectCount, ObjectType, ObjectBounds, Transparent