Renderer Cairo nativo de Linux

HPDFHeadlessCairoDevice renderiza una página de 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 e intacto 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 rutas de biblioteca compatibles explícitas antes del primer render; los módulos con éxito permanecen cargados porque las cachés nativas de fuentes pueden retener callbacks de destrucción

El host debe mantener su ejecutable, DLL o paquete de HotPDF cargado mientras esas cachés nativas puedan retener callbacks de destrucción de fuentes de HotPDF; descargar un módulo del host con independencia de la vida de la caché queda fuera de este perfil

Windows usa libcairo-2.dll y libfreetype-6.dll compatibles a través del mismo bridge; los binarios de runtime y su licencia los aporta la aplicación

Los colores ICCBased cargan además liblcms2.so.2; JPEG usa libturbojpeg.so.0 y JPEG 2000 una 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 esas rutas; los valores por defecto de Windows son lcms2.dll, turbojpeg.dll y openjp2.dll

Perfil de rendering

El contenido soportado incluye construcción y pintado de trazados, reglas de relleno nonzero y even-odd, clipping, estado gráfico anidado, transformaciones CTM, estilo de línea, colores DeviceGray/RGB/CMYK, alpha normal y Form XObjects repetidos con sus propios recursos, Matrix y BBox

Las anchuras de línea pueden ser cero: las hairlines del PDF solicitadas con 0 w o con ExtGState LW=0 usan un trazo de un píxel en espacio de dispositivo; las anchuras negativas se rechazan

ExtGState D y el operador d del stream de contenido comparten una 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 están soportadas

Un patrón de dash admite como máximo 256 longitudes finas no negativas de hasta 1e9, con al menos una longitud positiva cuando no está vacío y una fase fina de valor absoluto de hasta 1e9; cada elemento consume trabajo de operación y el almacenamiento temporal participa en la admisión de bytes de trabajo

Los arrays de operandos aceptan comentarios del PDF, incluidos los arrays numéricos de dash y los arrays de texto TJ; los valores léxicos malformados y los corchetes de cierre ausentes los retiene el scanner compartido y los rechaza el renderer en lugar de desaparecer silenciosamente

El texto horizontal usa el intérprete de glifos compartido para las matrices de texto, las anchuras explícitas del PDF, los avances canónicos de Helvetica/Times/Courier, el espaciado de caracteres y de palabras, la escala horizontal y los ajustes de TJ

Los programas de fuentes incrustadas soportadas usan FreeType con IDs de glifo 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ícita y los mapeos horizontales y verticales integrados UniJIS, UniGB, UniCNS y UniKS UCS2/UTF16; no se exigen recursos CMap instalados por separado

El pintado vertical de glifos honra los vectores de posicionamiento por defecto y explícitos DW2/W2, el text rise, la escala horizontal, las matrices de texto y gráficos y el desplazamiento de TJ; los mapeos UTF-16 aceptan códigos de caracteres suplementarios

Los ocho modos de rendering de texto están soportados, incluidos los contornos 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 y stroke usan composición knockout de objeto para que el relleno solapado no se filtre a través del trazo; los procedimientos de glifo Type3 ejecutan sus propios recursos acotados y matrices de fuente

Las imágenes aceptan muestras de 1/2/4/8/16 bits y arrays Decode, stencil, máscaras explícitas, de color-key y suaves, máscaras de distinto tamaño y recuperación Matte; un Interpolate ausente usa muestreo de vecino más cercano y true selecciona muestreo bilineal

Los codestreams JPX aceptan componentes de origen con o sin signo de hasta 26 bits, incluida la precisión mixta, el subsampling y la opacidad explícita, y los normalizan a muestras acotadas de 8 o 16 bits; el BitsPerComponent del diccionario de imagen y las entradas Decode no stencil se ignoran para imágenes JPX, tal como exige el perfil de imágenes del PDF

Las paletas indexadas y las transformaciones validadas de perfil ICCBased a sRGB están soportadas para imágenes y colores de trazados; DeviceCMYK sin perfil conserva la conversión simple de dispositivo

Las transformaciones ICCBased aceptan firmas de perfil Gray, RGB, CMYK, Lab y XYZ y validan estrictamente el recuento de componentes declarado y los rangos de componentes

Los operandos de perfil Lab usan coordenadas físicas L a b con los 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 de origen Lab y XYZ no seleccionan un espacio de blending de transparencia soportado

El Range de un stream ICC exige dos valores finos ordenados por componente y acota los operandos de color; los valores por defecto de Decode de imágenes brutas y los valores de búsqueda indexada usan esos rangos de componentes

CalGray, CalRGB y Lab soportan trazados, texto, imágenes y bases de paletas indexadas; los parámetros se validan estrictamente, las entradas Matrix de CalRGB siguen el orden de columnas del PDF, y los componentes Lab y los valores por defecto de Decode de imágenes usan los rangos declarados

Los colores CIE usan adaptación cromática Bradford y salida sRGB relativa; los metadatos BlackPoint se validan, mientras que la compensación adicional de punto negro 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 tinta para trazados, texto, bases indexadas e imágenes empaquetadas; los colores alternativos de dispositivo o CIE usan funciones de tinta muestreadas, exponenciales, de stitching o de cálculo acotadas

Las fuentes de color alternativas ICCBased Lab/XYZ y CalGray/CalRGB/Lab retienen sus coordenadas físicas a través de la transformación de tinta antes de convertir a un grupo de transparencia soportado

Las funciones de tinta 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 funciones nativas de color muestreadas para las convenciones de interpolación y la evidencia separada de fórmulas y lectores

Separation None y los espacios DeviceN que contienen solo colorantes None no aportan ni color ni forma de knockout; los componentes None mixtos todavía llegan a la transformación de tinta alternativa

Separation All aplica su tinta a todos los colorantes de salida disponibles, usando salida de página RGB neutra y preservando cada componente de proceso dentro de los grupos CMYK

Los grupos CMYK reciben los valores de tinta alternativos originales de cuatro componentes antes del blending; las placas spot de Separation, la selección de proceso/colorante NChannel y la simulación de mixing hints 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 con subsampling 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 componente 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 estado gráfico soporta grupos Alpha y Luminosity, colores de backdrop, matrices de Form, restauración de estado guardado y funciones de transferencia muestreadas, exponenciales, de stitching y de cálculo acotadas; el soft mask propio de una imagen sobrescribe el soft mask del estado gráfico

Los dieciséis modos de blending estándar del PDF están soportados; los grupos de Form y de página soportan composición aislada y no aislada, knockout de objeto 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 borde de grupo y aceptan colores de origen de dispositivo o Lab mediante transformaciones calibradas inversas; Lab en sí no es un espacio de blending válido

Las máscaras Luminosity calibradas retienen las coordenadas de su grupo y evalúan el CIE XYZ-Y, incluidas 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 trazado enmascarado los reemplaza en toda 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 no aislados usan el backdrop inicial del grupo knockout que los envuelve

Los grupos CMYK preservan los componentes complementarios CMY y negro en planos de imagen acotados separados y convierten el resultado combinado en los bordes de grupo; los modos de blending no separables retienen o reemplazan el negro según el modo seleccionado

Los grupos no aislados renderizan una pasada adicional acotada de opacidad, eliminan la contribución del backdrop inicial y aplican una sola vez el alpha entrante del grupo y su modo de blending; los grupos de transparencia de página usan una superficie aislada antes de componer sobre el fondo de página

Un Form no aislado hereda el espacio de blending que lo envuelve; una entrada CS de grupo explícita no conmuta 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

Usage vale hruView por defecto, que se salta las anotaciones Hidden y NoView y los tipos de anotación desconocidos con Invisible activo; los tipos de anotación estándar de ISO 32000, incluidos RichMedia y Projection de PDF 2.0, con apariencias normales soportadas permanecen visibles cuando solo está activo Invisible

La aceptación de RichMedia y Projection cubre apariencias normales estáticas existentes con recursos de medios válidos o una vista 3D por defecto asociada; la reproducción de medios y la activación 3D interactiva quedan fuera de esta ruta raster

hruPrint pinta solo las anotaciones con Print activo y Hidden inactivo; Invisible suprime los tipos de anotación desconocidos en ambos usos, NoView no suprime la impresión y NoZoom no cambia el tamaño de apariencia impreso

Las anotaciones visibles exigen un stream de apariencia normal existente y soportado; el renderer no sintetiza apariencias a partir de metadatos de anotaciones ni de valores de campos

Para la salida de vista, NoZoom de la anotación elimina la escala de render del tamaño de apariencia mientras preserva UserUnit; NoRotate mantiene la apariencia ajustada en vertical ante la rotación de página en ambos usos, y ambos preservan el ancla Rect transformada superior-izquierda 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 con independencia de sus flags explícitos; la salida de impresión retiene su comportamiento NoRotate mientras ignora NoZoom

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 catálogo, inicializa los estados de grupo desde BaseState, aplica los overrides ON y OFF y usa los valores Intent coincidentes al determinar la visibilidad

Los diccionarios de membresía soportan AnyOn, AllOn, AnyOff y AllOff; las expresiones recursivas VE soportan And, Or y Not de un operando, con VE teniendo precedencia sobre la política más simple

Las referencias de grupo null, no disponibles u obsoletas no tienen efecto de membresía; los grupos fuera de los intents de la configuración no controlan la visibilidad, y una membresía o expresión sin grupos aplicables deja el contenido visible

El marcado de contenido /OC anidado, las imágenes y los Form XObjects y las anotaciones respetan el estado resultante; las secciones marcadas ocultas todavía actualizan colores, matrices, clipping y posición de texto, mientras que los XObjects completos ocultos y las anotaciones pueden saltarse

Los diccionarios ordinarios de propiedades de marcado de contenido siguen siendo utilizables, incluidos los valores inline anidados; los arrays de contenido preservan el estado de marcado de contenido a través de sus streams componente, y los streams hijos mantienen su propio anidamiento de marcado

La rasterización independiente de forma final usa la configuración por defecto en los modos view y print sin aplicar automáticamente las recomendaciones interactivas de uso AS, según especifica la sección 8.11.4.5 de ISO 32000-1:2008; el ViewerState explícito habilita las recomendaciones View, Print, Export, Zoom, Language y User con selección manual persistente y estado temporal de eventos

Las propiedades de optional content ausentes o un catálogo prestado nil dejan las estructuras de optional content sin efecto de visibilidad; las membresías vivas malformadas, los ciclos de expresiones y los límites configurados de trabajo, memoria o recursión fallan antes de la publicación del PNG

Las matrices de apariencia afines y los orígenes de BBox distintos de cero retienen su ajuste normal bajo estos flags; una escala de render extremadamente pequeña puede seguir haciendo que la matriz inicial de página de Cairo sea numéricamente no invertible

La página renderizada usa la intersección MediaBox/CropBox, las cajas de página heredadas y el Rotate de cuarto de vuelta, y el UserUnit de la página; la escala 1 produce un píxel por punto efectivo de página, con las dimensiones de la superficie redondeadas hacia arriba

El operador sh pinta shadings de función, axiales y radiales (ShadingTypes 1–3), con dominios de dos entradas, matrices de shading, selección de círculo radial, extremos Extend, BBox y clips de trazado existentes

Las funciones de color soportadas y los arrays de funciones escalares convierten a través de colores de origen de dispositivo, calibrados, ICC Lab/XYZ y Separation/DeviceN; la opacidad de relleno actual, los modos de blending, los soft masks de estado gráfico y el knockout de grupos de transparencia aplican al shading resultante

El trazado y el color actuales se preservan; el Background del shading lo ignora sh, y AntiAlias es una pista de dispositivo con muestreo de color en el centro del píxel

Las entradas ExtGState no soportadas y los operadores de contenido no soportados quedan fuera de este perfil

Shadings de malla triangular

ShadingTypes 4 y 5 pintan mallas Gouraud de triángulos free-form y lattice con reutilización de aristas, geometría de lattice arbitraria, registros 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értice se interpolan en los centros de píxel del dispositivo antes de la conversión de color; una función opcional de una entrada o un array de funciones de componente evalúa el parámetro interpolado, incluidos los espacios de color calibrados, ICC y especiales

Los orígenes indexados redondean los índices interpolados a la entrada de paleta más cercana; las cadenas de búsqueda hexadecimales se decodifican una vez con espacios en blanco, dígitos en mayúsculas y minúsculas y relleno del nibble final impar, mientras que las cadenas de búsqueda literales retienen sus bytes decodificados

Las transformaciones actuales, el clipping, el BBox, la opacidad de relleno, el modo de blending, los soft masks, los colorantes que no pintan y el knockout de grupo aplican a la malla completada; los bytes de stream retenidos, la superficie temporal de página y dos filas de lattice se unen a la admisión de memoria de trabajo

El análisis de vértices, la rasterización de triángulos y las funciones comparten operaciones agregadas y sondeo de cancelación; los registros malformados o truncados y las filas de lattice incompletas fallan antes de la publicación de la salida

La aceptación enfocada comprueba ecuaciones baricéntricas cerradas y salida separada de MuPDF y Poppler; los registros de prueba mantienen separados los fallos de los lectores de origen para el padding de vértices, los bits de flag no usados y la transparencia de mallas, y usan ecuaciones alternativas explícitas de lectores para colores que no pintan y valores indexados normalizados

Mallas de parches Coons y tensoriales

ShadingTypes 6 y 7 pintan fronteras cúbicas de Coons y redes de control tensoriales, con reutilización de aristas precedentes, registros alineados a bytes, semántica de flags de dos bits bajos y las mismas precisiones de coordenadas y componentes que las mallas triangulares

Los componentes de esquina se interpolan bilinealmente en los parámetros del parche antes de las funciones opcionales y la conversión de color; las fronteras de Coons se elevan a una red de Bernstein bicúbica equivalente, cuyos bounds de segunda derivada seleccionan las subdivisiones con un error geométrico de como máximo 0,125 píxeles de salida

La inversión polinómica refina los parámetros de píxel; la cobertura plegada elige el mayor parámetro v y después el mayor parámetro u para un mismo v, mientras que los parches posteriores reemplazan los colores anteriores antes de que el shading completado reciba la transparencia del objeto

El compositor de mallas compartido aplica clipping, BBox, patrones de shading, colorantes que no pintan, opacidad, blending, soft masks y knockout de grupo; dos filas de subdivisión y los arrays de parámetro y orden por píxel se unen a la admisión activa de bytes de trabajo

El análisis 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 los parches plegados, con los fallos de lectores de origen registrados por separado de la verificación ordinaria de páginas de ecuaciones RGB

Estado de texto heredado

Los streams hijos de Form, Type3 y patrón heredan 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 de su estado gráfico inicial; un recurso hijo con el mismo nombre de fuente no reemplaza una fuente heredada hasta que un Tf local la selecciona

El estado gráfico guardado 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 de anotaciones independientes parten de los parámetros de texto por defecto sin retener el estado final de texto del contenido de página

El texto Type3 en modo de rendering 3 no aporta gráficos de glifos visibles; la prueba enfocada de texto anidado Type3 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

Patrones de tiling y shading

Los espacios de color de patrón soportan patrones de tiling con y sin color, TilingType 1–3, patrones de shading, PatternMatrix, BBox de celda, espaciado positivo o negativo, selección de patrón, restauración de estado guardado y pintado de relleno o trazo

Los patrones sin color 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 con color y los shadings directos dentro de una definición sin color son contenido PDF inválido y se rechazan también a través de Forms anidados y procedimientos Type3

Los patrones seleccionados retienen el espacio de coordenadas por defecto del stream de contenido que resolvió su definición; las operaciones cm posteriores y un patrón heredado usado dentro de un Form no reemplazan ese origen

Las definiciones parten del estado gráfico inicial soportado del padre y de los parámetros de transparencia por defecto; las definiciones de tiling forman un grupo no aislado y sin knockout, mientras que las definiciones de shading usan knockout de objeto

Las celdas de tiling transparentes y solapadas se evalúan contra el backdrop actual; el alpha y el modo de blending entrantes del objeto aplican una sola vez al pintar el patrón completado, incluidos los patrones anidados, el texto, los trazos y las máscaras de imagen

El ExtGState de patrones de shading aumenta los parámetros de shading soportados, incluidos la opacidad y los soft masks; Background se pinta antes del shading, BBox recorta ambas contribuciones y los colores None que no pintan no aportan ni color ni forma

La evaluación de patrones admite dos superficies de página y contenido de celda decodificado, acota la enumeración de celdas visibles al clip actual y sondea 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 ficheros de prueba retienen las diferencias de lectores para los orígenes de patrones de Form heredados, la opacidad ExtGState de patrones de shading y los colores None que no pintan, con páginas de ecuaciones vectoriales ordinarias separadas para esos casos

Fuentes CFF con clave CID

Las fuentes CIDFontType0 incrustadas resuelven CIDs reales de CFF en contenedores standalone y OpenType, incluidos los mapeos no identidad, el CID 65535, los CMaps Encoding incrustados, los orígenes verticales W2, los contornos transformados y el 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 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 después usa el glifo obligatorio CID 0 si el reemplazo está ausente; los rangos tienen destinos CID constantes y las entradas de caracteres tienen precedencia, mientras que los glifos presentes retienen su CID solicitado

La aceptación enfocada usa contornos poligonales declarados y ecuaciones de origen para 28 orígenes válidos, con comparaciones separadas de MuPDF y Poppler y páginas ordinarias de ecuaciones RGB

Los ficheros de prueba retienen las diferencias de lectores de origen para la selección de glifos OpenType con clave CID y las sustituciones notdef omitidas; la alternativa de omisión se mide por separado y no reemplaza la ecuación nativa de origen obligatoria

Límites y cancelación

Las codificaciones Type0 integradas exactas cubren los 200 nombres de codificación incluidos: Identity-H e Identity-V, dieciséis mapeos UCS2 y UTF16, y 182 mapas adicionales heredados y Unicode con overrides verticales de caracteres aplanados

Los operandos mixtos 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 cero a la izquierda significativos

Los streams Encoding y ToUnicode resuelven los nombres o streams usecmap del cuerpo y UseCMap del 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 el 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 locales de hilo de profundidad anidada sin cambiar el layout de THPDFCMapBounds; los ciclos, los padres malformados y la profundidad excesiva fallan antes de la publicación de la salida, y los bloques finally restauran los límites tras la cancelación o las excepciones

La prueba enfocada retiene los fallos de origen UTF8 y UTF32 con nombre en un lector independiente sin esas tablas integradas, verifica compañeros separados de mapas incrustados y registra las diferencias de texto de origen cuando varios códigos seleccionan el mismo CID

Tests/Linux/Run-HeadlessLegacyCMapAcceptance.sh construye y prueba intervalos de codificación exactos, PDFs de origen de anchura mixta, rendering anidado, aislamiento de hilos y recuperación de cancelación en Linux nativo

Tests/Linux/Run-HeadlessLegacyCMapWindowsAcceptance.py ejecuta ejecutables nativos de Windows coincidentes, registra hashes de origen, binarios, PNG y diagnósticos y después transfiere capturas fijas al almacenamiento de Linux nativo para comprobaciones separadas de MuPDF y Poppler

Los mapas empaquetados preservan sus hashes de recursos y avisos completos de redistribución; mantén la licencia de datos CMap junto a las distribuciones de origen y binarias

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, modos de blending 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 con nombre, nombres de glifos Differences y CIDToGIDMap, sin modificar objetos prestados ni decodificar valores de cadena

Los nombres de renderer escapados usan decodificación lineal, admisión temporal de bytes de trabajo, límites agregados de operaciones y sondeo 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 sondeo de cancelación; la superficie temporal y una caché de coordenadas exactas de como máximo 8192 colores convertidos se unen a la admisión activa de bytes de trabajo

La aceptación enfocada de shadings usa ecuaciones cerradas de geometría/función/color y páginas vectoriales de ecuaciones separadas, reteniendo las diferencias de lectores de origen para el clipping de BBox, la geometría degenerada, la conversión de color, los nombres de colorantes especiales y la teselación knockout

Options acota los píxeles de superficie, los buffers gestionados activos, los bytes decodificados acumulados, los bytes PNG codificados, el trabajo de tokens y operadores y la profundidad recursiva y de estado gráfico

La decodificación de fuentes usa márgenes de admisión conservadores: 32 MiB de capacidad transitoria, 64 veces el tamaño decodificado del stream de fuente, 128 veces los slots de array comprobados recursivamente y dos veces 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 arrays notdef se unen al deep-copy del decodificador y al cómputo de bytes retenidos

El análisis de CMaps y la búsqueda notdef comparten límites locales de hilo de entradas anidadas y sondeo de trabajo; los ámbitos del renderer comparten límites agregados de tokens y operaciones, y los escaneos léxicos largos sondean como máximo cada 256 bytes

El intérprete reserva además capacidad de secuencias Unicode por glifo a partir de los bytes de operandos de entrada y del mapeo ToUnicode más largo antes de crear los registros de glifos, de modo que los mapeos largos repetidos no puedan burlar 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 los buffers gestionados y las superficies de imagen de CPU, mientras que las cachés de Cairo, Fontconfig y FreeType y el RSS total del proceso quedan fuera del cómputo

Las superficies de transparencia, soft mask, backdrop, opacidad y knockout de objeto se unen al presupuesto activo de superficies; las funciones de transferencia comparten el presupuesto agregado de operaciones, los códecs ICC y de imagen usan admisión conservadora y el decodificador nativo JBIG2 acota de forma acumulativa la asignación de bitmaps/contextos y sondea 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 transformación 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 registros de estado gráfico se unen a la admisión de bytes de trabajo; las funciones de tinta recursivas, la interpolación multidimensional y las instrucciones de cálculo comparten límites de operación y de cancelación

El token de cancelación prestado se sondea durante la decodificación acotada, la tokenización, los operadores, las llamadas al resolver de glifos, las filas de imagen, la recursión, la codificación PNG y antes de la publicación; su ciclo de vida es del llamador

El renderer comprueba el permiso de extracción mediante la política prestada del documento y retiene los valores de objetos de origen y los bytes de origen

Propiedad de la salida

HPDFRenderHeadlessPagePNG completa el rendering y la codificación PNG en privado antes de escribir en un stream propio del llamador; un fallo final de I/O del stream puede retener los bytes ya aceptados

HPDFRenderHeadlessPagePNGFile comprueba la identidad del origen, crea exclusivamente un fichero de staging en el directorio objetivo, lo vuelca, vuelve a comprobar identidad y cancelación y reemplaza atómicamente el destino

La publicación de Windows usa como máximo ocho intentos de reemplazo atómico y siete esperas de 1, 2, 4, 8, 16, 16 y 16 milisegundos, reintentando solo los errores de acceso denegado, violación de uso compartido y violación de bloqueo; la cancelación se comprueba antes de cada intento y a ambos lados de cada espera

Una publicación de Windows fallida informa del código de error final capturado de Windows mediante EHPDFHeadlessRenderError; la cancelación retiene el diagnóstico de cancelación del renderer, y ninguna de las dos rutas elimina el destino existente ni hace fallback a una copia no atómica

Los fallos de rendering, presupuesto, cancelación y staging preservan un destino existente y eliminan los ficheros de staging propios no publicados; los alias de ruta de origen y de hardlink se rechazan

Aceptación

La aceptación de runtime de Windows usa ejecutables nativos de consola coincidentes y una closure de import portátil de DLL aislada y fijada por SHA256; un proceso WSL separado ejecuta comprobaciones independientes de píxeles, ecuaciones y geometría de MuPDF y Poppler contra los ficheros PNG producidos por Windows

Los sustitutos de fuentes estándar de Windows usan caras GDI explícitas de Cairo para texto Unicode y contornos reales, incluidos el clipping y los modos fill-and-stroke; las fuentes incrustadas retienen su mapeo de glifos FreeType

Las llamadas a OpenJPEG usan el ABI stdcall de Windows y los exports decorados de Win32, mientras que los callbacks de stream y de mensajes retienen la convención de callbacks de C

Tests/Linux/Run-HeadlessCairoAcceptance.sh realiza builds ELF nativos frescos, limpia DISPLAY y WAYLAND_DISPLAY, rechaza las bibliotecas de escritorio enlazadas directamente y ejecuta oráculos independientes de pypdf/MuPDF

Los fixtures ejercitan las fuentes estándar, TrueType Unicode, Type3, todos los modos de rendering de texto y de blending, alpha y knockout, grupos de transparencia RGB, profundidades de muestras y Decode, máscaras de imagen y Matte, colores indexados e ICC, códecs terminales, cadenas de filtros cifradas con AES, geometría de página, transformaciones de anotaciones, presupuestos, cancelación, preservación del origen y salida atómica

Consulta THPDFHeadlessRenderResult para los contadores y EHPDFHeadlessRenderError para el manejo de errores