PDFium Delphi Component Docs

RenderPageBandedToEncoder メソッド

コンポーネント: TPdf  ·  ユニット: PDFium
現在のページをクリッピングされた水平バンドでレンダリングし、各バンドビットマップを呼び出し側が提供するバンド画像エンコーダへ転送します

構文

function RenderPageBandedToEncoder(Width, Height, BandHeight: Integer;
  Encoder: TPdfBandedImageEncoder; Rotation: TRotation = ro0;
  Options: TRenderOptions = []; Color: TColor = clWhite): TPdfBandedImageReport;

Width, HeightInteger。ページ全体を 1 枚でレンダリングした場合と同じ、フルページ画像のサイズ (ピクセル)
BandHeightInteger。各バンドの高さ (ピクセル)。Height がその倍数でない場合、最後のバンドは短くなります
EncoderTPdfBandedImageEncoder。バンドストリームを受け取る、呼び出し側所有のエンコーダインスタンス
RotationTRotation。ページに適用される表示回転。ro0ro90ro180ro270 のいずれか
OptionsTRenderOptions。レンダリングフラグ
ColorTColor。レンダリング前に各バンドに適用される背景塗り
ResultTPdfBandedImageReport。バンド数、エンコード済み行数、ピークバンドバイト数、出力バイト数、完了フラグ

説明

このメソッドは RenderPageBanded と同じバンドループを駆動しますが、アプリケーションコールバックの代わりに、新しくレンダリングされた Width x バンド高さのビットマップを毎回内部ブリッジを通じて、呼び出し側が提供するエンコーダの 3 つの仮想メソッドへ渡します。最初に BeginImage(Width, Height) が実行され、WriteBand(BandIndex, BandTopY, Bitmap) が上から下へバンドごとに 1 回ずつ呼ばれ、EndImage(Completed) が画像を閉じます

BandIndex は 0 始まりで、BandTopY はバンド上端のフルページピクセル単位の y オフセットです。出力ファイルに行を配置するためにストリップライターが必要とするのはこの値です。ビットマップはレンダリングループに属し、WriteBand が返ると直ちに解放されるため、ピクセルを保持したいエンコーダはコピーしなければなりません

WriteBand は続行するために True を返し、残りのバンドを中断せずにキャンセルするために False を返します。EndImage(True) は要求されたすべての行がエンコードされた場合にのみ呼ばれ、キャンセルまたは失敗した実行は EndImage(False) を受け取ります。その失敗パスからの例外は抑制されます

返されるレポートは Format = pbifCustomBandsRenderedBandsEncoded のレンダリングおよび受け入れ済みバンド数、RowsEncoded の受け入れ済み行数、PeakBandBytes の最大バンドビットマップサイズ (Width x バンド高さ x 4 バイト)、OutputBytesEncoder.GetBytesWritten の値、そして RowsEncoded = Height のときに限り Completed = True を運びます

ピークのページピクセル保存域は 1 枚のバンドビットマップに留まるため、ポスターや工程図も完全な出力画像を確保することなく印刷解像度でエクスポートできます

備考

nil のエンコーダ、正でない寸法、または正でないバンド高さを渡すと EPdfError が発生します

WidthMin(BandHeight, Height) の積は、アドレス可能な Integer 範囲の 4 分の 1 以内でなければなりません。そうでなければ EPdfError がバンドバッファがアドレス可能なサイズを超えたと報告します

エンコーダの派生クラスで GetBytesWritten をオーバーライドすると、エンコーダ固有の出力テレメトリを OutputBytes に報告できます。基底の実装は 0 を返します

type
  TRawStripEncoder = class(TPdfBandedImageEncoder)
  public
    procedure BeginImage(Width, Height: Integer); override;
    function WriteBand(BandIndex, BandTopY: Integer;
      Bitmap: TBitmap): Boolean; override;
    procedure EndImage(Completed: Boolean); override;
  end;

Encoder := TRawStripEncoder.Create;
try
  Report := Pdf.RenderPageBandedToEncoder(4960, 7016, 512, Encoder);
  LogBandedExport(Report.BandsEncoded, Report.PeakBandBytes);
finally
  Encoder.Free;
end;

関連項目

RenderPageBanded, RenderPageBandedToStream, RenderPage, RenderTile