function RenderPagesParallel(
const PageNumbers : array of Integer;
const Options : TPdfParallelRenderOptions;
const CancellationToken: IPdfCancellationToken = nil): TPdfParallelRenderReport;
RenderPagesParallel capturează documentul curent o singură dată într-un TPdfRandomAccessStore, elimină criptarea instantaneului și păstrează sursa imutabilă până când toate documentele worker se închid
O captură în memorie este partajată direct, fără o a doua copie de vector de octeți, o captură revarsată este expusă printr-o singură mapare de fișire doar pentru citire, iar eșecul mapării cade pe citiri de bloc FPDF_LoadCustomDocument din același magazin sigur pentru fire de execuție
Fiecare worker încarcă o copie temporară privată a binarului PDFium activ ca modul independent, inițializează acel modul pe firul său de execuție și își reutilizează propriul FPDF_DOCUMENT cât timp încarcă și închide paginile repartizate
Starea de modul, de document, de pagină, de randare progresivă și de bitmap nu traversează niciodată granițele dintre workeri, evitând apeluri concurente nesigure către un singur modul PDFium
PageNumbers folosește convenția publică de pagini bazate pe unu, iar vectorul Results returnat corespunde întotdeauna ordinii cererii, chiar și când workerii termină neordonat sau o pagină individuală eșuează
Fiecare rezultat reușit deține un buffer de pixeli pe 32 de biți, de sus în jos, cu Stride = Width * 4, folosind ordinea de octeți BGRA, cu excepția cazului în care reReverseByteOrder cere RGBA
| Field | Default | Meaning |
|---|---|---|
Dpi | 96 | Rezoluția țintă, de la mai mult de 0 până la 2400 DPI |
MaxWorkers | 0 | 0 selectează până la patru workeri, altfel 1 până la 64, mărginit de numărul de cereri |
MaxPixelsPerPage | 64 MiPixels | Respinge o pagină înainte de a aloca un buffer de rezultat supradimensionat |
MaxTotalOutputBytes | 512 MiB | Mărginește suma bufferelor de pixeli reușite păstrate |
Rotation | ro0 | Aplică aceeași rotație fiecărei cereri și schimbă dimensiunile de ieșire pentru 90 sau 270 de grade |
RenderOptions | [] | Fanioanele native de randare PDFium, inclusiv adnotări, nivel de gri, imprimare, netezire și ordine inversă de octeți |
BackgroundColor | clWhite | Fundalul inițial de pixeli, înainte ca PDFium să deseneze conținutul paginii |
pprsSucceeded returnează dimensiuni, stride, format de pixeli, pixeli și timp scurspprsCancelled nu returnează pixeli când anularea este observată înainte sau în timpul buclei de randare progresivăpprsFailed izolează în ErrorMessage o pagină invalidă, un eșec nativ de încărcare sau randare sau o respingere din bugetul de resurseTotalOutputBytes și timpul scurs cap-coadăSourceSize, SourcePeakMemoryBytes și SourceStorageBackend expun costul delimitat al capturiiSourceBackingKind este ppsbSharedMemory, ppsbMemoryMappedFile sau ppsbRandomAccessStore după captura surseireInvert și reNightDuotone sunt transformări de bitmap post-randare și sunt respinse de acest API cu buffer brutSaveMemoryLimit și SaveTemporaryDirectory conduc sursa capturată, în timp ce bugetul de ieșire acoperă bufferele de rezultat păstrate, nu alocările interne PDFiumTPdf cât timp instantaneul inițial este în curs de capturarePixels după ce i-ați consumat
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;