Quick Start (EJB mode): Creating PDF Documents with submitted XML data using the Java API

The following Java code example handles form data that is submitted as XML. Form data is retrieved from the Form submission using the Forms API and sent to the Output service. The form data and a form design are used to create a non-interactive PDF document. The non-interactive PDF document is stored in a Content Services (deprecated) node named /Company Home/Test Directory. The name of the form is dynamically created. That is, the user’s first and last name are used to name the PDF file. The resource identifier of the new content is written out to the client web browser. (See Creating PDF Documents with Submitted XML Data.)

/* 
    * This Java Quick Start uses the following JAR files 
    * 1. adobe-forms-client.jar 
    * 2. adobe-livecycle-client.jar 
    * 3. adobe-usermanager-client.jar 
    * 4. adobe-output-client.jar 
    * 5. adobe-contentservices-client.jar 
    *  
    *  (Because Forms quick starts are implemented as Java servlets, it is  
    *  not necessary to include J2EE specific JAR files - the Java project 
    *  that contains this quick start is exported as a WAR file which 
    *  is deployed to the J2EE application server) 
    *   
    *  These JAR files are located in the following path: 
    * <install directory>/sdk/client-libs/common 
    *  
    * For complete details about the location of these JAR files,  
    * see "Including LiveCycle library files" in Programming with LiveCycle 
    */ 
import java.io.IOException; 
import javax.servlet.Servlet; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
 
import com.adobe.livecycle.contentservices.client.CRCResult; 
import com.adobe.livecycle.contentservices.client.impl.DocumentManagementServiceClientImpl; 
import com.adobe.livecycle.contentservices.client.impl.UpdateVersionType; 
import com.adobe.livecycle.formsservice.client.*; 
import com.adobe.livecycle.output.client.OutputClient; 
import com.adobe.livecycle.output.client.OutputResult; 
import com.adobe.livecycle.output.client.PDFOutputOptionsSpec; 
import com.adobe.livecycle.output.client.TransformationFormat; 
 
import java.util.*; 
import java.io.DataInputStream; 
import java.io.File; 
import java.io.InputStream; 
import java.io.PrintWriter; 
import com.adobe.idp.Document; 
import com.adobe.idp.dsc.InvocationRequest; 
import com.adobe.idp.dsc.InvocationResponse; 
import com.adobe.idp.dsc.clientsdk.ServiceClient; 
import com.adobe.idp.dsc.clientsdk.ServiceClientFactory; 
import com.adobe.idp.dsc.clientsdk.ServiceClientFactoryProperties; 
 
//Import DOM libraries 
import org.w3c.dom.NodeList; 
import org.w3c.dom.Node; 
import javax.xml.parsers.*; 
 
public class HandleDataSendToOutput extends HttpServlet implements Servlet { 
 
     
    public void doGet(HttpServletRequest req, HttpServletResponse resp) 
        throws ServletException, IOException { 
                doPost(req,resp); 
        } 
     
    public void doPost(HttpServletRequest req, HttpServletResponse resp) 
        throws ServletException, IOException { 
             
        try{ 
            PrintWriter pp = resp.getWriter();      
             
            //Set connection properties required to invoke LiveCycle                                 
            Properties connectionProps = new Properties(); 
            connectionProps.setProperty(ServiceClientFactoryProperties.DSC_DEFAULT_EJB_ENDPOINT, "jnp://localhost:1099"); 
            connectionProps.setProperty(ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL,ServiceClientFactoryProperties.DSC_EJB_PROTOCOL);           
            connectionProps.setProperty(ServiceClientFactoryProperties.DSC_SERVER_TYPE, "JBoss"); 
            connectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_USERNAME, "administrator"); 
            connectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_PASSWORD, "password"); 
             
            //Create a ServiceClientFactory object 
            ServiceClientFactory myFactory = ServiceClientFactory.createInstance(connectionProps); 
                 
            //Create a FormsServiceClient object 
            FormsServiceClient formsClient = new FormsServiceClient(myFactory);  
         
            //Get Form data to pass to the processFormSubmission method 
            Document formData = new Document(req.getInputStream());  
                         
            //Set run-time options 
             RenderOptionsSpec processSpec = new RenderOptionsSpec();  
             processSpec.setLocale("en_US"); 
             
            //Invoke the processFormSubmission method 
            FormsResult formOut = formsClient.processFormSubmission(formData, 
            "CONTENT_TYPE=text/xml", 
            "", 
            processSpec); 
             
            //Get the processing state 
            short processState = formOut.getAction(); 
                         
            //Determine if the form data is ready to be processed 
            //This code example checks only for submitted data (value is 0) 
            if (processState == 0)  
            { 
              //Determine the content type of the data 
              String myContentType = formOut.getContentType(); 
             
              if (myContentType.equals("application/vnd.adobe.xdp+xml"))    { 
             
                //Get the form data 
                Document formOutput = formOut.getOutputContent();  
                InputStream formInputStream = new DataInputStream(formOutput.getInputStream());  
                 
                //Create DocumentBuilderFactory and DocumentBuilder objects 
                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
                DocumentBuilder builder = factory.newDocumentBuilder(); 
                org.w3c.dom.Document myDOM = builder.parse(formInputStream); 
                                         
                //Call for each field in the form 
                String Amount = getNodeText("mortgageAmount", myDOM); 
                String myLastName =  getNodeText("lastName", myDOM);  
                String myFirstName = getNodeText("firstName", myDOM); 
                 
                //Write the form data to the web browser 
                pp.println("<p> The form data is :<br><br>" + 
                        "<li> The mortgage amount is "+ Amount+"" + 
                        "<li> Last name is "+ myLastName+"" + 
                        "<li> First name is "+ myFirstName+"")    ; 
                 
                 
                //Create a non-interactive PDF document by invoking the Output service 
                Document myPDFform = GeneratePDFDocument(myFactory, formOutput); 
                 
                //Create the name of the PDF file to store 
                String pdfName = "Loan_"+myLastName+"_"+myFirstName+".pdf" ; 
                String userName = myFirstName+" "+myLastName ;  
                 
                //Store the PDF form into Content Services (deprecated) 
                String resourceID = StorePDFDocument(myFactory, myPDFform, pdfName,userName); 
                pp.println("<p> The pdf document was store in :<br><br>" + 
                        "<li> /Company home "+ 
                        "<li> The identifier value of the new resource is "+ resourceID+""); 
                  } 
            } 
        } 
        catch (Exception e) { 
             e.printStackTrace(); 
          } 
    } 
         
     
    //Store the PDF document in /Company Home/Test Directory using the  
    //LiveCycle ES Content Service API 
    private String StorePDFDocument(ServiceClientFactory myFactory, com.adobe.idp.Document pdfDoc, String formName, String userName) 
    { 
        try 
        { 
            //Create a DocumentManagementServiceClientImpl object 
            DocumentManagementServiceClientImpl    docManager = new DocumentManagementServiceClientImpl(myFactory); 
             
            //Specify the store and node name 
            String storeName ="SpacesStore";  
            String nodeName = "/Company Home/Test Directory"; 
             
            //Create a MAP instance to store attributes 
            Map<String,Object> inputs = new HashMap<String,Object>(); 
             
            //Specify attributes that belong to the new content 
            String creator = "{http://www.alfresco.org/model/content/1.0}creator"; 
            String description = "{http://www.alfresco.org/model/content/1.0}description";  
             
            inputs.put(creator,userName); 
            inputs.put(description,"A mortgage application form"); 
                                 
            //Store MortgageForm.pdf in /Company Home/Test Directory 
            CRCResult result = docManager.storeContent(storeName,  
                     nodeName, 
                     formName, 
                    "{http://www.alfresco.org/model/content/1.0}content",  
                    pdfDoc, 
                    "UTF-8", 
                    UpdateVersionType.INCREMENT_MAJOR_VERSION, 
                    null, 
                    inputs);  
            //Get the identifier value of the new resource 
            String id = result.getNodeUuid(); 
            return id;  
    } 
        catch (Exception ee) 
        { 
            ee.printStackTrace(); 
        } 
        return null ;  
    } 
     
     
    //This method returns the value of the specified node 
    private com.adobe.idp.Document GeneratePDFDocument(ServiceClientFactory myFactory, com.adobe.idp.Document formData) 
    { 
        try 
        { 
        //Create an OutputClient object 
        OutputClient outClient = new OutputClient(myFactory);  
             
        //Set PDF run-time options     
        com.adobe.livecycle.output.client.PDFOutputOptionsSpec outputOptions = new PDFOutputOptionsSpec(); 
        outputOptions.setLocale("en_US"); 
             
        //Set rendering run-time options 
        com.adobe.livecycle.output.client.RenderOptionsSpec pdfOptions = new com.adobe.livecycle.output.client.RenderOptionsSpec();  
        pdfOptions.setLinearizedPDF(true); 
                                 
        //Create a PDF document             
        OutputResult outputDocument = outClient.generatePDFOutput( 
            TransformationFormat.PDF, 
            "Loan.xdp", 
            "C:\\Adobe", 
            outputOptions, 
            pdfOptions, 
            formData 
        ); 
     
        //Get the Generated PDF file  
        Document ouputDoc = outputDocument.getGeneratedDoc(); 
        return ouputDoc ;  
        } 
        catch (Exception ee) 
        { 
            ee.printStackTrace(); 
        } 
        return null;  
    } 
     
    //This method returns the value of the specified node 
    private String getNodeText(String nodeName, org.w3c.dom.Document myDOM) 
    { 
      //Get the XML node by name 
      NodeList oList = myDOM.getElementsByTagName(nodeName); 
      Node myNode = oList.item(0);  
      NodeList oChildNodes = myNode.getChildNodes(); 
                                  
     String sText = ""; 
     for (int i = 0; i < oChildNodes.getLength(); i++) 
     { 
         Node oItem = oChildNodes.item(i); 
        if (oItem.getNodeType() == Node.TEXT_NODE) 
         { 
           sText = sText.concat(oItem.getNodeValue()); 
         } 
     } 
    return sText; 
    } 
}