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 정의에 따라 변환합니다
반환 값은 렌더가 어떻게 끝났는지 식별합니다:
FPDF_RENDER_FAILED를 보고했습니다. 비트맵 상태는 정의되지 않습니다멈추지 않고 끝까지 렌더하려면 AToken = nil을 전달하세요. 이 경우 함수는 여전히 DONE이 될 때까지 FPDF_RenderPage_Continue를 펌프하지만 prsCancelled를 반환하지 않습니다
호출자가 점진적 루프의 중간 다시 그리기 지점(진행 중인 비트맵을 반영하는 사용자 지정 OnPaint)은 원하지만 취소는 필요 없을 때 유용합니다
pf32bit를 사용합니다. 네이티브 LCL 비트맵은 플랫폼 정의를 유지하며 실제 버퍼 레이아웃이 호환될 때만 직접 렌더링합니다TPdf는 인스턴스별로 렌더 호출을 직렬화합니다. 호출자는 여전히 렌더 진행 중에 문서를 변경하거나 언로드하지 않아야 합니다EPdfError가 발생합니다 — 제로 카피 경로에 알려진 DIB 레이아웃이 필요하므로 호출자가 할당한 비트맵이 계약에 요구됩니다
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;