function RenderPageProgressive(
Bitmap : TBitmap;
Left, Top, Width, Height: Integer;
const AToken : IPdfCancellationToken;
Rotation : TRotation = ro0;
Options : TRenderOptions = [];
Color : TColor = clWhite): TPdfProgressiveStatus;
Color = clNone ou Color = clDefault seleciona um fundo transparente e um bitmap PDFium com suporte a alpha. Os pixels não cobertos mantêm alpha zero independentemente da consulta nativa de transparência de fundo da página, inclusive em resultados parcialmente renderizados devolvidos após cancelamento; clWhite continua sendo o fundo opaco padrão
RenderPageProgressive renderiza a página atual no
Bitmap fornecido usando o loop
FPDF_RenderPageBitmap_Start +
FPDF_RenderPage_Continue do PDFium. Entre iterações,
o callback IFSDK_PAUSE do PDFium consulta
AToken.IsCancelled — quando a aplicação
cancelou, o loop se desmonta de forma limpa e o bitmap mantém o
trabalho parcial feito até aquele ponto
O mesmo caminho rápido sem cópia introduzido na v1.21.0 se aplica: o PDFium renderiza diretamente no buffer DIB do TBitmap de destino, em vez de passar por um buffer interno de preparação. Um fallback legado por linha de varredura existe para o caso improvável de o DIB de destino não poder ser encapsulado
O valor retornado identifica como a renderização terminou:
FPDF_RENDER_FAILED. O estado do bitmap é indefinidoPasse AToken = nil para renderizar até a conclusão sem
jamais pausar. Nesse caso a função ainda bombeia
FPDF_RenderPage_Continue até DONE, mas nunca retorna
prsCancelled. Isso é útil quando o chamador quer os
pontos de redesenho intermediários do loop progressivo (um OnPaint
personalizado que espelha o bitmap em andamento), mas não precisa de cancelamento
PixelFormat = pf32bit para o caminho sem cópia ser usado; outros formatos de pixel são atualizados para pf32bit antes do início da renderizaçãoTPdf serializa chamadas de renderização por instância; os chamadores ainda devem evitar alterar ou descarregar o documento enquanto uma renderização está em andamentoEPdfError é levantado quando Bitmap é nil — o contrato exige um bitmap alocado pelo chamador porque o caminho sem cópia precisa de um layout de DIB conhecido
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;