function RenderPagesParallel(
const PageNumbers : array of Integer;
const Options : TPdfParallelRenderOptions;
const CancellationToken: IPdfCancellationToken = nil): TPdfParallelRenderReport;
RenderPagesParallel captura el documento actual una vez en un TPdfRandomAccessStore, elimina el cifrado de la instantánea y mantiene la fuente inmutable hasta que todos los documentos de trabajo se cierren
Una captura en memoria se comparte directamente sin una segunda copia de la matriz de bytes, una captura volcada a disco se expone mediante una única asignación de archivo de solo lectura, y si la asignación falla se recurre a lecturas de bloque FPDF_LoadCustomDocument desde el mismo almacén seguro para hilos
Cada trabajador carga una copia temporal privada del binario PDFium activo como módulo independiente, inicializa ese módulo en su hilo de trabajo y reutiliza su propio FPDF_DOCUMENT mientras carga y cierra las páginas asignadas
El estado del módulo, del documento, de la página, del renderizado progresivo y del mapa de bits nunca cruza los límites de los trabajadores, lo que evita llamadas concurrentes no seguras a un único módulo PDFium
PageNumbers usa la convención pública de páginas basada en uno y la matriz Results devuelta siempre coincide con el orden de la solicitud, incluso cuando los trabajadores terminan desordenados o una página individual falla
Cada resultado exitoso posee un búfer de píxeles de 32 bits de arriba abajo con Stride = Width * 4, usando el orden de bytes BGRA salvo que reReverseByteOrder solicite RGBA
| Campo | Predeterminado | Significado |
|---|---|---|
Dpi | 96 | Resolución objetivo desde más de 0 hasta 2400 DPI |
MaxWorkers | 0 | 0 selecciona hasta cuatro trabajadores; de lo contrario, de 1 a 64 acotado por el número de solicitudes |
MaxPixelsPerPage | 64 MiPixels | Rechaza una página antes de asignar un búfer de resultado de tamaño excesivo |
MaxTotalOutputBytes | 512 MiB | Acota la suma de los búferes de píxeles exitosos retenidos |
Rotation | ro0 | Aplica la misma rotación a cada solicitud e intercambia las dimensiones de salida para 90 o 270 grados |
RenderOptions | [] | Marcas de renderizado nativas de PDFium que incluyen anotaciones, escala de grises, impresión, suavizado y orden de bytes inverso |
BackgroundColor | clWhite | Fondo inicial de píxeles antes de que PDFium pinte el contenido de la página |
pprsSucceeded devuelve dimensiones, stride, formato de píxel, píxeles y tiempo transcurridopprsCancelled no devuelve píxeles cuando la cancelación se observa antes o durante el bucle de renderizado progresivopprsFailed aísla en ErrorMessage una página no válida, un fallo nativo de carga o renderizado o un rechazo por presupuesto de recursosTotalOutputBytes y el tiempo transcurrido de extremo a extremoSourceSize, SourcePeakMemoryBytes y SourceStorageBackend exponen el coste acotado de la captura de la fuenteSourceBackingKind es ppsbSharedMemory, ppsbMemoryMappedFile o ppsbRandomAccessStore tras la captura de la fuentereInvert y reNightDuotone son transformaciones del mapa de bits posteriores al renderizado y esta API de búfer bruto las rechazaSaveMemoryLimit y SaveTemporaryDirectory gobiernan la fuente capturada, mientras que el presupuesto de salida cubre los búferes de resultado retenidos y no las asignaciones internas de PDFiumTPdf concurrentemente mientras se captura la instantánea inicialPixels después de consumirlas
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;