function RenderPageProgressive(
Bitmap : TBitmap;
Left, Top, Width, Height: Integer;
const AToken : IPdfCancellationToken;
Rotation : TRotation = ro0;
Options : TRenderOptions = [];
Color : TColor = clWhite): TPdfProgressiveStatus;
Color = clNone eller Color = clDefault väljer en transparent bakgrund och en alfakapabel PDFium-bitmapp. Otäckta pixlar behåller noll alfa oberoende av den nativa frågan om sidans bakgrundstransparens, inklusive delvis renderade resultat som returneras efter avbrott; clWhite förblir den opaka standardbakgrunden
RenderPageProgressive renderar den aktuella sidan till den angivna
Bitmap med PDFiums
FPDF_RenderPageBitmap_Start +
FPDF_RenderPage_Continue-slinga. Mellan iterationerna pollar
PDFiums IFSDK_PAUSE-återanrop
AToken.IsCancelled — när programmet har
avbrutit rullas slingan upp rent och bitmappen innehåller
det partiella arbete som utförts hittills
Samma zero-copy-snabbspår som introducerades i v1.21.0 gäller: PDFium renderar direkt i mål-TBitmap:ens DIB-buffert i stället för att stega via en intern buffert. En äldre reservlösning per scanline finns för det osannolika fall där mål-DIB:en inte kan lindas in
Returvärdet identifierar hur renderingen avslutades:
FPDF_RENDER_FAILED. Bitmappens tillstånd är odefinieratSkicka AToken = nil för att rendera till fullbordan utan
att någonsin pausa. I det fallet driver funktionen fortfarande
FPDF_RenderPage_Continue ända till DONE men returnerar aldrig
prsCancelled. Detta är användbart när anroparen vill ha den
progressiva slingans mellanliggande omritningspunkter (en egen OnPaint
som speglar bitmappen som är under arbete) men inte behöver något avbrott
PixelFormat = pf32bit för att zero-copy-spåret ska aktiveras; andra pixelformat uppgraderas till pf32bit innan renderingen påbörjasTPdf serialiserar renderingsanrop per instans; anropare måste fortfarande undvika att ändra eller stänga dokumentet medan en rendering pågårEPdfError väcks när Bitmap är nil — kontraktet kräver en av anroparen allokerad bitmapp eftersom zero-copy-spåret behöver en känd DIB-layout
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;