1// Example code for extracting an xml string from the XFA form,
2// and putting it back after an update.
3
4PDFDoc doc = new PDFDoc(filename);
5
6//get the acroform dictionary
7Obj acro_form = doc.GetAcroForm();
8
9// This PDF document contains XFA forms...
10Obj obj = acro_form.FindObj("XFA");
11
12//We will store the XML string in this byte array
13byte[] buff = new byte[4000];
14byte byteRawPre, byteDecodePre, byteRawPost, byteDecodePost;
15
16pdftron.Filters.Filter filter;
17pdftron.Filters.FilterReader fr;
18
19//The XFA entry in the PDF is an Array, so in this case,
20//we want to read the xml string stored at the 5th index of the Array
21filter = obj.GetAt(5).GetDecodedStream();
22fr = new pdftron.Filters.FilterReader(filter);
23fr.Read(buff);
24//at this point, the xml string should be stored inside buff,
25//and you can make whatever modifications you want
26
27//Modify XML String HERE
28
29//We create an indirect stream object, which will contain our
30// newly modified XML string
31Obj new_xmp_stm = doc.CreateIndirectStream(buff);
32
33//The swap method allows us to switch all indirect references to the old stream,
34// to point to our newly created stream.
35doc.GetSDFDoc().Swap(
36 new_xmp_stm.GetObjNum(),
37 acro_form.Get("XFA").Value().GetAt(5).GetObjNum()
38);
39
40doc.Save(output_filename, SDFDoc.SaveOptions.e_linearized);
41doc.Close();