Feuilles de style externes de texte enrichi natif

Le décodeur XHTML natif applique aux runs de texte enrichi réels, aux valeurs riches enregistrées et aux apparences de champs les ressources CSS fournies par l'appelant et référencées par des éléments link XHTML et des règles @import CSS

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>

Identité de ressource et cascade

Les références relatives utilisent la fusion de chemins RFC 3986 et la suppression des segments pointés ; les chaînes de requête font partie de l'identité de ressource, pas les fragments, les lettres de scheme et d'hôte sont normalisées tandis que les informations d'utilisateur gardent leur casse, et les lettres hexadécimales des échappements pourcent se comparent sans casse

Chaque feuille importée résout ses imports ultérieurs par rapport à son propre URI et dispose d'un environnement d'espaces de noms CSS indépendant ; importer une feuille ne fuit pas les déclarations @namespace de cette feuille vers son parent

Les imports acceptent les chaînes citées et les tokens url, échappements CSS compris, avant les règles ordinaires ou les déclarations d'espaces de noms ; l'évaluateur de requêtes média print/screen existant contrôle les médias de liens et les conditions d'import

Les déclarations importées entrent dans la cascade à leur position source réelle avec importance et spécificité normales ; une référence cyclique n'est ignorée que pendant que cette ressource est active, si bien que des références répétées ultérieures peuvent contribuer à nouveau

Les ressources manquantes, les références rédigées invalides et les types de contenu non CSS ne contribuent aucune déclaration ; des collections de ressources fournies par l'appelant invalides lèvent EHPDFHeadlessRichTextCodecError

Références XHTML et ensembles sélectionnés

Les tokens de relation de feuille de style se comparent sans casse ASCII ; les liens désactivés sont ignorés, et les attributs media et type contrôlent la participation d'une feuille de style référencée

Les éléments de style inline et les feuilles liées partagent les mêmes ensembles de titres sensibles à la casse ; les feuilles persistantes sans titre restent activées

Sans StyleSheetTitle explicite, le premier style inline titré éligible ou le premier lien non alternate sélectionne l'ensemble préféré ; le décodeur détermine ce titre avant de collecter les déclarations, donc un alternate antérieur portant le titre sélectionné participe à sa position de cascade d'origine

Un StyleSheetTitle explicite sélectionne les styles inline et feuilles liées titrés correspondants, alternates compris ; un titre sans feuille correspondante ne laisse activées que les feuilles persistantes

Le scan du titre préféré accepte un type vide ou text/css et saute les liens désactivés ou alternate ; la disponibilité des ressources et les conditions média ne changent pas le titre choisi, et les déclarations obéissent toujours à leurs propres contrôles média, type et ressource

Résolution de base HTML et XML

Le premier élément base XHTML avec href à l'intérieur d'un head XHTML fournit la base du document en résolvant son href par rapport à DocumentURI ; xml:base sur l'élément base ou ses ancêtres ne modifie pas cette recherche

Le décodeur applique ensuite chaque xml:base d'ancêtre une fois, à partir de cette base de document, pour résoudre les références de liens et les imports inline ; une feuille liée ou importée résout ses propres imports par rapport à son URI de ressource

Par exemple, DocumentURI=https://example.test/docs/form.xhtml, xml:base racine "a/", base de head href="b/" et link href="main.css" se résolvent en https://example.test/docs/b/a/main.css

Un premier href de base vide utilise l'URI de document de repli ; un premier href de base invalide conserve aussi ce repli et consomme la position de première base, si bien que des éléments base ultérieurs ne la remplacent pas

Cet ordonnancement définit le profil combiné HTML/XML du décodeur natif ; XML Base ne définit pas lui-même comment un mécanisme de base HTML séparé devrait s'y combiner

Données de formulaire et opérations JSON

Définissez RichTextDocumentURI, RichTextStyleSheetTitle et RichTextStyleSheets sur THPDFHeadlessFormDataOptions quand vous importez du RV FDF ou du value-richtext XFDF via les méthodes de document natives

Les jobs de fichiers Windows, execute-json-v1 Windows et l'ABI C Linux native versionnée acceptent le même objet richTextResources optionnel sur 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 est requis et non vide pour chaque ressource JSON ; css et contentType sont des chaînes optionnelles, tout comme documentURI et styleSheetTitle ; les chaînes fournies ne doivent pas contenir de NUL

Les ressources sont du texte CSS Unicode fourni par l'hôte ; les identifiants d'URI ne demandent aucun accès au système de fichiers, au réseau, ni aucun changement des layouts de records de callbacks

La transaction d'import englobante préserve son document antérieur face à des ressources mal formées, une annulation, un échec de budget ou d'échec de publication ; des imports exactement équivalents gardent le comportement no-op identique à l'octet existant

Acceptation non GUI réutilisable

Tests/Linux/ExternalStyleSheets/Run.py vérifie les runs décodés réels, le comportement d'échec borné, les apparences enregistrées et la géométrie et les pixels PDF indépendants ; son répertoire Callbacks exerce les imports FDF/XFDF réels, les octets no-op et les transactions de publication en échec

Tests/Linux/ExternalStyleSheets/Supplement/Run.py vérifie les ensembles de titres inline/link partagés, la résolution de base HTML/XML combinée, chaque frontière d'annulation de titre automatique mesurée et un échec de profondeur suivi d'une nouvelle tentative réussie

Le supplément accepte un répertoire source explicite et une configuration de compilateur, enregistre les identités réelles de sources et de dépendances, et exige un nouveau répertoire de sortie par exécution

Bornes et travaux restants

Le nombre de ressources est d'au plus 256, chaque URI résolue d'au plus 4096 unités de code UTF-16, et chaque titre ou type de contenu d'au plus 256 ; le texte des feuilles de style obéit aussi à MaxCodeUnits, les scans agrégés et l'appariement étant facturés aux limites existantes de nœuds, d'unités de code totales, de profondeur et d'annulation

Les liaisons de données de formulaire utilisent MaxValueCodeUnits, MaxTotalCodeUnits, MaxObjects, MaxDepth et le token d'annulation de l'opération pour les limites de décodeur correspondantes

Les couches d'import, le layout CSS supplémentaire, les tableaux, les images et le chargement de ressources HTML plus large restent des travaux distincts

Sélecteurs et feuilles de style internes · Profils média · Options de données de formulaire

Les requêtes de support natives admettent les groupes @supports et les imports supports() selon le profil de déclarations et de sélecteurs pris en charge, avec bornes partagées et récupération après annulation