Folhas de estilo externas nativas de rich text
O descodificador nativo de XHTML aplica recursos CSS fornecidos pelo caller referenciados por elementos link de XHTML e regras @import de CSS a runs reais de rich text, valores rich guardados 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 path merging de RFC 3986 e remoção de segmentos de pontos; query strings permanecem parte da identidade do recurso, fragments não, as letras de scheme e host são normalizadas enquanto a informação de utilizador retém a sua caixa, e as letras hexadecimais de percent-escapes comparam-se sem caixa
Cada folha importada resolve importações adicionais contra o seu próprio URI e tem um ambiente de namespaces CSS independente; importar uma folha não faz a sua declaração @namespace passar para o pai
As importações aceitam strings quotados e tokens url, incluindo escapes de CSS, antes de regras ordinárias ou declarações de namespaces; o avaliador de media queries print/screen existente governa as medias de links e as condições de importações
Declarações importadas entram na cascata na sua posição real de origem com importance e specificity normais; uma referência cíclica é ignorada apenas enquanto aquele recurso estiver ativo, por isso referências repetidas posteriores podem voltar a contribuir
Recursos em falta, referências autorais inválidas e tipos de conteúdo que não são CSS não contribuem declarações; coleções de recursos fornecidas pelo caller inválidas levantam EHPDFHeadlessRichTextCodecError
Referências XHTML e conjuntos selecionados
Tokens de relação de folhas de estilos comparam-se sem caixa ASCII; links desativados são ignorados, e os atributos media e type controlam se uma folha de estilos referenciada participa
Elementos style inline e folhas linkadas partilham os mesmos conjuntos de títulos case-sensitive; folhas persistent sem título permanecem ativas
Sem StyleSheetTitle explícito, o primeiro estilo inline titulado elegível ou link não alternativo seleciona o conjunto preferido; o descodificador determina esse título antes de recolher declarações, por isso uma alternativa anterior com o título selecionado participa na sua posição original de cascata
Um StyleSheetTitle explícito seleciona estilos inline e folhas linkadas tituladas correspondentes, incluindo alternativos; um título sem folha correspondente deixa apenas folhas persistent ativas
A análise de título preferido aceita um type vazio ou text/css e ignora links desativados ou alternativos; a disponibilidade de recursos e as condições de media não mudam o título escolhido, e as declarações continuam a obedecer às suas próprias verificações de media, tipo e recurso
Resolução de base HTML e XML
O primeiro elemento base de XHTML com href dentro de um head XHTML fornece a base do documento ao resolver o seu href contra DocumentURI; xml:base no elemento base ou nos seus antecessores não altera esse lookup
O descodificador aplica depois o xml:base de cada antecessor uma vez, partindo dessa base do documento, para resolver referências de links e importações inline; uma folha linkada ou importada resolve as suas próprias importações contra o URI do seu recurso
Por exemplo, DocumentURI=https://example.test/docs/form.xhtml, root xml:base="a/", head base href="b/" e link href="main.css" resolvem para https://example.test/docs/b/a/main.css
Um primeiro base href vazio usa o URI de fallback do documento; um primeiro base href inválido também retém esse fallback e consome a posição de primeira base, por isso elementos base posteriores não o substituem
Esta ordenação define o perfil combinado HTML/XML do descodificador nativo; o XML Base não define por si como um mecanismo de base HTML separado deve ser combinado com ele
Dados de formulários e operações JSON
Defina RichTextDocumentURI, RichTextStyleSheetTitle e RichTextStyleSheets no THPDFHeadlessFormDataOptions ao importar FDF RV ou value-richtext de XFDF através de métodos nativos de documentos
File jobs de Windows, execute-json-v1 de Windows e a ABI C nativa versionada de Linux aceitam o mesmo objeto opcional richTextResources no 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, tal como documentURI e styleSheetTitle; strings fornecidas não podem conter NUL
Os recursos são texto CSS Unicode fornecido pelo host; identificadores URI não pedem acesso ao filesystem, acesso à rede nem alterações a layouts de records de callbacks
A transação de importação envolvente preserva o seu documento anterior com recursos malformados, cancelamento, falha de budget ou falha de publicação; importações exatamente equivalentes retêm o comportamento no-op existente com bytes idênticos
Aceitação reutilizável sem GUI
Tests/Linux/ExternalStyleSheets/Run.py verifica runs descodificados reais, comportamento delimitado de falha, aparências guardadas e geometria e píxeis de PDF independentes; o seu diretório Callbacks exerce importações FDF/XFDF reais, bytes no-op e transações de publicação falhada
Tests/Linux/ExternalStyleSheets/Supplement/Run.py verifica conjuntos de títulos partilhados inline/link, resolução de base combinada HTML/XML, cada fronteira medida de cancelamento de título automático e falha de profundidade seguida de retry bem-sucedido
O supplement aceita um diretório fonte explícito e configuração de compilador, regista as identidades reais de fonte e dependências, e exige um novo diretório de saída por cada execução
Limites e trabalho restante
A contagem de recursos é de no máximo 256, cada URI resolvido de no máximo 4096 unidades de código UTF-16, e cada título ou tipo de conteúdo de no máximo 256; o texto de folhas de estilos também obedece a MaxCodeUnits, com scans agregados e matching cobrados nos limites existentes de nós, unidades de código totais, profundidade e cancelamento
Bindings de dados de formulários usam MaxValueCodeUnits, MaxTotalCodeUnits, MaxObjects, MaxDepth e o token de cancelamento da operação para os limites correspondentes do descodificador
Import layers, layout adicional de CSS, tabelas, imagens e carregamento mais amplo de recursos HTML continuam a ser trabalho separado
Seletores e folhas de estilo internas · Perfis de media · Opções de dados de formulários
Support queries nativas admitem grupos @supports e importações supports() usando o perfil suportado de declarações e seletores, com limites partilhados e recuperação de cancelamento