PDFium Delphi Component Docs

Méthode RenderPageProgressive

Composant : TPdf  ·  Unité : PDFium
Variante annulable de RenderPage qui pilote la boucle de rendu progressif de PDFium et interroge un IPdfCancellationToken entre les itérations afin que les rendus longue durée en haute résolution puissent être abandonnés en pleine page au lieu de bloquer jusqu'à l'achèvement

Syntaxe

function RenderPageProgressive(
  Bitmap : TBitmap;
  Left, Top, Width, Height: Integer;
  const AToken : IPdfCancellationToken;
  Rotation : TRotation = ro0;
  Options : TRenderOptions = [];
  Color : TColor = clWhite): TPdfProgressiveStatus;

Description

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é :

Passez 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

Remarques

Exemple

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;

Voir aussi

RenderPage, RenderTile