PDFium Delphi Component Docs

Metodo RenderPageProgressive

Componente: TPdf  ·  Unità: PDFium
Variante annullabile di RenderPage che esegue il ciclo di rendering progressivo PDFium e controlla un IPdfCancellationToken tra iterazioni, consentendo di interrompere a metà pagina rendering lunghi ad alto DPI senza aspettarne il completamento

Sintassi

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

Descrizione

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:

Passare 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

Note

Esempio

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;

Vedere anche

RenderPage, RenderTile