DOM de pacote XFA
TXFAPacketDOM carrega um stream XDP completo ou um array ordenado de pacotes /XFA de PDF, expõe as raízes dos pacotes e consultas de caminho por nome local com limites, e suporta edições de elementos, texto, CDATA, atributos, bem como adição, remoção e mudança de nome de pacotes
Lossless untouched packets
Cada stream ou pacote carregado guarda os seus bytes originais e uma impressão digital estrutural; a serialização devolve exatamente esses bytes quando o DOM não foi tocado, e uma edição do array de pacotes reescreve apenas o pacote alterado, preservando byte a byte todos os irmãos inalterados
Canonical modified output
As árvores modificadas usam XML UTF-8, ordem determinista de namespaces e atributos, nomes de elementos qualificados, escape de entidades XML, divisão segura de CDATA para ]]> incorporado, elementos vazios com fecho automático e a ordem dos pacotes do array de origem
A saída canónica representa o conteúdo do DOM e não os detalhes lexicais, pelo que comentários, instruções de processamento, indentação da origem, a declaração XML original e um DOCTYPE da origem não são repostos após uma edição; os valores de entidades internas são expandidos como texto e as entidades externas permanecem por resolver
Queries and edits
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 de descendentes com limites, enquanto os segmentos separados por barras selecionam filhos diretos; * corresponde a qualquer elemento e um sufixo [N] com base zero seleciona uma correspondência
Packet-array publication
SerializePacketArray returns ordered TXFAPacketData records; pass each record to THotPDF.AddXFAPacket, or use SerializeXDPStream com THotPDF.SetXFADocument for the single-stream form
Budgets
TXFADOMLimits.Default limita os bytes agregados de entrada e saída, o número de pacotes, o número de nós, a profundidade, os atributos por nó, os bytes agregados de atributos e texto e MaxQueryResults; a análise, a validação de mutações, as consultas, a impressão digital e a serialização falham com EHPDFXFAError quando um limite é ultrapassado
Ver TXFAPacketDOM, TXFANode, and TXFADOMLimits