PDFium Delphi Component Docs

RenderPageProgressive 메서드

컴포넌트: TPdf  ·  유닛: PDFium
RenderPage의 취소 가능 변형으로 PDFium의 점진적 렌더링 루프를 구동하고 반복 사이에 IPdfCancellationToken을 폴링하여 오래 걸리는 고 DPI 렌더를 완료까지 차단하는 대신 페이지 도중에 중단할 수 있게 합니다

구문

function RenderPageProgressive(
  Bitmap : TBitmap;
  Left, Top, Width, Height: Integer;
  const AToken : IPdfCancellationToken;
  Rotation : TRotation = ro0;
  Options : TRenderOptions = [];
  Color : TColor = clWhite): TPdfProgressiveStatus;

설명

Color = clNone 또는 Color = clDefault를 지정하면 투명 배경과 알파 채널을 지원하는 PDFium 비트맵을 사용합니다. 취소 후 반환되는 부분 렌더링 결과에서도 내용이 그려지지 않은 픽셀의 알파 값은 네이티브 페이지의 배경 투명도 조회 결과와 관계없이 0으로 유지됩니다. 기본값인 clWhite는 불투명 배경을 사용합니다

RenderPageProgressive는 PDFium의 FPDF_RenderPageBitmap_Start + FPDF_RenderPage_Continue 루프로 현재 페이지를 제공된 Bitmap에 렌더링합니다. 반복 사이에 PDFium의 IFSDK_PAUSE 콜백이 AToken.IsCancelled를 폴링합니다 — 응용 프로그램이 취소하면 루프가 깨끗하게 풀리고 비트맵은 지금까지 진행된 부분 작업을 유지합니다

PDFium은 호환되는 대상 비트맵 버퍼에 직접 렌더링합니다. 네이티브 LCL 버퍼도 예상한 바이트 순서, 채널 shift, 스캔라인 순서, stride를 갖춰야 합니다. 다른 레이아웃은 실제 raw-image 정의에 따라 변환합니다

반환 값은 렌더가 어떻게 끝났는지 식별합니다:

멈추지 않고 끝까지 렌더하려면 AToken = nil을 전달하세요. 이 경우 함수는 여전히 DONE이 될 때까지 FPDF_RenderPage_Continue를 펌프하지만 prsCancelled를 반환하지 않습니다 호출자가 점진적 루프의 중간 다시 그리기 지점(진행 중인 비트맵을 반영하는 사용자 지정 OnPaint)은 원하지만 취소는 필요 없을 때 유용합니다

참고 사항

예제

uses FPdfAsync;

var
  Bitmap: TBitmap;
  Status: TPdfProgressiveStatus;
begin
  Bitmap := TBitmap.Create;
  try
    Bitmap.PixelFormat := pf32bit;
    Bitmap.SetSize(2480, 3508); // A4 @ 300 DPI
    Status := Pdf1.RenderPageProgressive(Bitmap,
      0, 0, Bitmap.Width, Bitmap.Height,
      CancelToken, ro0, [reAnnotations]);
    case Status of
      prsDone: SaveBitmap(Bitmap);
      prsCancelled: Log.Add('Cancelled mid-page');
      prsFailed: Log.Add('PDFium FPDF_RENDER_FAILED');
    end;
  finally
    Bitmap.Free;
  end;
end;

관련 항목

RenderPage, RenderTile