function RenderPageProgressive(
Bitmap : TBitmap;
Left, Top, Width, Height: Integer;
const AToken : IPdfCancellationToken;
Rotation : TRotation = ro0;
Options : TRenderOptions = [];
Color : TColor = clWhite): TPdfProgressiveStatus;
Color = clNone o Color = clDefault seleccionan un fondo transparente y un bitmap PDFium con canal alfa; los píxeles sin cubrir conservan alfa cero independientemente de la consulta nativa de transparencia del fondo de página, incluso en resultados parciales devueltos tras cancelar; clWhite sigue siendo el fondo opaco predeterminado
RenderPageProgressive renderiza la página actual en el
Bitmap suministrado mediante el ciclo
FPDF_RenderPageBitmap_Start +
FPDF_RenderPage_Continue de PDFium. Entre iteraciones,
la devolución de llamada IFSDK_PAUSE de PDFium consulta
AToken.IsCancelled — cuando la aplicación ha
cancelado, el ciclo se desenreda limpiamente y el mapa de bits conserva el
trabajo parcial realizado hasta ese momento
PDFium renderiza directamente en un buffer de bitmap de destino compatible; los buffers LCL nativos también deben tener el orden de bytes, desplazamientos de canales, orden de líneas y stride esperados; los demás formatos se convierten usando su descripción real de imagen cruda
El valor devuelto identifica cómo terminó el renderizado:
FPDF_RENDER_FAILED. El estado del mapa de bits queda indefinidoPase AToken = nil para renderizar hasta completar sin
pausarse nunca. En ese caso la función sigue bombeando
FPDF_RenderPage_Continue hasta DONE, pero nunca devuelve
prsCancelled. Esto es útil cuando el llamador quiere los
puntos de redibujado intermedios del ciclo progresivo (un OnPaint personalizado
que refleja el mapa de bits en progreso) pero no necesita cancelación
pf32bit; los bitmaps LCL nativos conservan su descripción de plataforma y solo usan renderizado directo cuando la disposición real del buffer es compatibleTPdf serializa las llamadas de renderizado por instancia; los llamadores aún deben evitar modificar o descargar el documento mientras un renderizado está en cursoEPdfError cuando Bitmap es nil — el contrato requiere un mapa de bits asignado por el llamador porque la ruta sin copia necesita una disposición DIB conocida
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;