/**
* A constructor from a <CODE>PdfReader</CODE>. It basically does everything
* from finding the XFA stream to the XML parsing.
* @param reader the reader
* @throws java.io.IOException on error
* @throws javax.xml.parsers.ParserConfigurationException on error
* @throws org.xml.sax.SAXException on error
*/
public XfaForm(PdfReader reader) {
this.reader = reader;
PdfObject xfa = GetXfaObject(reader);
if (xfa == null) {
xfaPresent = false;
return;
}
xfaPresent = true;
MemoryStream bout = new MemoryStream();
if (xfa.IsArray()) {
PdfArray ar = (PdfArray)xfa;
for (int k = 1; k < ar.Size; k += 2) {
PdfObject ob = ar.GetDirectObject(k);
if (ob is PRStream) {
byte[] b = PdfReader.GetStreamBytes((PRStream)ob);
bout.Write(b, 0, b.Length);
}
}
}
else if (xfa is PRStream) {
byte[] b = PdfReader.GetStreamBytes((PRStream)xfa);
bout.Write(b, 0, b.Length);
}
bout.Seek(0, SeekOrigin.Begin);
XmlTextReader xtr = new XmlTextReader(bout);
domDocument = new XmlDocument();
domDocument.PreserveWhitespace = true;
domDocument.Load(xtr);
ExtractNodes();
}