PDFium Delphi Component Docs

RenderPagesParallel Metodo

Componente: TPdf  ·  Unità: PDFium
Renderizza diverse richieste di pagina in concorrenza mentre ogni worker possiede un documento PDFium e un handle di pagina isolati

Syntax

function RenderPagesParallel(
  const PageNumbers : array of Integer;
  const Options : TPdfParallelRenderOptions;
  const CancellationToken: IPdfCancellationToken = nil): TPdfParallelRenderReport;

Description

RenderPagesParallel acquisisce una volta il documento corrente in un TPdfRandomAccessStore, rimuove la cifratura dello snapshot e mantiene la sorgente immutabile finché ogni documento worker non viene chiuso

Un'acquisizione in memoria viene condivisa direttamente senza una seconda copia dell'array di byte, un'acquisizione riversata su disco viene esposta tramite una mappatura di file di sola lettura, e un fallimento della mappatura ripiega su letture a blocchi FPDF_LoadCustomDocument dal medesimo archivio thread-safe

Ogni worker carica una copia temporanea privata del binario PDFium attivo come modulo indipendente, inizializza quel modulo nel proprio thread worker e riutilizza il proprio FPDF_DOCUMENT durante il caricamento e la chiusura delle pagine assegnate

Modulo, documento, pagina, stato del rendering progressivo e bitmap non attraversano mai i confini dei worker, evitando chiamate concorrenti non sicure in un unico modulo PDFium

PageNumbers usa la convenzione pubblica delle pagine a base uno e l'array Results restituito corrisponde sempre all'ordine della richiesta, anche quando i worker terminano fuori ordine o una singola pagina fallisce

Ogni risultato riuscito possiede un buffer di pixel a 32 bit top-down con Stride = Width * 4, usando l'ordine di byte BGRA a meno che reReverseByteOrder richieda RGBA

Options

FieldDefaultMeaning
Dpi96Risoluzione di destinazione da più di 0 fino a 2400 DPI
MaxWorkers00 seleziona fino a quattro worker, altrimenti da 1 a 64 limitati dal numero di richieste
MaxPixelsPerPage64 MiPixelsRifiuta una pagina prima di allocare un buffer di risultato sovradimensionato
MaxTotalOutputBytes512 MiBLimita la somma dei buffer di pixel riusciti trattenuti
Rotationro0Applica la stessa rotazione a ogni richiesta e scambia le dimensioni di output per 90 o 270 gradi
RenderOptions[]Flag di rendering nativi PDFium incluse annotazioni, scala di grigi, stampa, smoothing e ordine di byte inverso
BackgroundColorclWhiteSfondo iniziale dei pixel prima che PDFium disegni il contenuto della pagina

Results

Remarks

Example

uses FPdfAsync;

var
  Options: TPdfParallelRenderOptions;
  Report: TPdfParallelRenderReport;
  I: Integer;
begin
  Options := TPdfParallelRenderOptions.Default;
  Options.Dpi := 150;
  Options.MaxWorkers := 4;
  Options.RenderOptions := [reAnnotations];

  Report := Pdf1.RenderPagesParallel([1, 3, 5, 7], Options, CancelToken);
  for I := 0 to High(Report.Results) do
    if Report.Results[I].Status = pprsSucceeded then
      ConsumeTopDownPixels(Report.Results[I]);
end;

See Also

RenderPage, RenderPageProgressive, RenderTile