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 seleziona uno sfondo trasparente e un bitmap PDFium con alpha. I pixel non disegnati mantengono alpha zero indipendentemente dalla query nativa sulla trasparenza dello sfondo pagina, anche nei risultati parziali restituiti dopo l'annullamento; clWhite resta lo sfondo opaco predefinito
RenderPageProgressive disegna la pagina corrente sul Bitmap fornito usando il ciclo PDFium FPDF_RenderPageBitmap_Start + FPDF_RenderPage_Continue. Tra iterazioni la Callback IFSDK_PAUSE controlla AToken.IsCancelled — se l'applicazione ha annullato, il ciclo termina ordinatamente e il bitmap conserva il lavoro parziale già svolto
PDFium disegna direttamente su un buffer bitmap di destinazione compatibile. I buffer LCL nativi devono avere anche ordine dei byte, shift dei canali, ordine delle righe e stride attesi; gli altri layout vengono convertiti usando la loro vera descrizione raw-image
Il valore restituito identifica come si è concluso il render:
FPDF_RENDER_FAILED; lo stato del bitmap è indefinitoPassare AToken = nil per completare il rendering senza pause. La funzione continua a eseguire FPDF_RenderPage_Continue fino a DONE, ma non restituisce mai prsCancelled. È utile per usare punti di ridisegno intermedi del ciclo, ad esempio un OnPaint personalizzato che mostra il bitmap in corso, senza richiedere annullamento
pf32bit; i bitmap LCL nativi conservano la descrizione di piattaforma e usano rendering diretto solo se il layout reale del buffer è compatibileTPdf serializza le chiamate di rendering per istanza; evitare comunque modifiche o scaricamento del documento durante un rendering in corsoEPdfError — il contratto richiede un bitmap allocato dal chiamante perché il percorso zero-copy necessita di un layout DIB noto
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;