Fogli di stile esterni del rich text nativo
Il decoder XHTML nativo applica le risorse CSS fornite dal caller referenziate dagli elementi link XHTML e dalle regole @import CSS ai run di rich text effettivi, ai valori rich salvati e alle appearance dei campi
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à delle risorse e cascata
I riferimenti relativi usano la fusione dei percorsi RFC 3986 e la rimozione dei dot-segment; le query string fanno parte dell'identità della risorsa, i fragment no, le lettere di scheme e host si normalizzano mentre le informazioni utente conservano il loro maiuscolo, e le lettere esadecimali dei percent-escape si confrontano senza maiuscole
Ogni foglio importato risolve gli ulteriori import rispetto al proprio URI e ha un ambiente di namespace CSS indipendente; importare un foglio non trapela le dichiarazioni @namespace di quel foglio nel suo genitore
Gli import accettano stringhe tra virgolette e token url, inclusi escape CSS, prima delle regole ordinarie o delle dichiarazioni di namespace; l'esistente valutatore di media query print/screen controlla il media dei link e le condizioni di import
Le dichiarazioni importate entrano nella cascata alla loro posizione sorgente effettiva con importance e specificità normali; un riferimento ciclico viene saltato solo mentre quella risorsa è attiva, così riferimenti ripetuti successivi possono contribuire di nuovo
Risorse mancanti, riferimenti autoriali non validi e content type non CSS non contribuiscono dichiarazioni; una collezione di risorse fornita dal caller non valida solleva EHPDFHeadlessRichTextCodecError
Riferimenti XHTML e insiemi selezionati
I token di relazione del stylesheet si confrontano senza maiuscole ASCII; i link disabilitati vengono ignorati, e gli attributi media e type decidono se uno stylesheet referenziato partecipa
Gli elementi style inline e i fogli collegati condividono gli stessi insiemi di titoli sensibili alle maiuscole; i fogli persistenti senza titolo restano abilitati
Senza un StyleSheetTitle esplicito, il primo style inline titolato idoneo o link non alternate seleziona l'insieme preferito; il decoder determina quel titolo prima di raccogliere le dichiarazioni, così un alternate precedente con il titolo selezionato partecipa alla sua posizione di cascata originale
Uno StyleSheetTitle esplicito seleziona gli style inline e i fogli collegati titolati corrispondenti, inclusi gli alternate; un titolo senza foglio corrispondente lascia abilitati solo i fogli persistenti
La scansione del titolo preferito accetta un type vuoto o text/css e salta i link disabilitati o alternate; la disponibilità delle risorse e le condizioni media non cambiano il titolo scelto, e le dichiarazioni continuano a obbedire alle proprie verifiche di media, type e risorsa
Risoluzione della base HTML e XML
Il primo elemento base XHTML con href dentro un head XHTML fornisce la base del documento risolvendo il suo href contro DocumentURI; xml:base sull'elemento base o sui suoi antenati non altera quella ricerca
Il decoder applica poi ogni xml:base degli antenati una volta, partendo da quella base del documento, per risolvere i riferimenti link e gli import inline; un foglio collegato o importato risolve i propri import rispetto al proprio URI di risorsa
Per esempio, DocumentURI=https://example.test/docs/form.xhtml, xml:base di radice="a/", head base href="b/" e link href="main.css" si risolvono in https://example.test/docs/b/a/main.css
Un primo base href vuoto usa l'URI documento di fallback; un primo base href non valido conserva anch'esso quel fallback e consuma la posizione di prima base, così gli elementi base successivi non lo sostituiscono
Questo ordine definisce il profilo combinato HTML/XML del decoder nativo; XML Base non definisce di per sé come un meccanismo di base HTML separato debba essere combinato con esso
Dati modulo e operazioni JSON
Configurare RichTextDocumentURI, RichTextStyleSheetTitle e RichTextStyleSheets su THPDFHeadlessFormDataOptions quando si importano FDF RV o value-richtext XFDF tramite metodi di documento nativi
I file job Windows, execute-json-v1 Windows e il C ABI Linux nativo versionato accettano lo stesso oggetto opzionale richTextResources su 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 è richiesto e non vuoto per ogni risorsa JSON; css e contentType sono stringhe opzionali, così come documentURI e styleSheetTitle; le stringhe fornite non devono contenere NUL
Le risorse sono testo CSS Unicode fornito dall'host; gli identificatori URI non richiedono accesso al filesystem, accesso alla rete o modifiche ai layout dei record callback
La transazione di import circostante preserva il proprio documento precedente in presenza di risorse malformed, cancellazione, fallimento di budget o di pubblicazione; gli import esattamente equivalenti conservano l'esistente comportamento no-op byte-identico
Acceptance non-GUI riutilizzabile
Tests/Linux/ExternalStyleSheets/Run.py verifica run decodificati effettivi, comportamento di fallimento limitato, appearance salvate e geometria e pixel PDF indipendenti; la sua directory Callbacks esercita import FDF/XFDF effettivi, byte no-op e transazioni con pubblicazione fallita
Tests/Linux/ExternalStyleSheets/Supplement/Run.py verifica insiemi di titoli inline/link condivisi, risoluzione della base HTML/XML combinata, ogni confine di cancellazione automatic-title misurato e un fallimento di profondità seguito da un tentativo riuscito
Il supplemento accetta una directory sorgente e una configurazione del compilatore esplicite, registra le identità effettive di sorgente e dipendenze, ed esige una nuova directory di output per ogni esecuzione
Limiti e lavoro restante
Il conteggio delle risorse è al massimo 256, ogni URI risolto al massimo 4096 unità di codice UTF-16, e ogni titolo o content type al massimo 256; il testo del stylesheet obbedisce anche a MaxCodeUnits, con scansioni aggregate e matching addebitati ai limiti esistenti di nodi, unità di codice totali, profondità e cancellazione
I binding dei dati modulo usano MaxValueCodeUnits, MaxTotalCodeUnits, MaxObjects, MaxDepth e il token di cancellazione dell'operazione per i limiti corrispondenti del decoder
Livelli di import, layout CSS aggiuntivo, tabelle, immagini e caricamento di risorse HTML più ampio restano lavoro separato
Selettori e fogli di stile interni · Profili media · Opzioni dei dati modulo
Le query di supporto native ammettono gruppi @supports e import supports() usando il profilo di dichiarazioni e selettori supportato, con limiti condivisi e recupero della cancellazione