Form Submission

Form submission is an action performed on a form element in a PDF document, and it’s usually triggered by a submit button. It is a method of taking user input from the form described in the PDF and sending it as data to a given location. This data can be all the form fields in the form or just a subset of them.

For more details about PDF actions, see our guide of the same name.

Submission Method

It is possible to handle the click of a form submit button in PSPDFKit in order to implement your own submission provider. This is done with the addDocumentActionListener provided in PdfFragment. The following example shows how it is possible to filter for a specific action. SubmitFormAction can provide the form fields, the URI, and the form flags given by the PDF document:

pdfFragment.addDocumentActionListener { action ->
    if (action.type == ActionType.SUBMIT_FORM) {
        val submitFormAction = action as SubmitFormAction
        // Do something here.

        // Return `true` to show the action has been handled.
        return@addDocumentActionListener true
    return@addDocumentActionListener false
pdfFragment.addDocumentActionListener(action -> {
    if (action.getType() == ActionType.SUBMIT_FORM) {
        SubmitFormAction submitFormAction = (SubmitFormAction) action;
        // Do something here.

        return true;
    return false;


The PDF specification defines a variety of formats for forms submission. The format that should be used is provided by flags defined on SubmitFormAction.


The Forms Data Format (FDF) is the default format for form submission, and it is described as a subset of PDF. The structure of FDF is essentially the same as that of a PDF document, but with only the form elements present. This format can be used to import data back into a PDF at a later date. Adobe also provides an FDF Toolkit, which can be used to parse the FDF format on the server side or elsewhere.

The following shows an example of the FDF format. filePath will reflect the path where the file was sent from. Here you can also see Fields with the given key and value, TextField1 and TestText, respectively:

1 0 obj
	/FDF <<
		/F <<
		/Fields [<</T(TextField1)/V(TestText)>>]

<</Root 1 0 R>>


The HTML format can be chosen to create a GET or POST request to supply to a particular server. The form fields will be converted to key-value pairs, with the name being the ID of the form field and the value being the user input. This format adheres to the HTML 4.01 Specification.

The body of the HTML request will hold the values sent from the form. The following shows how two form fields will be generated — note that it is delimited by an ampersand. This can be parsed by most web server technologies with little work:



XFDF is similar to the FDF, but it is represented by an XML-like format. This is a standard provided by Adobe and is therefore supported by Adobe Acrobat and various other third-party products. See our XFDF Overview guide for more details.

XFDF will output a file with XML notation. It will hold a collection of fields, each of which can have a collection of values. Here you can see that the form field TextField1 has a value element of TestText:

<xfdf xml:space="preserve" xmlns="">
		<field name="TextField1">


It is also possible to submit an entire PDF document. This option is useful when the recipient has no reference to the original document. As the entire PDF is being transmitted with this format, it is a highly wasteful process, especially with complex and large documents.