PDFium Delphi Component Docs

RenderPageBandedToEncoder 메서드

컴포넌트: TPdf  ·  유닛: PDFium
현재 페이지를 클립된 가로 밴드로 렌더링하고 밴드 비트맵마다 호출자가 공급한 밴드 이미지 인코더로 전달합니다

Syntax

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

Width, HeightInteger. 한 조각으로 렌더링했다고 가정했을 때의 전체 페이지 이미지 크기(픽셀)입니다
BandHeightInteger. 밴드 하나의 높이(픽셀)입니다. Height가 배수가 아니면 마지막 밴드는 더 짧습니다
EncoderTPdfBandedImageEncoder. 밴드 스트림을 받는 호출자 소유 인코더 인스턴스입니다
RotationTRotation. 페이지에 적용되는 표시 회전으로 ro0, ro90, ro180, ro270입니다
OptionsTRenderOptions. 렌더링 플래그입니다
ColorTColor. 렌더링 전에 각 밴드에 적용되는 배경 채우기입니다
ResultTPdfBandedImageReport. 밴드 개수, 인코딩된 행, 피크 밴드 바이트, 출력 바이트, 완료 플래그입니다

Description

이 메서드는 RenderPageBanded와 같은 밴딩 루프를 구동하지만 애플리케이션 콜백 대신 새로 렌더링된 Width x 밴드 높이 비트맵마다 내부 브리지를 통해 호출자가 공급한 인코더의 세 가지 가상 메서드로 밀어 넣습니다. BeginImage(Width, Height)가 먼저 실행되고, WriteBand(BandIndex, BandTopY, Bitmap)가 위에서 아래로 밴드마다 한 번 호출되며, EndImage(Completed)가 이미지를 닫습니다

BandIndex는 0 기반이고 BandTopY는 밴드 위쪽의 전체 페이지 픽셀 y 오프셋입니다. 출력 파일에 행을 배치하는 데 필요한 값이 바로 이것입니다. 비트맵은 렌더 루프에 속하고 WriteBand가 반환되자마자 해제되므로 픽셀을 보관해야 하는 인코더는 복사해 두어야 합니다

WriteBand는 계속하려면 True, 나머지 밴드를 깔끔하게 취소하려면 False를 반환합니다. EndImage(True)는 요청한 모든 행이 인코딩되었을 때만 호출되고, 취소되거나 실패한 실행은 그 실패 경로에서 발생한 예외가 억제된 채 EndImage(False)를 받습니다

반환된 리포트는 Format = pbifCustom, 렌더링 및 수용된 밴드 수인 BandsRenderedBandsEncoded, 수용된 행인 RowsEncoded, Width x 밴드 높이 x 4바이트인 가장 큰 밴드 비트맵 PeakBandBytes, Encoder.GetBytesWritten 값인 OutputBytes, 그리고 RowsEncoded = Height일 때 정확히 Completed = True를 담습니다

피크 페이지 픽셀 저장은 밴드 비트맵 하나 수준으로 유지되므로 포스터와 공학 도면을 전체 대상 이미지를 할당하지 않고 인쇄 해상도로 내보낼 수 있습니다

Remarks

nil 인코더, 양수가 아닌 크기, 양수가 아닌 밴드 높이를 전달하면 EPdfError가 발생합니다

WidthMin(BandHeight, Height)의 곱은 주소 지정 가능한 Integer 범위의 4분의 1 안에 있어야 하며, 그렇지 않으면 EPdfError가 밴드 버퍼가 주소 지정 가능한 크기를 넘는다고 보고합니다

인코더 자손에서 GetBytesWritten을 재정의하면 인코더별 출력 텔레메트리를 OutputBytes에 보고할 수 있습니다. 기본 구현은 0을 반환합니다

Example

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;

See Also

RenderPageBanded, RenderPageBandedToStream, RenderPage, RenderTile