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