ネイティブリッチテキストの外部スタイルシート
ネイティブ XHTML デコーダは、XHTML link 要素と CSS @import ルールが参照する、呼び出し側供給の CSS リソースを、実際のリッチテキスト run、保存されたリッチ値、フィールド外観に適用します
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>
リソース ID とカスケード
相対参照は RFC 3986 のパス統合とドットセグメント除去を使います。クエリ文字列はリソース ID の一部ですが、フラグメントは違います。scheme と host の英字は正規化されますが、userinfo は大文字小文字を保持し、パーセントエスケープの 16 進英字は大文字小文字なしで比較されます
各インポートされたシートは自身の URI に対してさらにインポートを解決し、独立した CSS 名前空間環境を持ちます。シートのインポートは、そのシートの @namespace 宣言を親に漏らしません
インポートは、通常のルールや名前空間宣言の前に、CSS エスケープを含む引用符付き文字列と url トークンを受け付けます。既存の print/screen メディアクエリ評価器が link のメディアとインポート条件を制御します
インポートされた宣言は、通常の重要度と詳細度で実際のソース位置のカスケードに入ります。循環参照はそのリソースがアクティブな間だけスキップされるため、後の繰り返し参照は再び寄与できます
欠落リソース、無効な記述参照、CSS 以外のコンテンツタイプは宣言を寄与しません。呼び出し側供給の無効なリソースコレクションは EHPDFHeadlessRichTextCodecError を送出します
XHTML 参照と選択セット
スタイルシート関係トークンは ASCII 大文字小文字なしで比較されます。無効化された link は無視され、media と type 属性が参照されたスタイルシートの参加を制御します
インライン style 要素とリンクされたシートは、同じ大文字小文字区別のタイトル集合を共有します。タイトルなしの永続シートは有効なままです
明示的な StyleSheetTitle がない場合、最初の適格なタイトル付きインラインスタイルまたは非代替 link が優先セットを選択します。デコーダは宣言を収集する前にそのタイトルを決定するため、選択タイトルを持つ先行する代替シートは元のカスケード位置で参加します
明示的な StyleSheetTitle は、代替を含め、一致するタイトル付きインライン・リンクシートを選択します。一致するシートのないタイトルは、永続シートだけを有効のまま残します
優先タイトルスキャンは空の type または text/css を受け付け、無効化・代替 link をスキップします。リソースの可用性とメディア条件は選択タイトルを変えず、宣言は依然として自身のメディア・type・リソース検査に従います
HTML・XML ベースの解決
XHTML head 内の href を持つ最初の XHTML base 要素が、その href を DocumentURI に対して解決してドキュメントベースを供給します。base 要素やその祖先の xml:base はこの検索を変えません
デコーダはその後、ドキュメントベースから始めて各祖先の xml:base を一度適用し、link 参照とインラインインポートを解決します。リンク・インポートされたシートは、そのリソース URI に対して自身のインポートを解決します
たとえば、DocumentURI=https://example.test/docs/form.xhtml、ルートの xml:base="a/"、head の base href="b/"、link href="main.css" は https://example.test/docs/b/a/main.css に解決されます
最初の base href が空ならフォールバックのドキュメント URI を使います。無効な最初の base href もそのフォールバックを保持し、最初の base の位置を消費するため、後続の base 要素は置き換えません
この順序がネイティブデコーダの HTML/XML 結合プロファイルを定義します。XML Base 自体は、別個の HTML ベース機構をどう組み合わせるべきかを定義しません
フォームデータと JSON 操作
ネイティブドキュメントメソッドで FDF RV や XFDF の value-richtext をインポートするときは、THPDFHeadlessFormDataOptions に RichTextDocumentURI、RichTextStyleSheetTitle、RichTextStyleSheets を設定してください
Windows のファイルジョブ、Windows の execute-json-v1、バージョン付きネイティブ Linux C ABI は、forms.import で同じオプションの richTextResources オブジェクトを受け付けます
{
"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"}
]
}
}
各 JSON リソースには URI が必須かつ非空です。css と contentType は任意の文字列で、documentURI と styleSheetTitle も任意です。供給された文字列に NUL を含めてはいけません
リソースはホストが供給する Unicode CSS テキストです。URI 識別子はファイルシステムアクセス、ネットワークアクセス、コールバックレコードレイアウトの変更を要求しません
周囲のインポートトランザクションは、不正リソース、キャンセル、予算失敗、公開失敗のとき以前のドキュメントを保持します。正確に等価なインポートは、既存のバイト一致 no-op 動作を保持します
再利用可能な非 GUI 受け入れ
Tests/Linux/ExternalStyleSheets/Run.py は、実際にデコードされた run、上限付き失敗動作、保存された外観、独立した PDF ジオメトリ・ピクセルを検査します。Callbacks ディレクトリは、実際の FDF/XFDF インポート、no-op バイト、公開失敗トランザクションを演習します
Tests/Linux/ExternalStyleSheets/Supplement/Run.py は、共有インライン/link タイトル集合、結合 HTML/XML ベース解決、計測されたすべての自動タイトルキャンセル境界、深さ失敗とその後の成功再試行を検査します
サプリメントは明示的なソースディレクトリとコンパイラ構成を受け付け、実際のソースと依存の ID を記録し、実行ごとに新しい出力ディレクトリを要求します
境界と残作業
リソース数は最大 256、解決済み URI はそれぞれ最大 4096 UTF-16 コード単位、タイトル・コンテンツタイプは最大 256 です。スタイルシートテキストは MaxCodeUnits にも従い、合計スキャンとマッチングは既存のノード・総コード単位・深さ・キャンセル上限に課金されます
フォームデータバインディングは、対応するデコーダ上限に MaxValueCodeUnits、MaxTotalCodeUnits、MaxObjects、MaxDepth と操作のキャンセルトークンを使います
インポートレイヤ、追加の CSS レイアウト、テーブル、画像、より広い HTML リソースロードは別の作業です
セレクタと内部スタイルシート · メディアプロファイル · フォームデータオプション
ネイティブサポート照会は、サポートされる宣言・セレクタプロファイルを使って @supports グループと supports() インポートを許可し、共有境界とキャンセル復元を伴います