Folhas de estilo externas de rich text nativas
O decoder nativo XHTML aplica recursos CSS fornecidos pelo chamador, referenciados por elementos link XHTML e regras CSS @import, a runs reais de rich text, valores rich salvos e aparências de campos
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>
Identidade de recursos e cascata
Referências relativas usam merging de paths RFC 3986 e remoção de dot segments; query strings permanecem parte da identidade do recurso, fragments não, letras de scheme e host são normalizadas enquanto user information retém a capitalização, e letras hexadecimais de percent-escapes comparam sem maiúsculas
Cada folha importada resolve imports adicionais contra o próprio URI dela e tem um ambiente independente de namespaces CSS; importar uma folha não vaza as declarações @namespace dela para a pai
Imports aceitam strings entre aspas e tokens url, incluindo escapes CSS, antes de regras comuns ou declarações de namespaces; o avaliador existente de media queries print/screen controla media de links e condições de import
Declarações importadas entram na cascata na posição real de origem delas, com importance e especificidade normais; uma referência cíclica é pulada apenas enquanto aquele recurso está ativo, então referências repetidas posteriores podem contribuir de novo
Recursos ausentes, referências autoradas inválidas e content types que não são CSS não contribuem com declarações; coleções inválidas de recursos fornecidos pelo chamador disparam EHPDFHeadlessRichTextCodecError
Referências XHTML e conjuntos selecionados
Tokens de relação de stylesheets comparam sem maiúsculas ASCII; links desabilitados são ignorados, e atributos media e type controlam se uma stylesheet referenciada participa
Elementos style inline e folhas vinculadas compartilham os mesmos conjuntos de títulos sensíveis a maiúsculas; folhas persistentes sem título permanecem habilitadas
Sem um StyleSheetTitle explícito, o primeiro estilo inline intitulado elegível ou link não alternate seleciona o conjunto preferred; o decoder determina aquele título antes de coletar declarações, então um alternate anterior com o título selecionado participa na posição original de cascata dele
Um StyleSheetTitle explícito seleciona estilos inline e folhas vinculadas intituladas correspondentes, incluindo alternates; um título sem folha correspondente deixa apenas as folhas persistentes habilitadas
A varredura de título preferred aceita um type vazio ou text/css e pula links desabilitados ou alternate; a disponibilidade de recursos e as condições de media não mudam o título escolhido, e as declarações ainda obedecem às próprias checagens de media, type e recursos delas
Resolução de bases HTML e XML
O primeiro elemento base XHTML com href dentro de um head XHTML fornece a base do documento resolvendo o href dele contra DocumentURI; xml:base no próprio elemento base ou nos ancestrais dele não altera esse lookup
O decoder então aplica cada xml:base ancestral uma vez, partindo daquela base de documento, para resolver referências de links e imports inline; uma folha vinculada ou importada resolve os próprios imports dela contra o resource URI dela
Por exemplo, DocumentURI=https://example.test/docs/form.xhtml, xml:base="a/" na raiz, base href="b/" no head e link href="main.css" resolvem para https://example.test/docs/b/a/main.css
Um primeiro base href vazio usa o URI de documento de fallback; um primeiro base href inválido também retém esse fallback e consome a posição de first-base, de modo que elementos base posteriores não o substituem
Esta ordenação define o perfil combinado HTML/XML do decoder nativo; o XML Base em si não define como um mecanismo separado de base HTML deve ser combinado com ele
Form data e operações JSON
Defina RichTextDocumentURI, RichTextStyleSheetTitle e RichTextStyleSheets em THPDFHeadlessFormDataOptions ao importar FDF RV ou XFDF value-richtext pelos métodos nativos de documentos
File jobs do Windows, execute-json-v1 do Windows e a C ABI versionada nativa do Linux aceitam o mesmo objeto opcional richTextResources em 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 é obrigatório e não vazio para cada recurso JSON; css e contentType são strings opcionais, assim como documentURI e styleSheetTitle; as strings fornecidas não podem conter NUL
Recursos são texto CSS Unicode fornecido pelo host; identificadores URI não solicitam acesso ao filesystem, à rede nem mudanças nos layouts de records de callbacks
A transação de import envolvente preserva o documento anterior dela em recursos malformados, cancelamento, falha de orçamento ou falha de publicação; imports equivalentes exatos retêm o comportamento existente de no-op byte-idêntico
Aceitação reutilizável não GUI
Tests/Linux/ExternalStyleSheets/Run.py checa runs realmente decodificados, comportamento delimitado de falhas, aparências salvas e geometria e pixels independentes de PDFs; o diretório Callbacks dele exercita imports reais FDF/XFDF, bytes de no-op e transações de publicação com falha
Tests/Linux/ExternalStyleSheets/Supplement/Run.py checa conjuntos compartilhados de títulos inline/link, resolução combinada de bases HTML/XML, cada fronteira medida de cancelamento de títulos automáticos e falha de profundidade seguida de retry bem-sucedido
O suplemento aceita um diretório de origem explícito e configuração de compiladores, registra as identidades reais de origem e dependências, e exige um diretório de saída novo para cada execução
Limites e trabalho restante
A contagem de recursos é de no máximo 256, cada URI resolvido de no máximo 4096 code units UTF-16, e cada título ou content type de no máximo 256; texto de stylesheets também obedece MaxCodeUnits, com scans agregados e matching cobrados pelos limites existentes de nós, total de code units, profundidade e cancelamento
Bindings de form data usam MaxValueCodeUnits, MaxTotalCodeUnits, MaxObjects, MaxDepth e o token de cancelamento da operação para os limites correspondentes do decoder
Import de layers e condições supports, layout CSS adicional, tabelas, imagens e loading mais amplo de recursos HTML permanecem trabalho separado
Selectors e folhas de estilo internas · Perfis de media · Opções de form data
Support queries nativas admitem grupos @supports e imports supports() usando o perfil suportado de declarações e seletores, com limites compartilhados e recuperação de cancelamento