PDFium Delphi Component Docs

RenderPagesParallel metodă

Component: TPdf  ·  Unit: PDFium
Randează concurent mai multe cereri de pagini, fiecare worker deținând un document PDFium izolat și un mâner de pagină propriu

Syntax

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

Description

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

Options

FieldDefaultMeaning
Dpi96Rezoluția țintă, de la mai mult de 0 până la 2400 DPI
MaxWorkers00 selectează până la patru workeri, altfel 1 până la 64, mărginit de numărul de cereri
MaxPixelsPerPage64 MiPixelsRespinge o pagină înainte de a aloca un buffer de rezultat supradimensionat
MaxTotalOutputBytes512 MiBMărginește suma bufferelor de pixeli reușite păstrate
Rotationro0Aplică 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
BackgroundColorclWhiteFundalul inițial de pixeli, înainte ca PDFium să deseneze conținutul paginii

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