Working with Form Fields

This article demonstrates how to load, edit, and read form fields in a Word document using GroupDocs.Editor for Java. We will go through the process of opening a document, retrieving form fields, and processing them based on their types.

Step-by-Step Guide

  1. Get the Path to the Input File

  2. Create a InputStream from the Path

    Create a InputStream from the input file path.

    InputStream fs = new FileInputStream(inputFilePath);
    {
        // Further code will be placed here
    }
    
  3. Create Load Options

    Initialize the WordProcessingLoadOptions for loading the document. If your document is password-protected, specify the password. In this example, the document is unprotected, so the password will be ignored.

    WordProcessingLoadOptions loadOptions = new WordProcessingLoadOptions();
    loadOptions.setPassword("some_password_to_open_a_document)";
    
  4. Load the Document into the Editor Instance

    Use the Editor class to load the document with the specified load options.

    Editor editor = new Editor(fs, loadOptions);
    {
        // Further code will be placed here
    }
    
  5. Retrieve and Process the Form Fields

    Obtain the FormFieldManager instance from the Editor. Use it to read the FormFieldCollection and process each form field based on its type.

         FormFieldManager fieldManager = editor.getFormFieldManager();
         FormFieldCollection collection = fieldManager.getFormFieldCollection();
         for (IFormField formField : collection)
         {
             switch (formField.getType())
             {
                 case FormFieldType.Text:
                     TextFormField textFormField = collection.getFormField(formField.getName(),TextFormField.class);
                     System.out.println("TextFormField detected, name: "+formField.getName()+", value: "+ textFormField.getValue());
                     break;
                 case FormFieldType.CheckBox:
                     CheckBoxForm checkBoxFormField = collection.getFormField(formField.getName(),CheckBoxForm.class);
                     System.out.println("CheckBoxForm detected, name: "+formField.getName()+", value: "+ checkBoxFormField.getValue());
                     break;
                 case FormFieldType.Date:
                     DateFormField dateFormField = collection.getFormField(formField.getName(),DateFormField.class);
                     System.out.println("DateFormField detected, name: "+formField.getName()+", value: "+ dateFormField.getValue());
                     break;
                 case FormFieldType.Number:
                     NumberFormField numberFormField = collection.getFormField(formField.getName(),NumberFormField.class);
                     System.out.println("NumberFormField detected, name: "+formField.getName()+", value: "+ numberFormField.getValue());
                     break;
                 case FormFieldType.DropDown:
                     DropDownFormField dropDownFormField = collection.getFormField(formField.getName(),DropDownFormField.class);
                     System.out.println("DropDownFormField detected, name: "+formField.getName()+", value selected: "+ dropDownFormField.getValue().get(dropDownFormField.getSelectedIndex()));
                     break;
             }
         }
    

Complete Example Code

Below is the complete example code demonstrating the entire process:

/**
  * This example demonstrates loading a FormFieldCollection and reading form fields.
  */
public class LegacyFormFieldCollection {
   /**
    * Runs the example to demonstrate loading, editing, and reading form fields from a document.
    */
    public static void run() throws Exception
    {
        // 1. Get a path to the input file (or stream with file content).
        // In this case, it is a sample Docx with form fields.
        String inputFilePath = Constants.SampleLegacyFormFields_docx;

        // 2. Create a stream from this path
        InputStream fs = new FileInputStream(inputFilePath);

        // 3. Create load options for this document
        WordProcessingLoadOptions loadOptions = new WordProcessingLoadOptions();
        // 3.1. In case the input document is password-protected, we can specify a password for its opening...
        loadOptions.setPassword("some_password_to_open_a_document");
        // 3.2. ...but, because the document is unprotected, this password will be ignored

        // 4. Load the document with options to the Editor instance
        Editor editor = new Editor(fs, loadOptions);

        // 4.1. Read the FormFieldManager instance
        FormFieldManager fieldManager = editor.getFormFieldManager();
        // 4.2. Read the FormFieldCollection in the document
        FormFieldCollection collection = fieldManager.getFormFieldCollection();
        for (IFormField formField : collection)
        {
            switch (formField.getType())
            {
                case FormFieldType.Text:
                    TextFormField textFormField = collection.getFormField(formField.getName(),TextFormField.class);
                    System.out.println("TextFormField detected, name: "+formField.getName()+", value: "+ textFormField.getValue());
                    break;
                case FormFieldType.CheckBox:
                    CheckBoxForm checkBoxFormField = collection.getFormField(formField.getName(),CheckBoxForm.class);
                    System.out.println("CheckBoxForm detected, name: "+formField.getName()+", value: "+ checkBoxFormField.getValue());
                    break;
                case FormFieldType.Date:
                    DateFormField dateFormField = collection.getFormField(formField.getName(),DateFormField.class);
                    System.out.println("DateFormField detected, name: "+formField.getName()+", value: "+ dateFormField.getValue());
                    break;
                case FormFieldType.Number:
                    NumberFormField numberFormField = collection.getFormField(formField.getName(),NumberFormField.class);
                    System.out.println("NumberFormField detected, name: "+formField.getName()+", value: "+ numberFormField.getValue());
                    break;
                case FormFieldType.DropDown:
                    DropDownFormField dropDownFormField = collection.getFormField(formField.getName(),DropDownFormField.class);
                    System.out.println("DropDownFormField detected, name: "+formField.getName()+", value selected: "+ dropDownFormField.getValue().get(dropDownFormField.getSelectedIndex()));
                    break;
            }
        }

        System.out.println("ReadFormFieldCollection routine has successfully finished");
    }
}

Conclusion

This guide demonstrates how to work with form fields in Word documents using GroupDocs.Editor for Java. By following these steps, you can load a document, retrieve form fields, and process them based on their types. This functionality is essential for applications that require manipulation and extraction of form field data from documents.

Close
Loading

Analyzing your prompt, please hold on...

An error occurred while retrieving the results. Please refresh the page and try again.