function RenderPagesParallel(
const PageNumbers : array of Integer;
const Options : TPdfParallelRenderOptions;
const CancellationToken: IPdfCancellationToken = nil): TPdfParallelRenderReport;
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
| Field | Default | Meaning |
|---|---|---|
Dpi | 96 | Risoluzione di destinazione da più di 0 fino a 2400 DPI |
MaxWorkers | 0 | 0 seleziona fino a quattro worker, altrimenti da 1 a 64 limitati dal numero di richieste |
MaxPixelsPerPage | 64 MiPixels | Rifiuta una pagina prima di allocare un buffer di risultato sovradimensionato |
MaxTotalOutputBytes | 512 MiB | Limita la somma dei buffer di pixel riusciti trattenuti |
Rotation | ro0 | Applica 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 |
BackgroundColor | clWhite | Sfondo iniziale dei pixel prima che PDFium disegni il contenuto della pagina |
pprsSucceeded restituisce dimensioni, stride, formato pixel, pixel e tempo trascorsopprsCancelled non restituisce pixel quando l'annullamento viene osservato prima o durante il loop di rendering progressivopprsFailed isola in ErrorMessage una pagina non valida, un fallimento nativo di caricamento o rendering o un rifiuto per budget di risorseTotalOutputBytes e il tempo trascorso end-to-endSourceSize, SourcePeakMemoryBytes e SourceStorageBackend espongono il costo limitato dell'acquisizione della sorgenteSourceBackingKind è ppsbSharedMemory, ppsbMemoryMappedFile o ppsbRandomAccessStore dopo l'acquisizione della sorgentereInvert e reNightDuotone sono trasformazioni bitmap post-render e vengono rifiutate da questa API a buffer grezziSaveMemoryLimit e SaveTemporaryDirectory governano la sorgente acquisita mentre il budget di output copre i buffer dei risultati trattenuti, non le allocazioni interne di PDFiumTPdf in concorrenza mentre lo snapshot iniziale viene acquisitoPixels dopo averli consumati
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;