function RenderPagesParallel(
const PageNumbers : array of Integer;
const Options : TPdfParallelRenderOptions;
const CancellationToken: IPdfCancellationToken = nil): TPdfParallelRenderReport;
RenderPagesParallel erfasst das aktuelle Dokument einmalig in einem TPdfRandomAccessStore, entfernt die Snapshot-Verschlüsselung und hält die Quelle unveränderlich, bis jedes Worker-Dokument geschlossen ist
Eine speicher interne Erfassung wird ohne zweite Byte-Array-Kopie direkt geteilt, eine ausgelagerte Erfassung wird über eine einzige schreibgeschützte Dateiabbildung bereitgestellt, und bei einem Abbildungsfehler fällt die Methode auf FPDF_LoadCustomDocument-Blocklesevorgänge aus demselben threadsicheren Store zurück
Jeder Worker lädt eine private temporäre Kopie der aktiven PDFium-Binärdatei als eigenständiges Modul, initialisiert dieses Modul in seinem Worker-Thread und verwendet sein eigenes FPDF_DOCUMENT erneut, während er zugewiesene Seiten lädt und schließt
Modul-, Dokument-, Seiten-, Progressive-Render- und Bitmap-Zustand überschreiten niemals Worker-Grenzen, wodurch unsichere nebenläufige Aufrufe in ein einzelnes PDFium-Modul vermieden werden
PageNumbers folgt der öffentlichen 1-basierten Seitenkonvention, und das zurückgegebene Results-Array entspricht immer der Anforderungsreihenfolge, selbst wenn Worker außer der Reihe fertig werden oder eine einzelne Seite fehlschlägt
Jedes erfolgreiche Ergebnis besitzt einen Top-down-32-Bit-Pixelpuffer mit Stride = Width * 4 in BGRA-Byte-Reihenfolge, sofern reReverseByteOrder nicht RGBA anfordert
| Feld | Standard | Bedeutung |
|---|---|---|
Dpi | 96 | Zielauflösung von mehr als 0 bis 2400 DPI |
MaxWorkers | 0 | 0 wählt bis zu vier Worker, andernfalls 1 bis 64, begrenzt durch die Anzahl der Anforderungen |
MaxPixelsPerPage | 64 MiPixels | Lehnt eine Seite ab, bevor ein überdimensionierter Ergebnispuffer alloziert wird |
MaxTotalOutputBytes | 512 MiB | Begrenzt die Summe der gehaltenen erfolgreichen Pixelpuffer |
Rotation | ro0 | Wendet dieselbe Drehung auf jede Anforderung an und tauscht bei 90 oder 270 Grad die Ausgabemaße |
RenderOptions | [] | Native PDFium-Render-Flags einschließlich Annotationen, Graustufen, Druck, Glättung und umgekehrter Byte-Reihenfolge |
BackgroundColor | clWhite | Anfänglicher Pixelhintergrund, bevor PDFium den Seiteninhalt zeichnet |
pprsSucceeded liefert Maße, Stride, Pixelformat, Pixel und verstrichene ZeitpprsCancelled liefert keine Pixel, wenn der Abbruch vor oder während der Progressive-Render-Schleife erkannt wirdpprsFailed isoliert eine ungültige Seite, ein natives Lade- oder Renderproblem oder eine Ressourcenbudget-Ablehnung in ErrorMessageTotalOutputBytes und die Ende-bis-Ende-LaufzeitSourceSize, SourcePeakMemoryBytes und SourceStorageBackend legen die Kosten der begrenzten Erfassung offenSourceBackingKind ist nach der Quellenerfassung ppsbSharedMemory, ppsbMemoryMappedFile oder ppsbRandomAccessStorereInvert und reNightDuotone sind Bitmap-Transformationen nach dem Rendern und werden von dieser Rohpuffer-API abgelehntSaveMemoryLimit und SaveTemporaryDirectory steuern die erfasste Quelle, während das Ausgabebudget die gehaltenen Ergebnispuffer und nicht die internen PDFium-Allokationen abdecktTPdf-Instanz nicht nebenläufig, während der erste Snapshot erfasst wirdPixels-Arrays nach der Verwendung leeren
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;