Class XfaForm

java.lang.Object
com.itextpdf.forms.xfa.XfaForm

public class XfaForm extends Object
Processes XFA forms.
  • Field Details

    • INIT_SERIALIZER_BUFFER_SIZE

      private static final int INIT_SERIALIZER_BUFFER_SIZE
      See Also:
    • templateNode

      private Node templateNode
    • datasetsSom

      private Xml2SomDatasets datasetsSom
    • datasetsNode

      private Node datasetsNode
    • acroFieldsSom

      private AcroFieldsSearch acroFieldsSom
    • xfaPresent

      private boolean xfaPresent
    • domDocument

      private Document domDocument
    • XFA_DATA_SCHEMA

      public static final String XFA_DATA_SCHEMA
      The URI for the XFA Data schema.
      See Also:
  • Constructor Details

    • XfaForm

      public XfaForm()
      An empty constructor to build on.
    • XfaForm

      public XfaForm(InputStream inputStream)
      Creates an XFA form by the stream containing all xml information
      Parameters:
      inputStream - the InputStream
    • XfaForm

      public XfaForm(Document domDocument)
      Creates an XFA form by the Document containing all xml information
      Parameters:
      domDocument - The document
    • XfaForm

      public XfaForm(PdfDictionary acroFormDictionary)
      A constructor from a PdfDictionary. It is assumed, but not necessary for correct initialization, that the dictionary is actually a PdfAcroForm. An entry in the dictionary with the XFA key must contain correct XFA syntax. If the XFA key is absent, then the constructor essentially does nothing.
      Parameters:
      acroFormDictionary - the dictionary object to initialize from
    • XfaForm

      public XfaForm(PdfDocument pdfDocument)
      A constructor from a PdfDocument. It basically does everything from finding the XFA stream to the XML parsing.
      Parameters:
      pdfDocument - the PdfDocument instance
  • Method Details

    • setXfaForm

      public static void setXfaForm(XfaForm form, PdfDocument pdfDocument) throws IOException
      Sets the XFA key from a byte array. The old XFA is erased.
      Parameters:
      form - the data
      pdfDocument - pdfDocument
      Throws:
      IOException - if any I/O issue occurs
    • setXfaForm

      public static void setXfaForm(XfaForm form, PdfAcroForm acroForm) throws IOException
      Sets the XFA key from a byte array. The old XFA is erased.
      Parameters:
      form - the data
      acroForm - an PdfAcroForm instance
      Throws:
      IOException - if any I/O issue occurs
    • extractXFANodes

      public static Map<String,Node> extractXFANodes(Document domDocument)
      Extracts DOM nodes from an XFA document.
      Parameters:
      domDocument - an XFA file as a DOM document
      Returns:
      a Map of XFA packet names and their associated DOM nodes
    • write

      public void write(PdfDocument document) throws IOException
      Write the XfaForm to the provided PdfDocument.
      Parameters:
      document - the PdfDocument to write the XFA Form to
      Throws:
      IOException - if any I/O issue occurs
    • write

      public void write(PdfAcroForm acroForm) throws IOException
      Write the XfaForm to the provided PdfAcroForm.
      Parameters:
      acroForm - the PdfDocument to write the XFA Form to
      Throws:
      IOException - if any I/O issue occurs
    • setXfaFieldValue

      public void setXfaFieldValue(String name, String value)
      Changes a field value in the XFA form.
      Parameters:
      name - the name of the field to be changed
      value - the new value
    • getXfaFieldValue

      public String getXfaFieldValue(String name)
      Gets the xfa field value.
      Parameters:
      name - the fully qualified field name
      Returns:
      the field value
    • isXfaPresent

      public boolean isXfaPresent()
      Returns true if it is a XFA form.
      Returns:
      true if it is a XFA form
    • findFieldName

      public String findFieldName(String name)
      Finds the complete field name from a partial name.
      Parameters:
      name - the complete or partial name
      Returns:
      the complete name or null if not found
    • findDatasetsName

      public String findDatasetsName(String name)
      Finds the complete SOM name contained in the datasets section from a possibly partial name.
      Parameters:
      name - the complete or partial name
      Returns:
      the complete name or null if not found
    • findDatasetsNode

      public Node findDatasetsNode(String name)
      Finds the Node contained in the datasets section from a possibly partial name.
      Parameters:
      name - the complete or partial name
      Returns:
      the Node or null if not found
    • getNodeText

      public static String getNodeText(Node n)
      Gets all the text contained in the child nodes of this node.
      Parameters:
      n - the Node
      Returns:
      the text found or "" if no text was found
    • getNodeTextByPath

      public String getNodeTextByPath(String path)
      Gets all the text contained in the child nodes of the node under the provided path.
      Parameters:
      path - path to the node to extract text in the format "some.path.to.node"
      Returns:
      text found under the provided path or null if node or text wasn't found
    • setNodeText

      public void setNodeText(Node n, String text)
      Sets the text of this node. All the child's node are deleted and a new child text node is created.
      Parameters:
      n - the Node to add the text to
      text - the text to add
    • getDomDocument

      public Document getDomDocument()
      Gets the top level DOM document.
      Returns:
      the top level DOM document
    • setDomDocument

      public void setDomDocument(Document domDocument)
      Sets the top DOM document.
      Parameters:
      domDocument - the top DOM document
    • getDatasetsNode

      public Node getDatasetsNode()
      Gets the Node that corresponds to the datasets part.
      Returns:
      the Node that corresponds to the datasets part
    • fillXfaForm

      public void fillXfaForm(File file) throws IOException
      Replaces the XFA data under datasets/data. Accepts a file object to fill this object with XFA data. The resulting DOM document may be modified.
      Parameters:
      file - the File
      Throws:
      IOException - if any I/O issue occurs on the InputSource
    • fillXfaForm

      public void fillXfaForm(File file, boolean readOnly) throws IOException
      Replaces the XFA data under datasets/data. Accepts a file object to fill this object with XFA data.
      Parameters:
      file - the File
      readOnly - whether or not the resulting DOM document may be modified
      Throws:
      IOException - if any I/O issue occurs on the InputSource
    • fillXfaForm

      public void fillXfaForm(InputStream is) throws IOException
      Replaces the XFA data under datasets/data. Accepts an InputStream to fill this object with XFA data. The resulting DOM document may be modified.
      Parameters:
      is - the InputStream
      Throws:
      IOException - if any I/O issue occurs on the InputSource
    • fillXfaForm

      public void fillXfaForm(InputStream is, boolean readOnly) throws IOException
      Replaces the XFA data under datasets/data. Accepts an InputStream to fill this object with XFA data.
      Parameters:
      is - the InputStream
      readOnly - whether or not the resulting DOM document may be modified
      Throws:
      IOException - if any I/O issue occurs on the InputSource
    • fillXfaForm

      public void fillXfaForm(InputSource is) throws IOException
      Replaces the XFA data under datasets/data. Accepts a SAX input source to fill this object with XFA data. The resulting DOM document may be modified.
      Parameters:
      is - the SAX input source
      Throws:
      IOException - if any I/O issue occurs on the InputSource
    • fillXfaForm

      public void fillXfaForm(InputSource is, boolean readOnly) throws IOException
      Replaces the XFA data under datasets/data. Accepts a SAX input source to fill this object with XFA data.
      Parameters:
      is - the SAX input source
      readOnly - whether or not the resulting DOM document may be modified
      Throws:
      IOException - if any I/O issue occurs on the InputSource
    • fillXfaForm

      public void fillXfaForm(Node node)
      Replaces the XFA data under datasets/data.
      Parameters:
      node - the input Node
    • fillXfaForm

      public void fillXfaForm(Node node, boolean readOnly)
      Replaces the XFA data under datasets/data.
      Parameters:
      node - the input Node
      readOnly - whether or not the resulting DOM document may be modified
    • getNodeText

      private static String getNodeText(Node n, String name)
    • getXfaObject

      private static PdfObject getXfaObject(PdfDocument pdfDocument)
      Return the XFA Object, could be an array, could be a Stream. Returns null if no XFA Object is present.
      Parameters:
      pdfDocument - a PdfDocument instance
      Returns:
      the XFA object
    • getXfaObject

      private static PdfObject getXfaObject(PdfAcroForm acroForm)
      Return the XFA Object, could be an array, could be a Stream. Returns null if no XFA Object is present.
      Parameters:
      acroForm - a PdfDocument instance
      Returns:
      the XFA object
    • serializeDocument

      private static byte[] serializeDocument(Node n) throws IOException
      Serializes a XML document to a byte array.
      Parameters:
      n - the XML document
      Returns:
      the serialized XML document
      Throws:
      IOException - if any I/O issue occurs
    • initXfaForm

      private void initXfaForm(PdfObject xfa) throws IOException, ParserConfigurationException, SAXException
      Throws:
      IOException
      ParserConfigurationException
      SAXException
    • initXfaForm

      private void initXfaForm(InputStream inputStream) throws IOException, SAXException
      Throws:
      IOException
      SAXException
    • extractNodes

      private void extractNodes()
      Extracts the nodes from the domDocument.
    • createDatasetsNode

      private void createDatasetsNode(Node n)
      Some XFA forms don't have a datasets node. If this is the case, we have to add one.
    • getFirstElementNode

      private Node getFirstElementNode(Node src)
    • findDataNode

      private Node findDataNode(Node datasetsNode)