DOM de pacotes XFA
TXFAPacketDOM carrega um fluxo XDP completo ou uma matriz ordenada de pacotes PDF /XFA, expõe raízes de pacotes e consultas limitadas de caminho por nome local, e suporta edições de elemento, texto, CDATA, atributo, adição de pacote, remoção de pacote e renomeação de pacote
Pacotes intocados sem perdas
Cada fluxo ou pacote carregado mantém seus bytes originais e uma impressão digital estrutural; a serialização retorna esses bytes exatos quando o DOM está intocado, e uma edição de matriz de pacotes reescreve apenas o pacote alterado preservando byte a byte cada irmão inalterado
Saída canônica modificada
Árvores modificadas usam XML UTF-8, ordem determinística de namespace e atributos, nomes de elementos qualificados, escape de entidades XML, divisão segura de CDATA para ]]> embutido, elementos vazios autofechados e ordem de pacotes da matriz de origem
A saída canônica representa o conteúdo do DOM em vez de detalhes lexicais, portanto comentários, instruções de processamento, indentação da origem, a declaração XML original e um DOCTYPE de origem não são reproduzidos após uma edição; valores de entidades internas são expandidos como texto e entidades externas permanecem não resolvidas
Consultas e edições
var
DOM: TXFAPacketDOM;
Nodes: TArray<TXFANode>;
XDP: TBytes;
begin
DOM := TXFAPacketDOM.Create;
try
DOM.LoadXDPStream(SourceBytes);
Nodes := DOM.SelectNodes('datasets', '//customer/name');
if Length(Nodes) > 0 then
Nodes[0].SetText('Updated & verified', True);
XDP := DOM.SerializeXDPStream;
PDF.SetXFADocument(XDP);
finally
DOM.Free;
end;
end;
Um // inicial executa uma consulta limitada de descendentes, enquanto segmentos separados por barras selecionam filhos diretos; * corresponde a qualquer elemento e um sufixo [N] baseado em zero seleciona uma correspondência
Publicação de matriz de pacotes
SerializePacketArray retorna registros ordenados TXFAPacketData; passe cada registro a THotPDF.AddXFAPacket, ou use SerializeXDPStream com THotPDF.SetXFADocument para a forma de fluxo único
Orçamentos
TXFADOMLimits.Default limita bytes agregados de entrada e saída, contagem de pacotes, contagem de nós, profundidade, atributos por nó, bytes agregados de atributos e texto, e MaxQueryResults; análise, validação de mutação, consulta, impressão digital e serialização falham com EHPDFXFAError quando um limite é cruzado
Veja TXFAPacketDOM, TXFANode e TXFADOMLimits