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