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 sélectionne un fond transparent et un bitmap PDFium avec alpha ; les pixels non couverts gardent un alpha nul indépendamment de la requête native de transparence de fond, y compris les résultats partiels après annulation ; clWhite reste le fond opaque par défaut
RenderPageProgressive affiche la page courante dans le Bitmap fourni en utilisant la boucle FPDF_RenderPageBitmap_Start + FPDF_RenderPage_Continue de PDFium. Entre les itérations, le rappel IFSDK_PAUSE de PDFium interroge AToken.IsCancelled — lorsque l'application a annulé, la boucle se déroule proprement et le bitmap conserve le travail partiel effectué jusqu'alors
PDFium dessine directement dans un tampon bitmap destination compatible ; les tampons LCL natifs doivent aussi avoir l’ordre d’octets, décalages de canaux, ordre des lignes et pas attendus ; les autres dispositions sont converties selon leur description réelle d’image brute
La valeur de retour identifie comment le rendu s'est terminé :
FPDF_RENDER_FAILED. L'état du bitmap est indéfiniPassez AToken = nil pour afficher jusqu'à l'achèvement sans jamais marquer de pause. Dans ce cas, la fonction continue toujours d'actionner FPDF_RenderPage_Continue jusqu'à DONE mais ne renvoie jamais prsCancelled. Cela est utile lorsque l'appelant veut les points de redessin intermédiaires de la boucle progressive (un OnPaint personnalisé qui reflète le bitmap en cours) mais n'a pas besoin d'annulation
pf32bit ; les bitmaps LCL natifs gardent leur description plateforme et n’utilisent le rendu direct que si la disposition réelle du tampon est compatibleTPdf sérialise les appels de rendu par instance ; les appelants doivent néanmoins éviter de muter ou de décharger le document pendant qu'un rendu est en coursEPdfError est levée lorsque Bitmap vaut nil — le contrat exige un bitmap alloué par l'appelant car le chemin sans copie a besoin d'une disposition DIB connue
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;