Style sheets externos de rich text nativo

El decoder nativo de XHTML aplica recursos CSS suministrados por el caller referenciados por elementos link XHTML y reglas @import de CSS a runs de rich text reales, valores rich guardados y apariencias 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 fusión de rutas RFC 3986 y eliminación de dot-segments; las query strings son parte de la identidad del recurso, los fragments no, las letras de scheme y host se normalizan mientras la información de usuario conserva su mayúscula, y los hex letters de percent-escape se comparan sin mayúsculas

Cada hoja importada resuelve sus import posteriores contra su propio URI y tiene un entorno de namespaces CSS independiente; importar una hoja no filtra las declaraciones @namespace de esa hoja a su padre

Los imports aceptan cadenas entre comillas y tokens url, incluidos escapes CSS, antes de reglas ordinarias o declaraciones de namespace; el evaluador existente de media queries print/screen controla el media de links y las condiciones de import

Las declaraciones importadas entran en la cascada en su posición de fuente real con importance y especificidad normales; una referencia cíclica se salta solo mientras ese recurso está activo, de modo que referencias repetidas posteriores pueden contribuir de nuevo

Los recursos faltantes, las referencias autoriadas inválidas y los content types no CSS no contribuyen declaraciones; una colección de recursos suministrada por el caller inválida lanza EHPDFHeadlessRichTextCodecError

Referencias XHTML y conjuntos seleccionados

Los tokens de relación de stylesheet se comparan sin mayúsculas ASCII; los links deshabilitados se ignoran, y los atributos media y type controlan si un stylesheet referenciado participa

Los elementos style inline y las hojas enlazadas comparten los mismos conjuntos de títulos sensibles a mayúsculas; las hojas persistentes sin título permanecen habilitadas

Sin un StyleSheetTitle explícito, el primer style inline titulado elegible o link no alternate selecciona el conjunto preferido; el decoder determina ese título antes de recolectar declaraciones, así que un alternate anterior con el título seleccionado participa en su posición de cascada original

Un StyleSheetTitle explícito selecciona los styles inline y hojas enlazadas tituladas coincidentes, incluidos alternates; un título sin hoja coincidente deja solo las hojas persistentes habilitadas

El escaneo de título preferido acepta un type vacío o text/css y salta los links deshabilitados o alternate; la disponibilidad de recursos y las condiciones media no cambian el título elegido, y las declaraciones siguen obedeciendo sus propias verificaciones de media, 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 decoder luego aplica cada xml:base ancestral una vez, empezando desde esa base del documento, para resolver referencias link e imports inline; una hoja enlazada o importada resuelve sus propios imports contra su URI de recurso

Por ejemplo, DocumentURI=https://example.test/docs/form.xhtml, xml:base de raíz="a/", head base href="b/" 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 fallback; un primer base href inválido también retiene ese fallback y consume la posición de primera base, de modo que los elementos base posteriores no lo reemplazan

Este ordenamiento define el perfil combinado HTML/XML del decoder nativo; XML Base no define por sí mismo cómo debe combinarse un mecanismo de base HTML separado con él

Form data y operaciones JSON

Configure RichTextDocumentURI, RichTextStyleSheetTitle y RichTextStyleSheets en THPDFHeadlessFormDataOptions al importar FDF RV o value-richtext XFDF mediante métodos de documento nativos

Los file jobs de Windows, execute-json-v1 de Windows y el C ABI nativo de Linux versionado 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 requerido y no vacío para cada recurso JSON; css y contentType son cadenas opcionales, igual que documentURI y styleSheetTitle; las cadenas 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 records de callback

La transacción de import circundante preserva su documento previo ante recursos malformed, cancelación, falla de presupuesto o falla de publicación; los imports exactamente equivalentes retienen el comportamiento no-op byte-idéntico existente

Aceptación no-GUI reutilizable

Tests/Linux/ExternalStyleSheets/Run.py verifica runs decodificados reales, comportamiento de falla acotado, apariencias guardadas y geometría y píxeles PDF independientes; su directorio Callbacks ejercita imports FDF/XFDF reales, bytes no-op y transacciones de publicación fallida

Tests/Linux/ExternalStyleSheets/Supplement/Run.py verifica conjuntos de títulos inline/link compartidos, resolución de base HTML/XML combinada, cada límite de cancelación automatic-title medido y una falla de profundidad seguida de un reintento exitoso

El suplemento acepta un directorio de fuente y configuración de compilador explícitos, registra las identidades reales de fuente y dependencias, y exige un directorio de salida nuevo por ejecución

Límites y trabajo restante

El conteo de recursos es de como máximo 256, cada URI resuelto de como máximo 4096 unidades de código UTF-16, y cada título o content type de como máximo 256; el texto del stylesheet también obedece MaxCodeUnits, con escaneos agregados y matching cobrados a los límites existentes de nodos, unidades de código totales, profundidad y cancelación

Los bindings de form-data usan MaxValueCodeUnits, MaxTotalCodeUnits, MaxObjects, MaxDepth y el token de cancelación de la operación para los límites correspondientes del decoder

Capas de import, layout CSS adicional, tablas, imágenes y carga de recursos HTML más amplia siguen siendo trabajo separado

Selectores y style sheets internos · Perfiles de media · Opciones de form-data

Las consultas de soporte nativas admiten grupos @supports e imports supports() usando el perfil de declaraciones y selectores soportado, con límites compartidos y recuperación de cancelación