PDFium Delphi Component Docs

RenderPageProgressive Método

Componente: TPdf  ·  Unidade: PDFium
Variante cancelável de RenderPage que conduz o loop de renderização progressiva do PDFium e consulta um IPdfCancellationToken entre iterações, para que renderizações longas em alto DPI possam ser abortadas no meio da página em vez de bloquear até a conclusão

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 ou Color = clDefault seleciona um fundo transparente e um bitmap PDFium com suporte a alpha. Os pixels não cobertos mantêm alpha zero independentemente da consulta nativa de transparência de fundo da página, inclusive em resultados parcialmente renderizados devolvidos após cancelamento; clWhite continua sendo o fundo opaco padrão

RenderPageProgressive renderiza a página atual no Bitmap fornecido usando o loop FPDF_RenderPageBitmap_Start + FPDF_RenderPage_Continue do PDFium. Entre iterações, o callback IFSDK_PAUSE do PDFium consulta AToken.IsCancelled — quando a aplicação cancelou, o loop se desmonta de forma limpa e o bitmap mantém o trabalho parcial feito até aquele ponto

O mesmo caminho rápido sem cópia introduzido na v1.21.0 se aplica: o PDFium renderiza diretamente no buffer DIB do TBitmap de destino, em vez de passar por um buffer interno de preparação. Um fallback legado por linha de varredura existe para o caso improvável de o DIB de destino não poder ser encapsulado

O valor retornado identifica como a renderização terminou:

Passe AToken = nil para renderizar até a conclusão sem jamais pausar. Nesse caso a função ainda bombeia FPDF_RenderPage_Continue até DONE, mas nunca retorna prsCancelled. Isso é útil quando o chamador quer os pontos de redesenho intermediários do loop progressivo (um OnPaint personalizado que espelha o bitmap em andamento), mas não precisa de cancelamento

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