Listas de visualización y producción de impresión

HotPDF compila los flujos de página cargados en instancias reutilizables de THPDFPageDisplayList con métricas de THPDFDisplayListInfo y cuadros delimitadores de objetos de contenido

El renderizado de documentos almacena en caché las listas compiladas, mientras que los llamadores pueden solicitar una lista de propiedad independiente para ejecución repetida o consultas regionales de objetos

Intérprete de producción compartido

El bitmap no progresivo, el DC directo, los Form y la reproducción de display lists pasan todos el contenido pre-tokenizado por HPDFInterpretContentTokensDevice, que posee el recorrido de operadores y las fronteras de cancelación

THPDFPageRenderer implementa IHPDFContentOperatorDevice, de modo que el recorrido compartido invoca su máquina de estados completa de gráficos, texto, recursos, clipping, patrones, transparencia, marked-content e imágenes, sin reducir el renderizado de producción a la superficie más pequeña de callbacks semánticos

Las display lists cachean índices de tokens de operadores mientras los streams se compilan y solo reproducen esos índices, evitando escaneos repetidos de operandos; THPDFPageDisplayList.OperatorCount y THPDFDisplayListInfo.OperatorCount exponen el recuento de comandos cacheado

Los dispositivos semánticos que solo implementan IHPDFContentDevice conservan los callbacks filtrados por capacidades, mientras que los dispositivos de operadores completos reciben un operador validado cada vez con un punto de control de cancelación por operador

Renderizado acotado y concurrente

THPDFRenderTileEvent recibe un mosaico o banda horizontal de tamaño elegido por el llamador cada vez, manteniendo la memoria pico del ráster independiente del tamaño completo de la página

RenderLoadedPagesParallel solapa la compilación de la display-list con la reproducción, arranca la primera página lista sin esperar una barrera de compilación completa, equilibra dinámicamente ambas etapas entre workers acotados y devuelve un THPDFBitmapArray en el orden de entrada

La compilación se ejecuta fuera del lock de caché de display-lists, mientras que la admisión con doble comprobación y los contadores de uso protegidos permiten que páginas no relacionadas compilen concurrentemente sin duplicar entradas publicadas ni expulsar una lista durante la reproducción

THPDFParallelRenderPipelineInfo expone aciertos de caché, compilaciones, terminaciones, concurrencia pico de compilación y render, páginas compiladas en el primer resultado, latencia del primer resultado y tiempo total transcurrido

RenderLoadedPagesParallelOrdered entrega los callbacks en orden de entrada en el hilo llamador y libera cada bitmap prestado después de que el callback devuelva, mientras que una profundidad de salida elegida por el llamador aplica contrapresión al productor y reserva una ranura para la siguiente página requerida, de modo que una página temprana lenta no pueda provocar un interbloqueo detrás de resultados posteriores

El streaming ordenado retiene como máximo una display list y un render activo por worker más la cola acotada de bitmaps completados, en lugar de mantener residente toda la salida del trabajo

Los backends de render enchufables consumen las mismas listas compiladas a través de una vista de recursos del documento sin propiedad, de modo que las rutas síncrona y paralela evitan reparsear el contenido de página mientras las capacidades del backend determinan si las llamadas pueden solaparse o requieren despacho serializado

El planificador de memoria pico para todo el proceso limita ahora ambas APIs paralelas: la mayor estimación de página reduce el recuento inicial de workers, cada página reclamada reserva su conjunto de trabajo estimado completo, y la salida ordenada conserva esa reserva durante la entrega de callbacks

La cancelación del planificador despierta a los que esperan presupuesto cuando se cancela un callback o falla un worker, mientras que la telemetría expone workers solicitados frente a efectivos, peso pico de reserva, páginas retrasadas y tiempo de espera agregado

RenderLoadedPageTilesParallel y RenderLoadedPageBandsParallel entregan tiles por filas o bandas de arriba abajo prestados entre workers aislados, cada worker posee como mucho un tile, y un límite de memoria de trabajo suministrado por el llamador reduce la concurrencia antes de la primera reclamación

Los contextos de render paralelo copian secuencias inmutables de tokens de glifos Type 3 y pantallas de umbral de halftone desde una caché LRU acotada, preservando la propiedad local del renderizador para el estado mutable de gráficos y los recursos GDI

SaveLoadedPageToPng, SaveLoadedPageToPngStream, SaveLoadedPagesToTiffBanded y SaveLoadedPagesToTiffStreamBanded usan el mismo renderer por bandas a través de codificadores PNG o TIFF en streaming, de modo que las páginas muy grandes emiten salida comprimida fila a fila sin mantener en memoria un framebuffer completo, mientras THPDFBandImageExportInfo informa de las bandas renderizadas, las filas codificadas, los workers, los bytes de reserva máxima, los bytes de salida, el tiempo transcurrido y las cancelaciones

La decodificación compartida de imágenes se coordina aparte para que el trabajo vectorial de página siga en paralelo sin corromper entradas de la caché de imágenes decodificadas

PrefetchLoadedPages precalienta entradas de raster con un token de cancelación dedicado mientras compila y renderiza fuera del lock de la caché, y el renderizado de página en primer plano desaloja al worker antes de empezar el trabajo sensible a la latencia

THPDFLoadedPagePrefetchInfo informa del trabajo programado, iniciado, completado, cacheado, renderizado, fallido, cancelado y preemptado por primer plano, junto con la latencia de cancelación última y pico

Controles de transparencia e impresión

El aplanado de transparencia primero comprueba el recuento de transparencia de la lista de visualización y un límite de píxeles definido por el llamador, y luego reemplaza la pintura de página con una imagen RGB calibrada comprimida con Flate sin pérdida

Las páginas con colorantes Separation o DeviceN permanecen como contenido vectorial, con los colorantes detectados y el estado de conservación expuestos al llamador

El renderer ejecuta funciones de transferencia y diccionarios de halftone de tipo 1, 5, 6, 10 o 16 desde ExtGState, y conserva las pantallas RGB independientes y sus sustituciones de transferencia a través de q y Q

THPDFInkCoverageInfo informa de la cobertura CMYK media, la cobertura máxima de área total y el número de píxeles por encima del umbral seleccionado

La salida de placas de proceso y de tinta plana admite colorantes DeviceCMYK, Separation y DeviceN

La reescritura de color de páginas cargadas usa el mismo renderizador completo para convertir páginas complejas a Gray, RGB o CMYK conservando el contenido de página de color de dispositivo simple como vectores y aplicando una política explícita de placas de tinta plana

THPDFTrappingInfo combina las declaraciones de atrapado del documento, los metadatos de página y los diagnósticos estructurales de TrapNet

Flujo de trabajo ICC

La transformación de renderizado puede combinar un perfil de origen PDF, un espacio de color de fusión, un perfil de prueba, un perfil de salida y un destino ráster sRGB

Las cuatro intenciones de renderizado ICC y la verdadera compensación de punto negro se aplican de forma coherente a los colores vectoriales y las muestras de imagen en todo el proceso

Las transformaciones completas se comparten entre las rutas de renderizado vectorial, de imagen, de página y paralela mediante una caché LRU de 64 MiB segura para hilos, con clave basada en el contenido de los perfiles de origen, prueba y salida, la intención de renderizado efectiva y la compensación de punto negro

El aplanado de transparencia reutiliza el mismo proceso de transformación y luego emite teselas CalRGB D65 sin costuras bajo presupuestos de píxeles de ráster total y por tesela controlados por el llamador

APIs principales