Native rich-text eksterne style sheets
Den native XHTML-dekoder anvender kalder-leverede CSS-ressourcer, som refereres af XHTML link-elementer og CSS @import-regler, på rigtige rich text-runs, gemte rich-værdier og felt-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>
Ressource-identitet og kaskade
Relative referencer bruger RFC 3986 sti-fletning og dot-segment-fjernelse; query-strenge forbliver en del af ressource-identitet, fragmenter gør ikke, skema- og host-bogstaver normaliseres, mens brugerinformation beholder sin versalisering, og procent-escape-hexbogstaver sammenlignes uden case
Hvert importeret sheet opløser yderligere imports mod sin egen URI og har et uafhængigt CSS namespace-miljø; import af et sheet lækker ikke det sheets @namespace-erklæringer ind i dets parent
Imports accepterer quotede strenge og url-tokens, inklusive CSS-escapes, før almindelige regler eller namespace-erklæringer; den eksisterende print/screen media query-evaluator styrer link-media og importbetingelser
Importerede erklæringer kommer ind i kaskaden på deres faktiske kildeposition med normal prioritet og specificitet; en cyklisk reference springes kun over, mens den ressource er aktiv, så senere gentagne referencer kan bidrage igen
Manglende ressourcer, ugyldige authored referencer og ikke-CSS indholdstyper bidrager ikke med erklæringer; ugyldige kalder-leverede ressourcesamlinger udløser EHPDFHeadlessRichTextCodecError
XHTML-referencer og valgte sæt
Stylesheet relation-tokens sammenlignes uden ASCII-case; deaktiverede links ignoreres, og media- og type-attributter styrer, om et refereret stylesheet deltager
Inline style-elementer og linkede sheets deler de samme case-sensitive titelsæt; unavngivne persistente sheets forbliver aktiveret
Uden eksplicit StyleSheetTitle vælger det første berettigede titel-bårne inline style eller ikke-alternative link det foretrukne sæt; dekoderen bestemmer den titel, før erklæringer indsamles, så et tidligere alternativt med den valgte titel deltager på sin originale kaskadeposition
En eksplicit StyleSheetTitle vælger matchende titel-bårne inline og linkede sheets, inklusive alternativer; en titel uden matchende sheet efterlader kun persistente sheets aktiveret
Preferred-title-scanningen accepterer en tom type eller text/css og springer deaktiverede eller alternative links over; ressursetilgængelighed og mediebetingelser ændrer ikke den valgte titel, og erklæringer adlyder stadig egne media-, type- og ressourcetjek
HTML- og XML base-opløsning
Det første XHTML base-element med href inde i et XHTML head leverer dokumentbasen ved at opløse dets href mod DocumentURI; xml:base på base-elementet eller dets forfædre ændrer ikke det opslag
Dekoderen anvender derefter hver forfaders xml:base én gang, startende fra den dokumentbase, for at opløse linkreferencer og inline imports; et linket eller importeret sheet opløser egne imports mod sin ressource-URI
For eksempel opløses DocumentURI=https://example.test/docs/form.xhtml, rod xml:base="a/", head base href="b/" og link href="main.css" til https://example.test/docs/b/a/main.css
En tom første base href bruger fallback dokument-URI; en ugyldig første base href beholder også den fallback og forbruger first-base-positionen, så senere base-elementer ikke erstatter den
Denne rækkefølge definerer den native dekoders kombinerede HTML/XML-profil; XML Base definerer ikke selv, hvordan en separat HTML base-mekanisme bør kombineres med den
Form data- og JSON-operationer
Sæt RichTextDocumentURI, RichTextStyleSheetTitle og RichTextStyleSheets på THPDFHeadlessFormDataOptions ved import af FDF RV eller XFDF value-richtext gennem native dokumentmetoder
Windows file jobs, Windows execute-json-v1 og den versionerede native Linux C ABI accepterer samme valgfrie richTextResources-objekt på 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 er krævet og ikke-tom for hver JSON-ressource; css og contentType er valgfrie strenge, ligesom documentURI og styleSheetTitle; leverede strenge må ikke indeholde NUL
Ressourcer er Unicode CSS-tekst leveret af hosten; URI-identifikatorer anmoder ikke om filsystemadgang, netværksadgang eller ændringer af callback record-layouts
Den omgivende importtransaktion beholder sit tidligere dokument ved misdannede ressourcer, cancellation, budgetfejl eller publiceringsfejl; eksakte ækvivalente importer beholder den eksisterende byte-identiske no-op-adfærd
Genbrugelig ikke-GUI-accept
Tests/Linux/ExternalStyleSheets/Run.py tjekker rigtige dekodede runs, afgrænset fejladfærd, gemte appearances samt uafhængig PDF-geometri og -pixels; dets Callbacks-mappe øver rigtige FDF/XFDF-importer, no-op-bytes og mislykkede publiceringstransaktioner
Tests/Linux/ExternalStyleSheets/Supplement/Run.py tjekker delte inline/link titelsæt, kombineret HTML/XML base-opløsning, hver målt automatisk-titel cancellation-grænse samt dybdefejl efterfulgt af succesfuld retry
Til supplementet accepterer en eksplicit kildemappe og compiler-konfiguration, registrerer de faktiske kilde- og afhængighedsidentiteter og kræver en ny outputmappe
Grænser og tilbageværende arbejde
Ressourceantallet er højst 256, hver opløst URI højst 4096 UTF-16 code units, og hver titel eller indholdstype højst 256; stylesheet-tekst adlyder også MaxCodeUnits, med samlede scanninger og matching debiteret til de eksisterende node-, total-code-unit-, dybde- og cancellation-grænser
Form-data-bindinger bruger MaxValueCodeUnits, MaxTotalCodeUnits, MaxObjects, MaxDepth og operationens cancellation-token til de tilsvarende dekodergrænser
Importlag, yderligere CSS-layout, tabeller, billeder og bredere HTML-ressourceindlæsning forbliver separat arbejde
Selektorer og interne style sheets · Medieprofiler · Form-data-options
Native support-queries tillader @supports-grupper og supports()-imports med den understøttede erklærings- og selektorprofil med delte grænser og cancellation-genopretning