Q: How can I submit FDF, XFDF or HTML data to a server and receive a response back?

A: Here is a sample service that receive a PDF file and then responds with an FDF file.

package com.qoppa.jaxrs.service.test;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
public class FormSubmitService
	 * Post some form data and return fdf.
	 * @param documentAction
	 * @return
	public Response post(InputStream formData)
			copyFile(formData, "C:/test/formdata.xfdf");
		catch (IOException e)
			// TODO Auto-generated catch block
		return getFileResponse(new File("C:/test/response.fdf"), "response.fdf");	
	private void copyFile(InputStream file, String to) throws IOException
		// save the file directly so we don't have to worry about passwords
		FileOutputStream os = new FileOutputStream(to);
		byte[] buffer = new byte[1024];
		int bytesRead;
		while ((bytesRead = file.read(buffer)) != -1)
			os.write(buffer, 0, bytesRead);
	private Response getFileResponse(File file, String fileName)
		ResponseBuilder response = Response.ok((Object) file);
		response.header("Content-Disposition", "attachment; filename=" + fileName);
		return response.build();

Our PDF components jPDFNotes and jPDFEditor are able to interpret this response and import back the fields data from the FDF file (you’ll see the field values change).

Here is a pdf_submit_sample.pdf to test this form submission that contains a few buttons with a Javascript action calling this.submitForm with the different cSubmitAs parameters.