XFA Packet DOM
TXFAPacketDOM carga un stream XDP completo o un array ordenado de packets /XFA del PDF, expone las raíces de los packets y consultas de paths por local name acotadas, y soporta ediciones de elementos, texto, CDATA, atributos, agregar packet, eliminar packet y renombrar packet
Packets intactos sin pérdida
Cada stream o packet cargado conserva sus bytes originales y un fingerprint estructural; la serialización devuelve esos bytes exactos cuando el DOM está intacto, y una edición del packet array reescribe solo el packet cambiado preservando byte a byte cada hermano sin cambios
Salida canónica modificada
Los árboles modificados usan XML UTF-8, orden determinista de namespaces y atributos, nombres de elementos calificados, escape de entidades XML, división segura de CDATA para ]]> incrustado, elementos vacíos self-closing y el orden de packets del array fuente
La salida canónica representa el contenido del DOM y no la trivia léxica, así que los comentarios, las processing instructions, la indentación de la fuente, la declaración XML original y un DOCTYPE de la fuente no se reproducen después de una edición; los valores de entidades internas se expanden como texto y las entidades externas quedan sin resolver
Consultas y ediciones
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;
Un // inicial hace una consulta acotada de descendientes, mientras que los segmentos separados por slash seleccionan hijos directos; * coincide con cualquier elemento y un sufijo [N] basado en cero selecciona una coincidencia
Publicación del packet array
SerializePacketArray devuelve records TXFAPacketData ordenados; pase cada record a THotPDF.AddXFAPacket, o use SerializeXDPStream con THotPDF.SetXFADocument para la forma de stream único
Presupuestos
TXFADOMLimits.Default acota los bytes agregados de entrada y salida, el conteo de packets, el conteo de nodos, la profundidad, los atributos por nodo, los bytes agregados de atributos y texto, y MaxQueryResults; el parseo, la validación de mutaciones, las consultas, el fingerprinting y la serialización fallan con EHPDFXFAError cuando se cruza una frontera
Vea TXFAPacketDOM, TXFANode y TXFADOMLimits