function RenderPageProgressive(
Bitmap : TBitmap;
Left, Top, Width, Height: Integer;
const AToken : IPdfCancellationToken;
Rotation : TRotation = ro0;
Options : TRenderOptions = [];
Color : TColor = clWhite): TPdfProgressiveStatus;
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:
FPDF_RENDER_FAILED. De bitmap-status is ongedefinieerd.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.
PixelFormat = pf32bit hebben opdat het zero-copy-pad wordt geactiveerd; andere pixelformaten worden vóór de render opgewaardeerd naar pf32bit.TPdf serialiseert render-aanroepen per instantie; aanroepers moeten nog steeds vermijden het document te muteren of te ontladen terwijl een render in uitvoering is.EPdfError wordt opgegooid wanneer Bitmap nil is — het contract vereist een door aanroeper toegewezen bitmap omdat het zero-copy-pad een bekende DIB-lay-out nodig heeft.
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;