Style sheets externas de rich text nativo
El decodificador XHTML nativo aplica los recursos CSS suministrados por el llamador que referencian los elementos link XHTML y las reglas @import de CSS a los runs reales de rich text, los rich values guardados y las appearances de campos
Options := THPDFHeadlessRichTextDecodeOptions.Default;
Options.DocumentURI := 'https://example.test/forms/order.xhtml';
SetLength(Options.StyleSheets, 2);
Options.StyleSheets[0].URI := 'css/main.css';
Options.StyleSheets[0].CSS := '@import "colors.css"; span.total { font-weight: bold }';
Options.StyleSheets[0].ContentType := 'text/css';
Options.StyleSheets[1].URI := 'css/colors.css';
Options.StyleSheets[1].CSS := 'span.total { color: #a02030 }';
Runs := HPDFDecodeHeadlessRichText(XHTML, Options);
<body xmlns="http://www.w3.org/1999/xhtml">
<link rel="stylesheet" href="css/main.css" />
<span class="total">Total</span>
</body>
Identidad de recursos y cascada
Las referencias relativas usan la fusión de paths de RFC 3986 y la eliminación de dot-segments; las query strings son parte de la identidad del recurso, los fragmentos no, las letras de scheme y host se normalizan mientras que la user information retiene sus mayúsculas/minúsculas, y los hex de los escapes porcentuales se comparan sin distinción de caso
Cada sheet importada resuelve sus importaciones posteriores contra su propio URI y tiene un entorno de namespaces CSS independiente; importar una sheet no filtra las declaraciones @namespace de esa sheet a su padre
Las importaciones aceptan strings entre comillas y tokens url, incluidos escapes CSS, antes de las reglas ordinarias o las declaraciones de namespace; el evaluador de media queries print/screen existente controla los medios de link y las condiciones de import
Las declaraciones importadas entran en la cascada en su posición real de fuente con importancia y especificidad normales; una referencia cíclica se omite solo mientras ese recurso está activo, de modo que referencias repetidas posteriores pueden contribuir de nuevo
Los recursos ausentes, las referencias del autor inválidas y los content types que no son CSS no aportan declaraciones; las colecciones de recursos suministradas por el llamador inválidas lanzan EHPDFHeadlessRichTextCodecError
Referencias XHTML y conjuntos seleccionados
Los tokens de relación de stylesheet se comparan sin distinción de caso ASCII; los links deshabilitados se ignoran, y los atributos media y type controlan si una stylesheet referenciada participa
Los style elements inline y las sheets enlazadas comparten los mismos conjuntos de títulos sensibles a mayúsculas/minúsculas; las sheets persistentes sin título permanecen habilitadas
Sin StyleSheetTitle explícito, el primer inline style con título elegible o el primer link no alternante selecciona el conjunto preferido; el decodificador determina ese título antes de recolectar declaraciones, de modo que un alternante anterior con el título seleccionado participa en su posición original de cascada
Un StyleSheetTitle explícito selecciona los inline y linked sheets con título coincidente, incluidos los alternantes; un título sin sheet coincidente deja habilitadas solo las sheets persistentes
El escaneo de título preferido acepta un type vacío o text/css y salta los links deshabilitados o alternantes; la disponibilidad de recursos y las condiciones de medios no cambian el título elegido, y las declaraciones siguen obedeciendo sus propias comprobaciones de medios, type y recurso
Resolución de base HTML y XML
El primer elemento base XHTML con href dentro de un head XHTML suministra la base del documento resolviendo su href contra DocumentURI; el xml:base del elemento base o de sus ancestros no altera esa búsqueda
El decodificador aplica después cada xml:base de ancestro una vez, partiendo de esa base del documento, para resolver las referencias link y las importaciones inline; una sheet enlazada o importada resuelve sus propias importaciones contra su URI de recurso
Por ejemplo, DocumentURI=https://example.test/docs/form.xhtml, xml:base="a/" en la raíz, base href="b/" en el head y link href="main.css" resuelven a https://example.test/docs/b/a/main.css
Un primer base href vacío usa el URI de documento de respaldo; un primer base href inválido también retiene ese respaldo y consume la posición de primera base, de modo que los elementos base posteriores no lo reemplazan
Este orden define el perfil combinado HTML/XML del decodificador nativo; XML Base por sí mismo no define cómo debe combinarse con él un mecanismo de base HTML separado
Form data y operaciones JSON
Establezca RichTextDocumentURI, RichTextStyleSheetTitle y RichTextStyleSheets en THPDFHeadlessFormDataOptions al importar FDF RV o XFDF value-richtext mediante métodos nativos de documento
Los file jobs de Windows, el execute-json-v1 de Windows y el C ABI nativo versionado de Linux aceptan el mismo objeto opcional richTextResources en forms.import
{
"schemaVersion": 1,
"type": "forms.import",
"format": "xfdf",
"richTextResources": {
"documentURI": "https://example.test/forms/order.xhtml",
"styleSheetTitle": "Print",
"styleSheets": [
{"uri": "css/main.css", "css": "span.total { color: red }", "contentType": "text/css"}
]
}
}
URI es obligatorio y no vacío para cada recurso JSON; css y contentType son strings opcionales, igual que documentURI y styleSheetTitle; las strings suministradas no deben contener NUL
Los recursos son texto CSS Unicode suministrado por el host; los identificadores URI no solicitan acceso al filesystem, acceso a red ni cambios en los layouts de registros de callbacks
La transacción de importación circundante preserva su documento previo ante recursos mal formados, cancelación, fallo de presupuesto o fallo de publicación; las importaciones exactamente equivalentes retienen el comportamiento no-op existente de bytes idénticos
Aceptación reutilizable no GUI
Tests/Linux/ExternalStyleSheets/Run.py comprueba los runs decodificados reales, el comportamiento de fallo acotado, las appearances guardadas y la geometría y píxeles independientes del PDF; su directorio Callbacks ejercita importaciones FDF/XFDF reales, bytes no-op y transacciones de publicación fallida
Tests/Linux/ExternalStyleSheets/Supplement/Run.py comprueba los conjuntos de títulos compartidos inline/link, la resolución de base combinada HTML/XML, cada límite medido de cancelación de título automático y el fallo de profundidad seguido de un reintento exitoso
El suplemento acepta un directorio de origen y una configuración de compilador explícitos, registra las identidades reales de fuente y dependencias, y exige un directorio de salida nuevo para cada ejecución
Bounds y trabajo restante
El recuento de recursos es de 256 como máximo, cada URI resuelto de 4096 code units UTF-16 como máximo, y cada título o content type de 256 como máximo; el texto de stylesheets obedece además MaxCodeUnits, con escaneos agregados y emparejamiento cargados a los límites existentes de nodos, code units totales, profundidad y cancelación
Los enlaces de form data usan MaxValueCodeUnits, MaxTotalCodeUnits, MaxObjects, MaxDepth y el token de cancelación de la operación para los límites correspondientes del decodificador
Las capas de importación, el layout CSS adicional, las tablas, las imágenes y la carga de recursos HTML más amplia siguen siendo trabajo aparte
Selectores y style sheets internas · Perfiles de medios · Opciones de form data
Las consultas de soporte nativas admiten grupos @supports e importaciones supports() usando el perfil de declaraciones y selectores soportado, con bounds compartidos y recuperación de cancelación