PDFium Component Docs

RenderPageProgressive methode

Component: TPdf  ·  Unit: PDFium
Annuleerbare variant van RenderPage die de progressieve rendering-lus van PDFium aanstuurt en tussen iteraties een IPdfCancellationToken pollt zodat lange hoge-DPI-renders midden in de pagina kunnen afbreken in plaats van te blokkeren tot voltooiing

Syntax

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

Description

Color = clNone of Color = clDefault selecteert een transparante achtergrond en een alpha-capabele PDFium-bitmap. Niet-gedekte pixels behouden alpha nul, onafhankelijk van de native paginabackground-transparantiequery, inclusief gedeeltelijk gerenderde resultaten die na annulering worden teruggegeven; clWhite blijft de standaard ondoorzichtige achtergrond

RenderPageProgressive rendert de huidige pagina naar de aangegeven Bitmap met behulp van de FPDF_RenderPageBitmap_Start + FPDF_RenderPage_Continue-lus van PDFium. Tussen iteraties pollt de IFSDK_PAUSE-callback van PDFium AToken.IsCancelled — wanneer de toepassing heeft geannuleerd, wikkelt de lus netjes af en houdt de bitmap het tot nu toe uitgevoerde gedeeltelijke werk vast.

Hetzelfde zero-copy snelle pad geïntroduceerd in v1.21.0 is van toepassing: PDFium rendert rechtstreeks naar de DIB-buffer van de bestemmings-TBitmap in plaats van via een interne buffer te stagen. Een legacy per-scanline-fallback bestaat voor het onwaarschijnlijke geval waarin de bestemmings-DIB niet kan worden gewikkeld.

De retourwaarde identificeert hoe de render eindigde:

Geef AToken = nil door om tot voltooiing te renderen zonder ooit te pauzeren. In dat geval pompt de functie nog steeds FPDF_RenderPage_Continue tot DONE maar retourneert nooit prsCancelled. Dit is nuttig wanneer de aanroeper de tussenliggende hertekenpunten van de progressieve lus wil (een aangepaste OnPaint die de in-uitvoering-bitmap spiegelt) maar geen annulering nodig heeft.

Remarks

Example

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;

See Also

RenderPage, RenderTile