XFA パケット DOM

TXFAPacketDOM は完全な XDP ストリームまたは順序付き PDF /XFA パケット配列を読み込み、パケットルートとバウンド付きローカル名パス照会を公開し、要素、テキスト、CDATA、属性、パケット追加、パケット削除、パケット名前変更の編集をサポートします

可逆な未変更パケット

読み込まれた各ストリームまたはパケットは元のバイトと構造フィンガープリントを保持します。シリアル化は DOM が未変更の場合にそれらの正確なバイトを返し、パケット配列の編集は変更されたパケットのみを書き換え、変更されていないすべての兄弟のバイトを保持します

正準な変更済み出力

変更されたツリーは UTF-8 XML、決定論的な名前空間と属性の順序、修飾要素名、XML エンティティエスケープ、埋め込み ]]> の安全な CDATA 分割、自己終了する空要素、およびソース配列からのパケット順序を使用します

正準出力は語彙の細部ではなく DOM コンテンツを表すため、コメント、処理命令、ソースのインデント、元の XML 宣言、ソースの DOCTYPE は編集後に再現されません。内部エンティティ値はテキストとして展開され、外部エンティティは未解決のままです

照会と編集

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;

先頭の // はバウンド付き子孫照会を実行し、スラッシュ区切りのセグメントは直接の子を選択します。* は任意の要素に一致し、ゼロベースの [N] 接尾辞は 1 つの一致を選択します

パケット配列の公開

SerializePacketArray は、順序付きの TXFAPacketData レコードを返します。各レコードを THotPDF.AddXFAPacket に渡すか、単一ストリーム形式の場合は SerializeXDPStream を THotPDF.SetXFADocument と組み合わせて使用します

予算

TXFADOMLimits.Default は、入力と出力の合計バイト数、パケット数、ノード数、深さ、ノードあたりの属性数、属性とテキストの合計バイト数、MaxQueryResults に上限を設けます。パース、変更の検証、クエリ、フィンガープリント、シリアライズは、境界を超えると EHPDFXFAError で失敗します

TXFAPacketDOM、TXFANode、TXFADOMLimits を参照してください