PDFium Delphi Component Docs

Methode RenderPageProgressive

Komponente: TPdf  ·  Unit: PDFium
Abbrechbare Variante von RenderPage, die die progressive Render-Schleife von PDFium antreibt und zwischen den Iterationen ein IPdfCancellationToken abfragt, sodass lange High-DPI-Renders mitten auf der Seite abbrechen können, statt bis zum Abschluss zu blockieren

Syntax

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

Beschreibung

Color = clNone oder Color = clDefault wählen transparenten Hintergrund und alphafähiges PDFium-Bitmap; unbedeckte Pixel behalten Alpha null unabhängig von der nativen Transparenzabfrage, auch in Teilergebnissen nach Abbruch; clWhite bleibt opaker Standard

RenderPageProgressive rendert die aktuelle Seite in die angegebene Bitmap unter Verwendung der FPDF_RenderPageBitmap_Start- + FPDF_RenderPage_Continue-Schleife von PDFium. Zwischen den Iterationen fragt der IFSDK_PAUSE-Callback von PDFium AToken.IsCancelled ab — wenn die Anwendung abgebrochen hat, wird die Schleife sauber zurückgerollt und die Bitmap enthält die bisher geleistete Teilarbeit

PDFium rendert direkt in kompatible Zielpuffer; native LCL-Puffer benötigen passende Bytefolge, Kanalverschiebungen, Zeilenfolge und Stride; andere Layouts werden anhand ihrer tatsächlichen Raw-Image-Beschreibung konvertiert

Der Rückgabewert gibt an, wie das Render beendet wurde:

Übergeben Sie AToken = nil, um bis zum Abschluss zu rendern, ohne jemals zu pausieren. In diesem Fall pumpt die Funktion weiterhin FPDF_RenderPage_Continue bis DONE, gibt aber niemals prsCancelled zurück. Dies ist nützlich, wenn der Aufrufer die Zwischen-Redraw-Punkte der progressiven Schleife (ein benutzerdefiniertes OnPaint, das die In-Progress-Bitmap spiegelt) möchte, aber keinen Abbruch benötigt

Hinweise

Beispiel

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;

Siehe auch

RenderPage, RenderTile