PDFium Component Docs

RenderPagesParallel Metoda

Component: TPdf  ·  Unit: PDFium
Renderuje kilka żądań stron współbieżnie, przy czym każdy worker posiada odizolowany dokument PDFium i uchwyt strony

Syntax

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

Description

RenderPagesParallel jednorazowo przechwytuje bieżący dokument do TPdfRandomAccessStore, usuwa szyfrowanie snapshotu i utrzymuje źródło niemutowalnym, dopóki wszystkie dokumenty workerów się nie zamkną

Przechwycenie w pamięci jest współdzielone bezpośrednio, bez drugiej kopii tablicy bajtów, przechwycenie przelane jest eksponowane przez pojedyncze mapowanie pliku tylko do odczytu, a niepowodzenie mapowania wraca do odczytów blokowych FPDF_LoadCustomDocument z tego samego bezpiecznego dla wątków magazynu

Każdy worker wczytuje prywatną tymczasową kopię aktywnej biblioteki PDFium jako niezależny moduł, inicjalizuje ten moduł na swoim wątku roboczym i ponownie używa własnego FPDF_DOCUMENT przy wczytywaniu i zamykaniu przydzielonych stron

Stan modułu, dokumentu, strony, renderowania progresywnego i bitmapy nigdy nie przekracza granic workerów, co eliminuje niebezpieczne współbieżne wywołania do jednego modułu PDFium

PageNumbers używa publicznej konwencji stron indeksowanych od jedynki, a zwracana tablica Results zawsze odpowiada kolejności żądania, nawet gdy workery kończą poza kolejnością albo pojedyncza strona zawodzi

Każdy udany wynik posiada bufor pikseli 32-bitowy od góry do dołu z Stride = Width * 4, w kolejności bajtów BGRA, chyba że reReverseByteOrder zażąda RGBA

Options

FieldDefaultMeaning
Dpi96Docelowa rozdzielczość od powyżej 0 do 2400 DPI
MaxWorkers00 wybiera do czterech workerów, w przeciwnym razie 1 do 64, ograniczone liczbą żądań
MaxPixelsPerPage64 MiPixelsOdrzuca stronę przed alokacją przesadnie dużego bufora wyniku
MaxTotalOutputBytes512 MiBOgranicza sumę zatrzymanych udanych buforów pikseli
Rotationro0Stosuje tę samą rotację do każdego żądania i zamienia wymiary wyjściowe dla 90 lub 270 stopni
RenderOptions[]Natywne flagi renderowania PDFium, w tym adnotacje, skala szarości, drukowanie, wygładzanie i odwrócona kolejność bajtów
BackgroundColorclWhitePoczątkowe tło pikseli, zanim PDFium namaluje zawartość strony

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