PDFium Delphi Component Docs

Método RenderPageProgressive

Componente: TPdf  ·  Unidad: PDFium
Variante cancelable de RenderPage que controla el ciclo de renderizado progresivo de PDFium y consulta un IPdfCancellationToken entre iteraciones, para que los renderizados largos de alto DPI puedan abortarse a mitad de página en vez de bloquear hasta terminar

Sintaxis

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

Descripción

Color = clNone o Color = clDefault seleccionan un fondo transparente y un bitmap PDFium con canal alfa; los píxeles sin cubrir conservan alfa cero independientemente de la consulta nativa de transparencia del fondo de página, incluso en resultados parciales devueltos tras cancelar; clWhite sigue siendo el fondo opaco predeterminado

RenderPageProgressive renderiza la página actual en el Bitmap suministrado mediante el ciclo FPDF_RenderPageBitmap_Start + FPDF_RenderPage_Continue de PDFium. Entre iteraciones, la devolución de llamada IFSDK_PAUSE de PDFium consulta AToken.IsCancelled — cuando la aplicación ha cancelado, el ciclo se desenreda limpiamente y el mapa de bits conserva el trabajo parcial realizado hasta ese momento

PDFium renderiza directamente en un buffer de bitmap de destino compatible; los buffers LCL nativos también deben tener el orden de bytes, desplazamientos de canales, orden de líneas y stride esperados; los demás formatos se convierten usando su descripción real de imagen cruda

El valor devuelto identifica cómo terminó el renderizado:

Pase AToken = nil para renderizar hasta completar sin pausarse nunca. En ese caso la función sigue bombeando FPDF_RenderPage_Continue hasta DONE, pero nunca devuelve prsCancelled. Esto es útil cuando el llamador quiere los puntos de redibujado intermedios del ciclo progresivo (un OnPaint personalizado que refleja el mapa de bits en progreso) pero no necesita cancelación

Notas

Ejemplo

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;

Ver también

RenderPage, RenderTile