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