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