Renderer nativo de Cairo en Linux
HPDFHeadlessCairoDevice renderiza una página PDF cargada a un PNG RGB usando superficies de imagen de Cairo y FreeType, sin servidor de display ni lector de PDF
Suministra una vista prestada serial desde THPDFHeadlessDocument.GetRenderAccess(PageIndex) y mantén ese documento cargado y sin cambios hasta que el rendering devuelva
Document := THPDFHeadlessDocument.Create;
try
Document.LoadFromFile('input.pdf');
Options := THPDFHeadlessRenderOptions.Default;
Info := HPDFRenderHeadlessPagePNGFile(
Document.GetRenderAccess(0), 'page.png', Options);
finally
Document.Free;
end;
Dependencias de runtime
El Linux nativo usa libcairo.so.2, libfreetype.so.6 y la dependencia Fontconfig del proveedor de fuentes estándar; instala fuentes adecuadas para la sustitución de Helvetica, Times y Courier
HOTPDF_CAIRO_LIBRARY y HOTPDF_FREETYPE_LIBRARY pueden seleccionar paths de bibliotecas compatibles explícitos antes del primer render; los módulos exitosos permanecen cargados porque los caches nativos de fuentes pueden retener callbacks de destrucción
El host debe mantener cargado su ejecutable, DLL o código de paquete de HotPDF mientras esos caches nativos puedan retener callbacks de destrucción de fuentes de HotPDF; descargar un módulo del host de forma independiente a la vida del cache queda fuera de este perfil
Windows usa libcairo-2.dll y libfreetype-6.dll compatibles mediante el mismo bridge; los binarios de runtime y sus licencias los provee la aplicación
Los colores ICCBased además cargan liblcms2.so.2; JPEG usa libturbojpeg.so.0 y JPEG 2000 usa un libopenjp2.so.7 compatible con OpenJPEG 2.5; estas dependencias solo se cargan para las entradas correspondientes
HOTPDF_LCMS_LIBRARY, HOTPDF_TURBOJPEG_LIBRARY y HOTPDF_OPENJPEG_LIBRARY sobrescriben esos paths; los defaults de Windows son lcms2.dll, turbojpeg.dll y openjp2.dll
Perfil de rendering
El contenido soportado incluye construcción y pintado de paths, reglas de relleno nonzero y even-odd, clipping, graphics state anidado, transforms CTM, estilo de línea, colores DeviceGray/RGB/CMYK, alpha normal y Form XObjects repetidos con sus propios recursos, Matrix y BBox
Los anchos de línea pueden ser cero: las hairlines de PDF solicitadas con 0 w o ExtGState LW=0 usan un trazo de un píxel en espacio de dispositivo; los anchos negativos se rechazan
ExtGState D y el operador d del content stream comparten validación acotada de dashes: los patrones vacíos sólidos, las repeticiones de longitud impar, las entradas de longitud cero, las longitudes fraccionarias y las fases con signo son soportadas
Un dash pattern admite 256 longitudes finas no negativas como máximo de hasta 1e9, con al menos una longitud positiva cuando no está vacío y una fase finita de valor absoluto hasta 1e9; cada elemento consume trabajo de la operación y el almacenamiento temporal participa en la admisión de bytes de trabajo
Los arrays de operandos aceptan comentarios PDF, incluidos los arrays de dashes numéricos y los arrays de texto TJ; los valores léxicos malformados y los corchetes de cierre ausentes son retenidos por el scanner compartido y rechazados por el renderer en lugar de desaparecer en silencio
El texto horizontal usa el intérprete de glifos compartido para text matrices, anchos PDF explícitos, advances canónicos de Helvetica/Times/Courier, espaciado de caracteres y palabras, escala horizontal y ajustes TJ
Los programas de fuentes incrustadas soportadas usan FreeType con glyph IDs resueltos; los mapeos Unicode ToUnicode siguen disponibles a través de la API de texto del documento, mientras que las formas raster de fuentes estándar dependen de los sustitutos instalados
El texto compuesto soporta Identity-H, Identity-V, streams CMap de codificación incrustada explícitos y los mapeos horizontales y verticales integrados UniJIS, UniGB, UniCNS y UniKS UCS2/UTF16; no se requieren recursos CMap instalados por separado
El pintado vertical de glifos honra los vectores de posicionamiento DW2/W2 por defecto y explícitos, el text rise, la escala horizontal, las matrices de texto y gráficos y el desplazamiento TJ; los mapeos UTF-16 aceptan códigos de caracteres suplementarios
Los ocho modos de text rendering son soportados, incluidos los outlines verticales fill/stroke/invisible acumulados en el clip en ET; los streams CMap de codificación incrustada retienen su WMode y sus mapeos CID no identidad
Las operaciones transparentes combinadas de fill-and-stroke usan composición knockout de objetos para que el relleno solapado no se filtre a través del trazo; los procedimientos de glifos Type3 ejecutan sus propios recursos acotados y font matrices
Las imágenes aceptan muestras de 1/2/4/8/16 bits y arrays Decode, stencil, explicit, color-key y soft masks, máscaras de tamaños distintos y recuperación de Matte; un Interpolate ausente usa muestreo nearest-neighbor y true selecciona muestreo bilineal
Los codestreams JPX aceptan componentes fuente con o sin signo de hasta 26 bits, incluida precisión mixta, subsampling y opacidad explícita, y normalizan a muestras acotadas de 8 o 16 bits; los BitsPerComponent del diccionario de imagen y las entradas Decode que no son de stencil se ignoran para imágenes JPX como exige el perfil de imágenes del PDF
Las paletas Indexed y las transforms validadas de perfil a sRGB ICCBased son soportadas para imágenes y colores de paths; DeviceCMYK sin perfil retiene la conversión simple de dispositivo
Las transforms ICCBased aceptan firmas de perfil Gray, RGB, CMYK, Lab y XYZ y validan estrictamente el conteo declarado de componentes y los rangos de componentes
Los operandos de perfiles Lab usan coordenadas físicas L a b con rangos por defecto [0 100 -128 127 -128 127]; los operandos XYZ usan coordenadas físicas X Y Z con un rango por defecto sin signo de 1.15 [0 65535/32768] por componente
Las entradas de perfiles XYZ son una extensión nativa de compatibilidad y no implican conformidad PDF de archivado; los perfiles fuente Lab y XYZ no seleccionan un espacio de blending de transparencia soportado
El Range de un stream ICC exige dos valores finitos ordenados por componente y acota los operandos de color; los defaults raw de Decode de imágenes y los valores de lookup Indexed usan esos rangos de componentes
CalGray, CalRGB y Lab soportan paths, texto, imágenes y bases Indexed; los parámetros se validan estrictamente, las entradas Matrix de CalRGB siguen el orden de columnas del PDF, y los componentes Lab y los defaults de Decode de imágenes usan los rangos declarados
Los colores CIE usan adaptación cromática de Bradford y salida sRGB relativa; los metadatos de BlackPoint se validan, mientras que la compensación adicional de black-point y las políticas de estado de rendering intent siguen siendo extensiones separadas
Los colores compuestos Separation y DeviceN retienen de uno a treinta y dos componentes de tint para paths, bases Indexed e imágenes empaquetadas; los colores alternativos de dispositivo o CIE usan funciones de tint acotadas sampled, exponential, stitching o calculator
Las fuentes alternativas de color ICCBased Lab/XYZ y CalGray/CalRGB/Lab retienen sus coordenadas físicas a través de la tint transform antes de la conversión a un grupo de transparencia soportado
Las funciones de tint muestreadas multidimensionales soportan interpolación lineal y cúbica, Domain, Encode, Decode, Range de salida y profundidades de muestras empaquetadas de hasta 32 bits; la evaluación cúbica extiende la convención escalar existente de cuatro nudos mediante productos tensoriales, con fallback lineal para dimensiones cortas y trabajo y cancelación acotados
Consulta las funciones nativas de color muestreado para las convenciones de interpolación y la evidencia separada de fórmulas y lectores
Separation None y los espacios DeviceN que contienen solo colorants None no aportan ni color ni forma de knockout; los componentes None mezclados aún llegan a la tint transform alternativa
Separation All aplica su tint a todos los colorants de salida disponibles, usando salida de página RGB neutral y preservando cada componente de proceso dentro de los grupos CMYK
Los grupos CMYK reciben los valores alternativos originales de tint de cuatro componentes antes del blending; las placas spot separation, la selección de proceso/colorant NChannel y la simulación de mixing-hint siguen siendo extensiones separadas
El callback de imagen terminal preserva el descifrado del documento y los filtros de stream precedentes antes de la decodificación nativa de JPEG, JPEG 2000, CCITT o JBIG2; JBIG2 soporta texto aritmético y Huffman, MMR y diccionarios globales compartidos
JPEG 2000 soporta componentes subsampleados y con signo, declaraciones de color y muestras inferidas, perfiles ICC incrustados, overrides explícitos de espacio de color y opacidad separada o asociada mediante SMaskInData; sus valores de componentes se normalizan a ocho o dieciséis bits y su array Decode de imagen se ignora
Los perfiles ICC Lab/XYZ incrustados o explícitos usan rangos físicos de componentes; la opacidad asociada se elimina de las muestras almacenadas normalizadas antes de aplicar el mapeo de coordenadas físicas, preservando los canales de offset Lab
El SMask de graphics state soporta grupos Alpha y Luminosity, colores de backdrop, matrices de Forms, restauración de saved-state y funciones de transferencia sampled, exponential, stitching y calculator acotadas; el soft mask propio de una imagen sobrescribe el soft mask del graphics state
Los dieciséis blend modes estándar del PDF son soportados; los grupos de Forms y páginas soportan composición isolated y nonisolated, knockout de objetos y espacios de blending DeviceGray, DeviceRGB, DeviceCMYK, CalGray, CalRGB o ICCBased de uno, tres y cuatro componentes
Los grupos calibrados retienen los valores nativos de componentes hasta un límite de grupo y aceptan colores fuente de dispositivo o Lab mediante transforms calibradas inversas; Lab en sí no es un espacio de blending válido
Las máscaras de Luminosity calibradas retienen las coordenadas de su grupo y evalúan CIE XYZ-Y, incluida la opacidad del grupo y los colores de backdrop, antes de aplicar la función de transferencia
La composición knockout mantiene la forma geométrica del objeto separada de la opacidad del soft mask; los agujeros de stencil preservan los objetos precedentes mientras que un path enmascarado los reemplaza a lo largo de su geometría pintada
Los grupos knockout anidados retienen la unión de las formas geométricas de sus hijos, incluidos los objetos de opacidad cero; los grupos hijos nonisolated usan el backdrop inicial del grupo knockout que los contiene
Los grupos CMYK preservan los componentes complementarios CMY y negro en planos de imagen separados acotados y convierten el resultado combinado en los límites de grupo; los blend modes no separables retienen o reemplazan el negro según el modo seleccionado
Los grupos nonisolated renderizan una pasada adicional de opacidad acotada, eliminan la contribución del backdrop inicial y aplican una vez el alpha y blend mode entrantes del grupo; los grupos de transparencia de página usan una superficie isolated antes de componer sobre el fondo de la página
Un Form nonisolated hereda el espacio de blending que lo contiene; una entrada CS de grupo explícita no cambia el backdrop inicial a otro espacio
Las apariencias normales existentes de anotaciones se ajustan desde su BBox transformado al Rect; RenderAnnotations=false omite las apariencias en cualquiera de los dos usos
El usage es hruView por defecto, que salta las anotaciones Hidden y NoView y los tipos de anotaciones desconocidos con Invisible fijado; los tipos estándar de anotaciones ISO 32000, incluidos RichMedia y Projection de PDF 2.0, con apariencias normales soportadas permanecen visibles cuando solo se fija Invisible
La aceptación de RichMedia y Projection cubre apariencias normales estáticas existentes con media assets válidos o una vista 3D por defecto asociada; la reproducción de media y la activación interactiva 3D quedan fuera de este path raster
hruPrint pinta solo las anotaciones con Print fijado y Hidden limpio; Invisible suprime los tipos de anotaciones desconocidos en ambos usos, NoView no suprime la impresión y NoZoom no cambia el tamaño de la apariencia impresa
Las anotaciones visibles exigen un stream de apariencia normal existente soportado; el renderer no sintetiza apariencias desde metadatos de anotaciones ni valores de campos
Para la salida de vista, NoZoom de la anotación elimina la escala de render del tamaño de la apariencia preservando UserUnit; NoRotate mantiene la apariencia ajustada en posición vertical a través de la rotación de página en ambos usos, y ambos preservan el anchor transformado de la esquina superior izquierda de Rect y el clip de página
Las anotaciones de texto con apariencias normales existentes se comportan como NoZoom y NoRotate en la salida de vista sin importar sus flags explícitos; la salida de impresión retiene su comportamiento NoRotate ignorando NoZoom
El usage controla la visibilidad raster estática y la geometría de anotaciones; los flags de solo interacción no crean comportamiento de hover ni de edición, y el callback existente de permiso de extracción sigue siendo obligatorio sin conceder permiso de impresión
Optional content en salida estática
El rendering consume la configuración por defecto OCProperties/D del catalog, inicializa los estados de grupos desde BaseState, aplica los overrides ON y OFF y usa los valores Intent coincidentes al determinar visibilidad
Los membership dictionaries soportan AnyOn, AllOn, AnyOff y AllOff; las expresiones recursivas VE soportan And, Or y Not de un solo operando, con VE tomando precedencia sobre la política más simple
Las referencias de grupo null, no disponibles y obsoletas no tienen efecto de membership; los grupos fuera de los intents de la configuración no controlan la visibilidad, y un membership o expresión sin grupos aplicables deja el contenido visible
El marked content /OC anidado, las imágenes y Form XObjects y las anotaciones respetan el estado resultante; las secciones marcadas ocultas aún actualizan colores, matrices, clipping y posición de texto, mientras que los XObjects y anotaciones completos ocultos pueden saltarse
Los diccionarios de propiedades de marked-content ordinarios siguen siendo utilizables, incluidos los valores inline anidados; los arrays de contenido preservan el estado de marked-content a través de sus streams componentes, y los streams hijos mantienen su propia anidación de marked-content
La rasterización final standalone usa la configuración por defecto en los modos view y print sin aplicar automáticamente las recomendaciones interactivas de uso AS, como especifica ISO 32000-1:2008 sección 8.11.4.5; el ViewerState explícito activa las recomendaciones View, Print, Export, Zoom, Language y User con selección manual persistente y estado de eventos temporales
Las propiedades de optional-content ausentes o un catalog prestado nil dejan las estructuras de optional-content sin efecto de visibilidad; los memberships vivos malformados, los ciclos de expresiones y los límites configurados de trabajo, memoria o recursión fallan antes de publicar el PNG
Las matrices de apariencias afines y los orígenes de BBox distintos de cero retienen su ajuste normal bajo estos flags; una escala de render extremadamente pequeña aún puede volver numéricamente no invertible la matriz inicial de página de Cairo
La página renderizada usa la intersección MediaBox/CropBox, los page boxes heredados y Rotate de cuarto de vuelta, y el UserUnit de la página; escala 1 produce un píxel por punto efectivo de página, con dimensiones de superficie redondeadas hacia arriba
El operador sh pinta shadings function-based, axiales y radiales (ShadingTypes 1–3), con dominios de dos entradas, matrices de shading, selección de círculos radiales, endpoints Extend, BBox y clips de paths existentes
Las funciones de color soportadas y los arrays de funciones escalares convierten a través de colores fuente de dispositivo, calibrados, ICC Lab/XYZ y Separation/DeviceN; la opacidad de relleno actual, los blend modes, los soft masks de graphics state y el knockout de grupos de transparencia aplican al shading resultante
El path y el color actuales se preservan; el Background del shading es ignorado por sh, y AntiAlias es una hint del dispositivo con muestreo de color en centros de píxel
Las entradas ExtGState no soportadas y los operadores de contenido no soportados quedan fuera de este perfil
Shadings de malla de triángulos
ShadingTypes 4 y 5 pintan mallas Gouraud de triángulos free-form y lattice con reutilización de aristas, geometría de lattice arbitraria, records de vértices alineados a bytes, precisión de coordenadas de hasta 32 bits y precisión de componentes de hasta 16 bits
Los componentes de vértices se interpolan en los centros de píxeles del dispositivo antes de la conversión de color; una función opcional de una entrada o un array de funciones de componentes evalúa el parámetro interpolado, incluidos los espacios de color calibrados, ICC y especiales
Las fuentes Indexed redondean los índices interpolados a la entrada de paleta más cercana; las cadenas de lookup hexadecimales se decodifican una vez con whitespace, dígitos en mayúsculas/minúsculas mezclados y padding de nibble final impar, mientras que las cadenas de lookup literales retienen sus bytes decodificados
Los transforms actuales, el clipping, el BBox, la opacidad de relleno, el blend mode, los soft masks, los colorants no marcadores y el knockout de grupos aplican a la malla completada; los bytes de stream retenidos, la superficie temporal de página y dos filas de lattice se suman a la admisión de memoria de trabajo
El parseo de vértices, la rasterización de triángulos y las funciones comparten operaciones agregadas y polling de cancelación; los records malformados o truncados y las filas de lattice incompletas fallan antes de publicar la salida
La aceptación enfocada comprueba ecuaciones baricéntricas cerradas y salida separada de MuPDF y Poppler; los records de prueba mantienen separados los fallos de source-reader para el padding de vértices, los bits de flags sin usar y la transparencia de mallas, y usan ecuaciones explícitas de lector alternativo para colores no marcadores y valores Indexed normalizados
Mallas Coons y de patches tensoriales
ShadingTypes 6 y 7 pintan boundaries cúbicos de Coons y control nets tensoriales, con reutilización de aristas precedentes, records alineados a bytes, semántica de flags de dos bits bajos y las mismas precisiones de coordenadas y componentes que las mallas de triángulos
Los componentes de esquinas se interpolan bilinealmente en los parámetros del patch antes de las funciones opcionales y la conversión de color; los boundaries de Coons se elevan a un net bicúbico de Bernstein equivalente, cuyos bounds de segunda derivada seleccionan subdivisiones con un error geométrico de 0.125 píxeles de salida como máximo
La inversión polinómica refina los parámetros de píxel; la cobertura doblada elige el mayor parámetro v y luego el mayor parámetro u para v iguales, mientras que los patches posteriores reemplazan los colores anteriores antes de que el shading completado reciba la transparencia del objeto
El compositor de mallas compartido aplica clipping, BBox, shading patterns, colorants no marcadores, opacidad, blending, soft masks y knockout de grupo; dos filas de subdivisión y los arrays por píxel de parámetro y orden se suman a la admisión activa de bytes de trabajo
El parseo de puntos de control, la subdivisión, la rasterización y las funciones de color comparten límites de operación y cancelación; la aceptación enfocada usa ecuaciones independientes de Coons y tensoriales y raíces cúbicas para patches doblados, con fallos de source-reader registrados por separado de la verificación ordinaria de páginas de ecuaciones RGB
Estado de texto heredado
Los streams hijos de Forms, Type3 y patterns heredan de su estado inicial de gráficos el objeto de fuente aplicable, el tamaño de fuente, el espaciado de caracteres y de palabras, la escala horizontal, el leading, el modo de rendering y el rise; un recurso hijo con el mismo nombre de fuente no reemplaza una fuente heredada hasta que un Tf local la seleccione
El saved graphics state restaura los parámetros de texto, y los operadores TD y comilla doble retienen sus cambios de leading y espaciado para los streams hijos posteriores; cada hijo empieza con sus propias matrices de texto
Las apariencias independientes de anotaciones parten de parámetros de texto por defecto sin retener el estado final de texto del contenido de la página
El texto Type3 en modo de rendering 3 no aporta gráficos de glifos visibles; la prueba enfocada de texto Type3 anidado retiene por separado la desviación de parámetros por defecto de MuPDF respecto de las ecuaciones de estado heredado, mientras que Poppler sigue los parámetros heredados en esos fixtures
Patterns de tiling y shading
Los espacios de color de patterns soportan tiling patterns colored y uncolored, TilingType 1–3, shading patterns, PatternMatrix, BBox de celda, espaciado positivo o negativo, selección de pattern, restauración de saved-state y pintado de fill o stroke
Los patterns uncolored obtienen sus componentes de un espacio de color base soportado y pueden pintar stencils de imagen; los cambios de color explícitos, las imágenes colored y los shadings directos dentro de una definición uncolored son contenido PDF inválido y se rechazan también a través de Forms anidados y procedimientos Type3
Los patterns seleccionados retienen el espacio de coordenadas por defecto del content stream que resolvió su definición; las operaciones cm posteriores y un pattern heredado usado dentro de un Form no reemplazan ese origen
Las definiciones parten del estado inicial soportado de gráficos del padre y de los parámetros de transparencia por defecto; las definiciones de tiling forman un grupo nonisolated sin knockout, mientras que las definiciones de shading usan knockout de objetos
Las celdas de tiling transparentes y solapadas se evalúan contra el backdrop actual; el alpha y blend mode entrantes del objeto aplican una vez al pintar el pattern completado, incluidos patterns anidados, texto, strokes y máscaras de imagen
El ExtGState de shading-patterns aumenta los parámetros de shading soportados, incluidos opacidad y soft masks; el Background se pinta antes del shading, el BBox recorta ambas contribuciones, y los colores None no marcadores no aportan ni color ni forma
La evaluación de patterns admite dos superficies de página y el contenido de celdas decodificado, acota la enumeración de celdas visibles al clip actual y consulta la cancelación mientras renderiza celdas y elimina la contribución del backdrop
Los fixtures enfocados comparan ecuaciones cerradas de coordenadas, color y composición con píxeles nativos y salida de lectores independientes; los archivos de prueba retienen las diferencias de lectores para los orígenes heredados de patterns de Forms, la opacidad de ExtGState de shading-patterns y los colores None no marcadores, con páginas ordinarias separadas de ecuaciones vectoriales para esos casos
Fuentes CFF con CID
Las fuentes CIDFontType0 incrustadas resuelven CIDs CFF reales en contenedores standalone y OpenType, incluidos mapeos no identidad, CID 65535, CMaps de Encoding incrustados, orígenes verticales W2, outlines transformados y clipping de texto
Las caras CFF standalone cargan por CID y las caras envueltas en SFNT cargan por índice compacto de glifo; el bridge usa el layout correcto de caras de FreeType para Linux LP64 y Windows LLP64
Un código de carácter sin mapear o un CID solicitado ausente consulta notdefchar y notdefrange para el código original y luego usa el glifo obligatorio CID 0 si el reemplazo está ausente; los rangos tienen targets CID constantes y las entradas de caracteres toman precedencia, mientras que los glifos presentes retienen su CID solicitado
La aceptación enfocada usa contornos poligonales declarados y ecuaciones de orígenes para 28 fuentes válidas, con comparaciones separadas de MuPDF y Poppler y páginas ordinarias de ecuaciones RGB
Los archivos de prueba retienen las diferencias de source-reader para la selección de glifos OpenType con CID y las sustituciones notdef omitidas; la omisión alternativa se mide por separado y no reemplaza la ecuación nativa de fuente requerida
Límites y cancelación
Las codificaciones Type0 integradas exactas cubren los 200 nombres de codificaciones incluidos: Identity-H e Identity-V, dieciséis mapeos UCS2 y UTF16 y 182 mapeos adicionales legacy y Unicode con overrides verticales aplanados de caracteres
Los operandos mezclados de uno a cuatro bytes usan bounds de codespace por byte y recuperación de códigos inválidos de prefijo más largo; la decodificación UTF8 y UTF32 y la codificación inversa preservan los escalares suplementarios y los bytes de ceros a la izquierda significativos
Los streams de Encoding y ToUnicode resuelven nombres o streams usecmap del cuerpo y UseCMap de diccionario, con precedencia del diccionario y overrides locales de caracteres, rangos, secuencias Unicode y notdef
Cada CMap hijo mantiene su propio modo de escritura, con horizontal por defecto cuando se omite WMode; el modo vertical explícito selecciona los mapeos heredados y las métricas verticales de la fuente
La herencia de CMaps usa límites de profundidad anidada thread-local sin cambiar el layout de THPDFCMapBounds; los ciclos, los padres malformados y la profundidad excesiva fallan antes de publicar la salida, y los bloques finally restauran los límites tras la cancelación o las excepciones
La prueba enfocada retiene los fallos de fuentes UTF8 y UTF32 nombradas en un lector independiente sin esas tablas integradas, verifica compañeros separados de mapas incrustados y registra diferencias de texto fuente cuando varios códigos seleccionan el mismo CID
Tests/Linux/Run-HeadlessLegacyCMapAcceptance.sh compila y prueba intervalos exactos de codificaciones, PDFs fuente de anchos mezclados, rendering anidado, aislamiento de threads y recuperación de cancelación en Linux nativo
Tests/Linux/Run-HeadlessLegacyCMapWindowsAcceptance.py ejecuta ejecutables nativos de Windows coincidentes, registra hashes de fuente, binarios, PNG y diagnósticos y luego transfiere capturas fijas a almacenamiento de Linux nativo para comprobaciones separadas de MuPDF y Poppler
Los mapas empaquetados preservan sus hashes de recursos y los avisos completos de redistribución; conserva la licencia de datos CMap con las distribuciones de fuente y binarios
Los escapes hexadecimales en valores de nombres PDF y operandos de nombres de contenido se decodifican una vez antes de resolver fuentes, espacios de color, blend modes y recursos; un hash literal producido por la decodificación pasa a formar parte del nombre semántico
El decodificador de fuentes compartido aplica estas semánticas a los valores de diccionarios de fuentes, codificaciones nombradas, nombres de glifos Differences y CIDToGIDMap, sin modificar objetos prestados ni decodificar valores de cadenas
Los nombres escapados del renderer usan decodificación lineal, admisión temporal de bytes de trabajo, límites agregados de operaciones y polling de cancelación; la aceptación enfocada compara bytes PNG nativos equivalentes y texto más salida independiente de MuPDF y Poppler
El trabajo raster de shadings y las funciones de color comparten límites agregados de operaciones y polling de cancelación; la superficie temporal y un cache de coordenadas exactas de 8,192 colores convertidos como máximo se suman a la admisión activa de bytes de trabajo
La aceptación enfocada de shadings usa ecuaciones cerradas de geometría/funciones/color y páginas separadas de ecuaciones vectoriales, reteniendo diferencias de source-reader para clipping de BBox, geometría degenerada, conversión de color, nombres de colorants especiales y teselación de knockout
Las Options acotan los píxeles de superficie, los buffers administrados activos, los bytes decodificados acumulados, los bytes PNG codificados, el trabajo de tokens y operadores y la profundidad recursiva o de graphics state
La decodificación de fuentes usa allowances conservadores de admisión: 32 MiB de capacidad transitoria, 64 veces el tamaño del stream de fuentes decodificado, 128 veces los slots de arreglos comprobados recursivamente y el doble de la estimación del decodificador retenido en el agregado activo
Las tablas CID admiten 65,536 entradas retenidas; la enumeración acota los charstrings reales, y los arreglos notdef se suman a la contabilidad de deep-copy del decodificador y de bytes retenidos
El parseo de CMaps y el lookup de notdef comparten bounds thread-local de entradas anidadas y polling de trabajo; los scopes del renderer comparten límites agregados de tokens y operaciones, y los scans léxicos largos consultan como máximo cada 256 bytes
El intérprete además reserva capacidad de secuencias Unicode por glifo desde los bytes de operandos de entrada y el mapeo ToUnicode más largo antes de crear records de glifos, de modo que los mapeos largos repetidos no puedan eludir la admisión de memoria de trabajo
Un presupuesto pequeño de memoria de trabajo puede rechazar una fuente simple aunque su asignación final cabría; estas comprobaciones cubren buffers administrados y superficies de imagen de CPU, mientras que los caches de Cairo, Fontconfig y FreeType y el RSS total del proceso quedan fuera de la contabilidad
Las superficies de transparencia, soft-mask, backdrop, opacidad y knockout de objetos se suman al presupuesto activo de superficies; las funciones de transferencia comparten el presupuesto agregado de operaciones, los codecs ICC y de imágenes usan admisión conservadora, y el decodificador nativo JBIG2 acota de forma acumulativa la asignación de bitmaps/contexto y consulta la cancelación durante la decodificación
Los recorridos complementarios de CMY, negro y forma geométrica comparten los límites agregados de operaciones, decodificación y cancelación; los perfiles que usan el mismo stream resuelto comparten una transform validada y una reserva activa de admisión hasta que el rendering de la página termine
Los streams de funciones retenidos, la evaluación de funciones y los records de graphics state se suman a la admisión de bytes de trabajo; las funciones de tint recursivas, la interpolación multidimensional y las instrucciones calculator comparten límites de operación y cancelación
El cancellation token prestado se consulta durante la decodificación acotada, la tokenización, los operadores, las llamadas al resolver de glifos, las filas de imágenes, la recursión, la codificación PNG y antes de publicar; su lifetime es propiedad del caller
El renderer comprueba el permiso de extracción mediante la política prestada del documento y retiene los valores de objetos fuente y los bytes fuente
Ownership de la salida
HPDFRenderHeadlessPagePNG completa el rendering y la codificación PNG en privado antes de escribir a un stream propio del caller; un fallo final de I/O del stream puede retener bytes ya aceptados
HPDFRenderHeadlessPagePNGFile comprueba la identidad de la fuente, crea en exclusiva un archivo de staging en el directorio destino, le hace flush, vuelve a comprobar identidad y cancelación y reemplaza el destino atómicamente
La publicación de Windows usa ocho intentos atómicos de reemplazo como máximo y siete esperas de 1, 2, 4, 8, 16, 16 y 16 milisegundos, reintentando solo los errores de acceso denegado, violación de sharing y violación de lock; la cancelación se comprueba antes de cada intento y a ambos lados de cada espera
Una publicación de Windows fallida reporta el código de error final de Windows capturado mediante EHPDFHeadlessRenderError; la cancelación retiene el diagnóstico de cancelación del renderer, y ningún path elimina el destino existente ni hace fallback a copia no atómica
Los fallos de rendering, presupuesto, cancelación y staging preservan un destino existente y eliminan los archivos de staging propios no publicados; los alias de source-path y hardlink se rechazan
Aceptación
La aceptación de runtime de Windows usa ejecutables nativos de consola coincidentes y un closure de importación de DLLs portátiles aislado y fijado por SHA256; un proceso WSL separado corre comprobaciones independientes de píxeles, ecuaciones y geometría con MuPDF y Poppler contra los PNG producidos por Windows
Los sustitutos de fuentes estándar de Windows usan caras GDI explícitas de Cairo para texto Unicode y outlines reales, incluidos clipping y modos fill-and-stroke; las fuentes incrustadas retienen su mapeo de glifos de FreeType
Las llamadas a OpenJPEG usan la ABI stdcall de Windows y las exportaciones decoradas Win32, mientras que los callbacks de streams y mensajes retienen la convención de callbacks C
Tests/Linux/Run-HeadlessCairoAcceptance.sh realiza builds ELF nativos frescos, limpia DISPLAY y WAYLAND_DISPLAY, rechaza bibliotecas de escritorio linkeadas directamente y corre oracles independientes de pypdf/MuPDF
Los fixtures ejercitan fuentes estándar, TrueType Unicode, Type3, todos los modos de text rendering y blend, alpha y knockout, grupos de transparencia RGB, profundidades de muestras y Decode, máscaras de imagen y Matte, colores Indexed e ICC, codecs terminales, cadenas de filtros cifradas AES, geometría de páginas, transforms de anotaciones, presupuestos, cancelación, preservación de fuente y salida atómica
Consulta THPDFHeadlessRenderResult para los contadores y EHPDFHeadlessRenderError para el manejo de errores