PDFium Delphi Component Docs

RenderPageProgressive metod

Component: TPdf  ·  Unit: PDFium
Avbrytbar variant av RenderPage som driver PDFiums progressiva renderingsslinga och pollar en IPdfCancellationToken mellan iterationer så att långa hög-DPI-renderingar kan avbrytas mitt på sidan i stället för att blockera tills de är klara

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 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:

Skicka 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

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