Native rich-text external style sheets
De native XHTML-decoder past door de caller geleverde CSS-resources die via XHTML link-elements en CSS @import-rules worden gerefereerd toe op echte rich-text runs, opgeslagen rich-waarden en field-appearances
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>
Resource-identiteit en cascade
Relatieve references gebruiken RFC 3986 path merging en dot-segment removal; query strings blijven deel van de resource-identiteit, fragments niet, scheme- en hostletters worden genormaliseerd terwijl user-informatie diens case behoudt, en percent-escape-hexletters vergelijken case-loos
Elke geïmporteerde sheet lost verdere imports op tegen diens eigen URI en heeft een onafhankelijke CSS-namespace-omgeving; een sheet importeren lekt diens @namespace-declaraties niet door naar de parent
Imports accepteren quoted strings en url-tokens, inclusief CSS-escapes, vóór gewone rules of namespace-declaraties; de bestaande print/screen media query-evaluator stuurt link-media en importcondities aan
Geïmporteerde declaraties komen op hun echte bronpositie in de cascade terecht met normale importance en specificity; een cyclische reference wordt alleen overgeslagen zolang die resource actief is, dus latere herhaalde references kunnen opnieuw bijdragen
Ontbrekende resources, ongeldige authored references en niet-CSS-contenttypes leveren geen declaraties; ongeldige door de caller geleverde resource-collecties raise-en EHPDFHeadlessRichTextCodecError
XHTML-references en geselecteerde sets
Stylesheet relation-tokens vergelijken ASCII-case-loos; uitgeschakelde links worden genegeerd, en media- en type-attributes bepalen of een gerefereerde stylesheet meedoet
Inline style-elements en gelinkte sheets delen dezelfde case-gevoelige title-sets; untitled persistent-sheets blijven ingeschakeld
Zonder expliciete StyleSheetTitle selecteert de eerste in aanmerking komende getitelde inline style of non-alternate link de preferred set; de decoder bepaalt die title vóór het verzamelen van declaraties, dus een eerdere alternate met de geselecteerde title doet mee op diens originele cascade-positie
Een expliciete StyleSheetTitle selecteert matchende getitelde inline en gelinkte sheets, inclusief alternates; een title zonder matchende sheet laat alleen persistent-sheets ingeschakeld
De preferred-title-scan accepteert een lege type of text/css en slaat disabled of alternate links over; resource-beschikbaarheid en mediacondities veranderen de gekozen title niet, en declaraties blijven hun eigen media-, type- en resource-checks volgen
HTML- en XML-base-resolutie
Het eerste XHTML base-element met href binnen een XHTML head levert de document-base door diens href tegen DocumentURI te resolvem; xml:base op het base-element of diens voorouders verandert die lookup niet
Daarna past de decoder elke voorouderlijke xml:base één keer toe, startend vanuit die document-base, om link-references en inline imports te resolven; een gelinkte of geïmporteerde sheet lost diens eigen imports op tegen diens resource-URI
Bijvoorbeeld, DocumentURI=https://example.test/docs/form.xhtml, root xml:base="a/", head base href="b/" en link href="main.css" resolven naar https://example.test/docs/b/a/main.css
Een lege eerste base href gebruikt de fallback-document-URI; een ongeldige eerste base href behoudt die fallback ook en verbruikt de eerste-base-positie, dus latere base-elements vervangen hem niet
Deze ordening definieert het gecombineerde HTML/XML-profiel van de native decoder; XML Base definieert zelf niet hoe een apart HTML-base-mechanisme ermee gecombineerd zou moeten worden
Formdata- en JSON-operaties
Zet RichTextDocumentURI, RichTextStyleSheetTitle en RichTextStyleSheets op THPDFHeadlessFormDataOptions wanneer je FDF RV of XFDF value-richtext via native document-methodes importeert
Windows file-jobs, Windows execute-json-v1 en de versioned native Linux C ABI accepteren hetzelfde optionele richTextResources-object op 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 is verplicht en niet-leeg voor elke JSON-resource; css en contentType zijn optionele strings, evenals documentURI en styleSheetTitle; geleverde strings mogen geen NUL bevatten
Resources zijn Unicode-CSS-tekst die de host levert; URI-identificatoren vragen geen filesystem-toegang, netwerktoegang of wijzigingen aan callback-record-layouts
De omringende import-transactie behoudt diens eerdere document bij misvormde resources, annulering, budgetfalen of publicatiefalen; exact equivalente imports behouden het bestaande byte-identieke no-op-gedrag
Herbruikbare non-GUI-acceptatie
Tests/Linux/ExternalStyleSheets/Run.py checkt echte gedecodeerde runs, begrensd faalgedrag, opgeslagen appearances en onafhankelijke PDF-geometrie en pixels; diens Callbacks-directory oefent echte FDF/XFDF-imports, no-op-bytes en gefaalde-publicatie-transacties
Tests/Linux/ExternalStyleSheets/Supplement/Run.py checkt gedeelde inline/link-title-sets, gecombineerde HTML/XML-base-resolutie, elke gemeten automatic-title-annuleringsgrens en dieptefalen gevolgd door een geslaagde retry
De supplement accepteert een expliciete source-directory en compilerconfiguratie, legt de echte bron- en dependency-identiteiten vast, en vraagt een nieuwe output-directory per executie
Grenzen en resterend werk
Het resource-aantal is ten hoogste 256, elke opgeloste URI ten hoogste 4096 UTF-16-code units, en elke title of contenttype ten hoogste 256; stylesheet-tekst volgt ook MaxCodeUnits, met aggregate scans en matching belast op de bestaande node-, total-code-unit-, diepte- en annuleringslimieten
Formdata-bindings gebruiken MaxValueCodeUnits, MaxTotalCodeUnits, MaxObjects, MaxDepth en het cancellation-token van de operatie voor de bijbehorende decoderlimieten
Import layers, aanvullende CSS-layout, tabellen, images en bredere HTML-resource-loading blijven apart werk
Selectors en interne style sheets · Media-profielen · Formdata-opties
Native support queries laten @supports-groepen en supports()-imports toe met het ondersteunde declaratie- en selectorprofiel, met gedeelde grenzen en annuleringsherstel