PDFium Delphi Component Docs

RenderPageProgressive Метод

Компонент: TPdf  ·  Модуль: PDFium
Отменяемый вариант RenderPage, управляющий циклом прогрессивной отрисовки PDFium и опрашивающий IPdfCancellationToken между итерациями, так что длительные отрисовки в высоком разрешении можно прервать в середине страницы вместо блокировки до завершения

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 или Color = clDefault выбирает прозрачный фон и растровое изображение PDFium с поддержкой альфа-канала. Непокрытые пиксели сохраняют нулевую альфу независимо от нативного запроса фоновой прозрачности страницы, включая частично отрисованные результаты, возвращённые после отмены; clWhite остаётся стандартным непрозрачным фоном

RenderPageProgressive отрисовывает текущую страницу в предоставленный Bitmap с использованием цикла PDFium FPDF_RenderPageBitmap_Start + FPDF_RenderPage_Continue. Между итерациями обратный вызов IFSDK_PAUSE PDFium опрашивает AToken.IsCancelled — когда приложение отменило операцию, цикл корректно завершается, и растровое изображение содержит частично выполненную работу

Применяется тот же быстрый путь с нулевым копированием, появившийся в v1.21.0: PDFium отрисовывает напрямую в DIB-буфер целевого TBitmap вместо промежуточного использования внутреннего буфера. Существует унаследованный резервный режим построчной отрисовки для маловероятного случая, когда целевой DIB не может быть обёрнут

Возвращаемое значение определяет, чем завершилась отрисовка:

Передайте AToken = nil, чтобы отрисовать до завершения без пауз. В этом случае функция всё ещё вызывает FPDF_RenderPage_Continue до DONE, но никогда не возвращает prsCancelled. Это полезно, когда вызывающему нужны промежуточные точки перерисовки прогрессивного цикла (пользовательский OnPaint, отображающий растровое изображение в процессе), но отмена не требуется

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