Native rich-text external style sheets
Natywny dekoder XHTML nakłada dostarczone przez wywołującego zasoby CSS referencjonowane przez elementy link XHTML i reguły @import CSS na rzeczywiste runy rich textu, zapisane wartości rich i wyglądy pól
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>
Tożsamość zasobów i kaskada
Referencje względne używają path merging z RFC 3986 i usuwania segmentów kropek; query stringi pozostają częścią tożsamości zasobu, fragmenty nie, litery scheme i hosta są normalizowane, a information user zachowuje swoją wielkość liter, przy czym szesnastkowe litery percent-escape porównują się bez wielkości liter
Każdy zaimportowany arkusz rozwiązuje dalsze importy względem własnego URI i ma niezależne środowisko przestrzeni nazw CSS; zaimportowanie arkusza nie przecieka jego deklaracji @namespace do rodzica
Importy akceptują quoted stringi i tokeny url, włącznie z escape'ami CSS, przed zwykłymi regułami albo deklaracjami przestrzeni nazw; istniejący ewaluator media query print/screen steruje mediami linków i warunkami importów
Zaimportowane deklaracje wchodzą do kaskady na swojej rzeczywistej pozycji źródłowej z normalnymi importance i specificity; cykliczna referencja jest pomijana tylko dopóki ten zasób jest aktywny, więc późniejsze powtórzone referencje mogą znowu się wnieść
Brakujące zasoby, niepoprawne referencje autorskie i typy zawartości niebędące CSS nie wnoszą deklaracji; niepoprawne kolekcje zasobów dostarczone przez wywołującego podnoszą EHPDFHeadlessRichTextCodecError
Referencje XHTML i wybrane zestawy
Tokeny relacji arkuszy stylów porównują się bez wielkości liter ASCII; wyłączone linki są ignorowane, a atrybuty media i type decydują, czy referencjonowany arkusz uczestniczy
Elementy style inline i linkowane arkusze współdzielą te same case-sensitive zestawy tytułów; beztytułowe arkusze persistent pozostają włączone
Bez jawnego StyleSheetTitle pierwszy kwalifikujący się potytułowany styl inline albo link niealternatywny wybiera zestaw preferowany; dekoder ustala ten tytuł przed zbieraniem deklaracji, więc wcześniejszy alternatywny z wybranym tytułem uczestniczy na swojej oryginalnej pozycji kaskady
Jawny StyleSheetTitle wybiera matchujące potytułowane style inline i linkowane arkusze, włącznie z alternatywnymi; tytuł bez matchującego arkusza zostawia włączone tylko arkusze persistent
Skan preferowanego tytułu akceptuje pusty typ albo text/css i pomija wyłączone albo alternatywne linki; dostępność zasobów i warunki mediów nie zmieniają wybranego tytułu, a deklaracje nadal podlegają własnym checkom mediów, typu i zasobów
Rozwiązywanie base HTML i XML
Pierwszy element base XHTML z href wewnątrz head XHTML dostarcza bazę dokumentu przez rozwiązanie swojego href względem DocumentURI; xml:base na elemencie base albo jego przodkach nie zmienia tego lookupu
Następnie dekoder nakłada xml:base każdego przodka raz, startując od tej bazy dokumentu, by rozwiązać referencje linków i importy inline; linkowany albo importowany arkusz rozwiązuje własne importy względem swojego URI zasobu
Na przykład DocumentURI=https://example.test/docs/form.xhtml, root xml:base="a/", head base href="b/" i link href="main.css" rozwiązują się do https://example.test/docs/b/a/main.css
Pusty pierwszy base href używa fallbackowego URI dokumentu; niepoprawny pierwszy base href też zachowuje ten fallback i zużywa pozycję pierwszej bazy, więc późniejsze elementy base jej nie podmieniają
To uporządkowanie definiuje połączony profil HTML/XML natywnego dekodera; XML Base sam nie definiuje, jak łączyć z nim osobny mechanizm base HTML
Dane formularzy i operacje JSON
Ustaw RichTextDocumentURI, RichTextStyleSheetTitle i RichTextStyleSheets na THPDFHeadlessFormDataOptions, gdy importujesz FDF RV albo wartości richtext XFDF przez natywne metody dokumentu
Joby plikowe Windows, Windows execute-json-v1 i wersjonowane natywne C ABI Linuxa akceptują ten sam opcjonalny obiekt richTextResources na 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 jest wymagany i niepusty dla każdego zasobu JSON; css i contentType to opcjonalne stringi, podobnie jak documentURI i styleSheetTitle; dostarczone stringi nie mogą zawierać NUL
Zasoby to tekst CSS Unicode dostarczany przez hosta; identyfikatory URI nie żądają dostępu do filesystemu, dostępu do sieci ani zmian w layoutach rekordów callbacków
Otoczona transakcja importu zachowuje swój poprzedni dokument przy zniekształconych zasobach, anulowaniu, niepowodzeniu budżetu albo publikacji; dokładnie równoważne importy zachowują istniejące zachowanie no-op o identycznych bajtach
Wielokrotnego użytku akceptacja bez GUI
Tests/Linux/ExternalStyleSheets/Run.py sprawdza rzeczywiste zdekodowane runy, ograniczone zachowanie przy niepowodzeniu, zapisane wyglądy oraz niezależną geometrię i piksele PDF; jego katalog Callbacks ćwiczy rzeczywiste importy FDF/XFDF, bajty no-op i transakcje nieudanej publikacji
Tests/Linux/ExternalStyleSheets/Supplement/Run.py sprawdza współdzielone zestawy tytułów inline/link, połączone rozwiązywanie base HTML/XML, każdą zmierzoną granicę anulowania automatic-title i niepowodzenie głębokości zakończone udanym retryem
Supplement akceptuje jawny katalog źródłowy i konfigurację kompilatora, rejestruje rzeczywiste tożsamości źródła i zależności oraz wymaga nowego katalogu wyjścia na każdą egzekucję
Ograniczenia i pozostała praca
Liczba zasobów to co najwyżej 256, każdy rozwiązany URI co najwyżej 4096 jednostek kodowych UTF-16, a każdy tytuł albo typ zawartości co najwyżej 256; tekst arkuszy stylów podlega też MaxCodeUnits, z agregacyjnymi skanami i matchowaniem obciążanymi na istniejące limity węzłów, łącznych jednostek kodowych, głębokości i anulowania
Wiązania danych formularzy używają MaxValueCodeUnits, MaxTotalCodeUnits, MaxObjects, MaxDepth i tokenu anulowania operacji dla odpowiadających limitów dekodera
Warstwy importów, dodatkowy layout CSS, tabele, obrazy i szersze ładowanie zasobów HTML pozostają osobną pracą
Selektory i wewnętrzne arkusze stylów · Profile mediów · Opcje danych formularzy
Natywne support queries dopuszczają grupy @supports i importy supports() przy użyciu obsługiwanego profilu deklaracji i selektorów, ze współdzielonymi ograniczeniami i odzyskiwaniem po anulowaniu