Expand my Community achievements bar.

SOLVED

AEM Forms - Fillable PDFs - Fill data with AEM Java API

Avatar

Level 1

Hi All, I am pretty new to this forum. I am exploring AEM forms quick start installation. My requirement is, we have few fillable PDF forms which I want to access by API and fill with data using Adobe AEM Forms JAVA API. Please advise the API/jars/libraries to use to achieve my requirement.

I uploaded the one of fillable pdf forms to AEM Quick start publish website which I need to access with adobe library java api.

Please help.

Thank you!

Ashok

1 Accepted Solution

Avatar

Correct answer by
Level 10
4 Replies

Avatar

Level 10

I know back in LC Days  we could do this using Java code like this...

I am checking to see if this still works like this...

/*

* This Java Quick Start uses the following JAR files

* 1. adobe-forms-client.jar

* 2. adobe-livecycle-client.jar

* 3. adobe-usermanager-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>/Adobe/Adobe LiveCycle ES2/LiveCycle_ES_SDK/client-libs/common

*

* For complete details about the location of these JAR files,

* see "Including LiveCycle ES2 library files" in Programming with LiveCycle ES2

*/

import java.io.IOException;

import javax.servlet.Servlet;

import javax.servlet.ServletException;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import com.adobe.livecycle.formsservice.client.*;

import java.util.*;

import java.io.ByteArrayOutputStream;

import java.io.InputStream;

import com.adobe.idp.Document;

import com.adobe.idp.dsc.clientsdk.ServiceClientFactory;

import com.adobe.idp.dsc.clientsdk.ServiceClientFactoryProperties;

import org.w3c.dom.Element;

import javax.xml.parsers.*;

import javax.xml.transform.*;

import javax.xml.transform.dom.DOMSource;

import javax.xml.transform.stream.StreamResult;

public class RenderDynamicForm 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 {

           

            //Render a dynamic purchase order form

            //Create an org.w3c.dom.Document object

            org.w3c.dom.Document myDom = createDataSource();

                       

            //Convert the org.w3c.dom.Document object

            //to a com.adobe.idp.Document object

            com.adobe.idp.Document formData = convertDataSource(myDom);

           

            //Render the dynamic form using data located within the

            //com.adobe.idp.Document object

            renderPOForm(resp,formData);

     }

    

    

     //Creates an org.w3c.dom.Document object

     private org.w3c.dom.Document createDataSource()

     {

        org.w3c.dom.Document document = null;

       

        try

        {

            //Create DocumentBuilderFactory and DocumentBuilder objects

            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

            DocumentBuilder builder = factory.newDocumentBuilder();

            //Create a new Document object

            document = builder.newDocument();

            //Create the root element and append it to the XML DOM

            Element root = (Element)document.createElement("transaction");

            document.appendChild(root);

           

            //Create the header element

            Element header = (Element)document.createElement("header");

            root.appendChild(header);

            //Create the txtPONum element and append it to the

            //header element

            Element txtPONum = (Element)document.createElement("txtPONum");

            txtPONum.appendChild(document.createTextNode("8745236985"));

            header.appendChild(txtPONum);

            //Create the dtmDate element and append it to the

            //header element   

            Element dtmDate = (Element)document.createElement("dtmDate");

            dtmDate.appendChild(document.createTextNode("2007-02-08"));

            header.appendChild(dtmDate);

           

            //Create the orderedByAddress element and append

            //it to the header element

            Element orderedByAddress =(Element)document.createElement("orderedByAddress");

            orderedByAddress.appendChild(document.createTextNode("222, Any Blvd"));

            header.appendChild(orderedByAddress);

            //Create the txtOrderedByPhone element and append

            //it to the header element

            Element txtOrderedByPhone = (Element)document.createElement("txtOrderedByPhone");

            txtOrderedByPhone.appendChild(document.createTextNode("(555) 555-2334"));

            header.appendChild(txtOrderedByPhone);

            //Create the txtOrderedByFax element and append

            //it to the header element

            Element txtOrderedByFax = (Element)document.createElement("txtOrderedByFax");   

            txtOrderedByFax.appendChild(document.createTextNode("(555) 555-9334"));

            header.appendChild(txtOrderedByFax);

            //Create the txtOrderedByContactName element and append

            //it to the header element

            Element txtOrderedByContactName = (Element)document.createElement("txtOrderedByContactName");

            txtOrderedByContactName.appendChild(document.createTextNode("Frank Jones"));

            header.appendChild(txtOrderedByContactName);

            //Create the deliverToAddress element and append

            //it to the header element

            Element deliverToAddress = (Element)document.createElement("deliverToAddress");

            deliverToAddress.appendChild(document.createTextNode("555, Any Blvd"));

            header.appendChild(deliverToAddress);

            //Create the txtDeliverToPhone element and append

            //it to the header element

            Element txtDeliverToPhone = (Element)document.createElement("txtDeliverToPhone");

            txtDeliverToPhone.appendChild(document.createTextNode("(555) 555-9098"));

            header.appendChild(txtDeliverToPhone);

            //Create the txtDeliverToFax element and append

            //it to the header element

            Element txtDeliverToFax = (Element)document.createElement("txtDeliverToFax");

            txtDeliverToFax.appendChild(document.createTextNode("(555) 555-9000"));

            header.appendChild(txtDeliverToFax);

            //Create the txtDeliverToContactName element and

            //append it to the header element

            Element txtDeliverToContactName = (Element)document.createElement("txtDeliverToContactName");

            txtDeliverToContactName.appendChild(document.createTextNode("Jerry Johnson"));

            header.appendChild(txtDeliverToContactName);

            //Create the detail element and append it to the root

            Element detail = (Element)document.createElement("detail");

            root.appendChild(detail);

            //Create the txtPartNum element and append it to the

            //detail element

            Element txtPartNum = (Element)document.createElement("txtPartNum");

            txtPartNum.appendChild(document.createTextNode("00010-100"));

            detail.appendChild(txtPartNum);

            //Create the txtDescription element and append it

            //to the detail element

            Element txtDescription = (Element)document.createElement("txtDescription");

            txtDescription.appendChild(document.createTextNode("Monitor"));

            detail.appendChild(txtDescription);

            //Create the numQty element and append it to

            //the detail element

            Element numQty = (Element)document.createElement("numQty");

            numQty.appendChild(document.createTextNode("1"));

            detail.appendChild(numQty);

            //Create the numUnitPrice element and append it

            //to the detail element

            Element numUnitPrice = (Element)document.createElement("numUnitPrice");

            numUnitPrice.appendChild(document.createTextNode("350.00"));

            detail.appendChild(numUnitPrice);

            //Create another detail element named detail2 and

            //append it to root

            Element detail2 = (Element)document.createElement("detail");

            root.appendChild(detail2);

            //Create the txtPartNum element and append it to the

            //detail2 element

            Element txtPartNum2 = (Element)document.createElement("txtPartNum");

            txtPartNum2.appendChild(document.createTextNode("00010-200"));

            detail2.appendChild(txtPartNum2);

            //Create the txtDescription element and append it

            //to the detail2 element

            Element txtDescription2 = (Element)document.createElement("txtDescription");

            txtDescription2.appendChild(document.createTextNode("Desk lamps"));

            detail2.appendChild(txtDescription2);

            //Create the numQty element and append it to the

            //detail2 element

            Element numQty2 = (Element)document.createElement("numQty");

            numQty2.appendChild(document.createTextNode("3"));

            detail2.appendChild(numQty2);

            //Create the NUMUNITPRICE element

            Element numUnitPrice2 = (Element)document.createElement("numUnitPrice");

            numUnitPrice2.appendChild(document.createTextNode("55.00"));

            detail2.appendChild(numUnitPrice2);

          }

     catch (Exception e) {

              System.out.println("The following exception occurred: "+e.getMessage());

           }

    return document;

     }

    

    

     //Converts an org.w3c.dom.Document object to a

     //com.adobe.idp.Document object

     private Document convertDataSource(org.w3c.dom.Document myDOM)

     {

        byte[] mybytes = null;

        

        try

        {

        //Create a Java Transformer object

        TransformerFactory transFact = TransformerFactory.newInstance();

        Transformer transForm = transFact.newTransformer();

        //Create a Java ByteArrayOutputStream object

        ByteArrayOutputStream myOutStream = new ByteArrayOutputStream();

        //Create a Java Source object

        javax.xml.transform.dom.DOMSource myInput = new DOMSource(myDOM);

   

        //Create a Java Result object

        javax.xml.transform.stream.StreamResult myOutput = new StreamResult(myOutStream);    

        //Populate the Java ByteArrayOutputStream object

        transForm.transform(myInput,myOutput);

        // Get the size of the ByteArrayOutputStream buffer

         int myByteSize = myOutStream.size();

   

        //Allocate myByteSize to the byte array

         mybytes = new byte[myByteSize];

            

        //Copy the content to the byte array

         mybytes = myOutStream.toByteArray();

        }

        catch (Exception e) {

          System.out.println("The following exception occurred: "+e.getMessage());

      }

    

     //Create a com.adobe.idp.Document object and copy the

     //contents of the byte array

     Document myDocument = new Document(mybytes);

     return myDocument;

     }

    

    

     //Render the purchase order form using the specified

     //com.adobe.idp.Document object

     private void renderPOForm(HttpServletResponse resp, Document formData)

     {

        try{

           

            //Set connection properties required to invoke LiveCycle ES2                               

            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);

       

            //Set the parameter values for the renderPDFForm method

            String formName = "Applications/FormsApplication/1.0/FormsFolder/PO.xdp"; 

                                                       

            //Cache the form

            PDFFormRenderSpec pdfFormRenderSpec = new PDFFormRenderSpec();

            pdfFormRenderSpec.setCacheEnabled(new Boolean(true));

       

            //Specify URI values that are required to render a form

            URLSpec uriValues = new URLSpec();

            uriValues.setApplicationWebRoot("http://localhost:8080/FormsQS");

            uriValues.setContentRootURI("repository:///");

            uriValues.setTargetURL("http://localhost:8080/FormsQS/HandleData");

                   

            //Invoke the renderForm method

            FormsResult formOut = formsClient.renderPDFForm(

                formName,               //formQuery

                formData,                 //inDataDoc

                pdfFormRenderSpec,      //PDFFormRenderSpec

                uriValues,                //urlSpec

                null                    //attachments

                );

               

            //Create a ServletOutputStream object

            ServletOutputStream oOutput = resp.getOutputStream();

       

            //Create a Document object that stores form data

            Document myData = formOut.getOutputContent();

       

            //Create an InputStream object

            InputStream inputStream = myData.getInputStream();

       

            //Write the data stream to the web browser

            byte[] data = new byte[4096];

            int bytesRead = 0;

            while ((bytesRead = inputStream.read(data)) > 0)

            {

                oOutput.write(data, 0, bytesRead);

            }

            }catch (Exception e) {

                 System.out.println("The following exception occurred: "+e.getMessage());

          }

     }

}

Avatar

Level 1

Thank you Donald for your reply.  I dont have the libraries & location listed by you in my installation.

* 1. adobe-forms-client.jar

* 2. adobe-livecycle-client.jar

* 3. adobe-usermanager-client.jar

install directory>/Adobe/Adobe LiveCycle ES2/LiveCycle_ES_SDK/client-libs/common

All I have is auther and publish version deployed using the jar AEM_6.3_Quickstart.jar

After extracting, folder crx-quikckstart was created with serveral subfolders in it and jar cq-quickstart-6.3.0-standalone-quickstart.jar.      And I dont see libraries like the one listed by you.

If possible, please advise the installation which I need to do to get the above libraries/folder structure. Thanks!

Somehow I managed to download jar aemfd-client-sdk-6.3.0.jar. But its just the API, dont have the acutal implementations.

Please advise.

Thanks

Avatar

Correct answer by
Level 10