This post assumes one has the Adobe LiveCycle Forms ES component installed on the server.
In one of my previous posts I’ve mentioned that the Reader Extensions are necessary for a PDF form to be able to submit itself as a PDF. In this post I’m going to explain a workaround for this problem, which consists of the following steps:
- Create a small XML Schema Definition for the PDF form that we will create.
- Create a PDF form, which submits itself as an XML file attachment of an e-mail.
- Create an Adobe LiveCycle ES process, which will handle the e-mail and the attachment to generate a new PDF out of it and submit it back to the same e-mailaddress.
Create a small XML Schema Definition
In this example we want our PDF form to contain information about the PDF form, the person (who submits the PDF form) and an indication if the person wants an acknowledgement that the PDF form has been received in good order. We want our XML to have the following format:
| <?xml version=”1.0″ encoding=”UTF-8″?> <form> <formdetails> <formLocation><location of the form in the Adobe LiveCycle repository></formLocation> </formdetails> <persondetails> <firstName>Geert</firstName> <lastName>Zijlmans</lastName> <emailAddress><my e-mailaddress></emailAddress> </persondetails> <questions> <acknowledge>1</acknowledge> </questions> </form> |
Code 1: XML content
One can use a standard text editor to create the XML Schema Definition (XSD) , but one can also use XML editors like Altova XML Spy or oXygen. The XSD should have the following format:
| <?xml version=”1.0″ encoding=”UTF-8″?> <xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema” elementFormDefault=”qualified” attributeFormDefault=”unqualified”> <xs:element name=”form”> <xs:annotation> <xs:documentation>Form</xs:documentation> </xs:annotation> <xs:complexType> <xs:sequence> <xs:element name=”formdetails” type=”FormDetails”/> <xs:element name=”persondetails” type=”PersonDetails”/> <xs:element name=”questions”> <xs:complexType> <xs:sequence> <xs:element name=”acknowledge” type=”xs:int”/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name=”FormDetails”> <xs:sequence> <xs:element name=”formLocation” type=”xs:string”/> </xs:sequence> </xs:complexType> <xs:complexType name=”PersonDetails”> <xs:sequence> <xs:element name=”firstName” type=”xs:string”/> <xs:element name=”lastName” type=”xs:string”/> <xs:element name=”emailAddress” type=”xs:string”/> </xs:sequence> </xs:complexType> </xs:schema> |
Code 2: XML Schema Definition
Create a PDF form
Now that we have the XSD we can develop our PDF form in the Adobe LiveCycle Designer ES from within the Adobe LiveCycle Workbench ES. In the Adobe LiveCycle Workbench ES we need to have the Form design perspective active. In this perspective we want to create a new subdirectory for our little project, so we open the resources view and add a new folder to the hierarchy, named TEST. In this folder we add a new PDF file, named workaround.pdf, and open it inside the Workbench.
Inside the PDF form we add a new data connection to our XSD. Once the XSD has been connected to the PDF form, one can drag-and-drop the contents of the XSD onto the PDF form. The next thing we need is an Email Submit Button from our Object Library and configure it to send an e-mail to an e-mailaddress our Adobe LiveCycle ES process will poll for incoming mails having a certain subject (in our case: “[test workaround]“). Our PDF form design should look like the figure below.

PDF form in Adobe LiveCycle Workbench ES
For our Adobe LiveCycle ES process it is essential that the process knows which PDF should be generated from the repository. To solve this little problem, we set the default value of the field form to the location of the form in our Adobe LiveCycle repository: CIBER/TEST/workaround.pdf.
Create an Adobe LiveCycle ES process
In the Adobe LiveCycle Workbench ES we need to switch to the Process design perspective. In this perspective one can add a new process in the processes pane. We create a process named renderFormMail and add it to the category CIBER TEST. In the orchestration we add the following services:
- RenderPDFForm: This service belongs to the Adobe LiveCycle Forms ES component and can be used to generate and prefill a PDF form that is handed to the service. The prefill data needs to correspond with the dataset defined in the PDF form.
- SendWithDocument: This service belongs to the Foundation of the Adobe LiveCycle ES platform and can be used to send an e-mail with zero or one com.adobe.idp.Document attached to it.
Before we can configure our services, we need to define several variables, which will be used by the services:
- emailaddressInbox: This is the String value which will hold the e-mailaddress of the INBOX.
- emailaddressFrom: This is the String value which will hold the e-mailaddress the e-mail came from.
- form: This is the com.adobe.idp.Document which will hold the generated PDF Form.
- formData: This is the XML data which was send together with the e-mail.
The configuration for the RenderPDFForm service will be:
- Input
- Name: Render PDF form from XML
- Form to Render (XPath): /process_data/formData/form/formdetails/formLocation (will contain “TEST/workaround.pdf”)
- Form Data (variable): formData
- Character Set: UTF-8
- Render At Client: Yes
- Content root URI: repository:///CIBER/
- Output
- Rendered Form: form
The configuration for the SendWithDocument service will be:
- To Addresses
- To (variable): emailaddressInbox
- From Addresses
- From (variable): emailaddressFrom
- Attachments
- Attachment Name (literal): form.pdf
- Attachment (variable): form
The figure below displays the designed process.

Process for workaround
Once the process has been designed you need to activate it. By activating it, it can be used to create an e-mail endpoint for it.
Creating an e-mail endpoint for the process
Log in to the Administration Console of the Adobe LiveCycle ES platform and navigate to the Service Management of the process (home > services > Applications and Services > Service Management). Open the process renderFormMail and add an e-mail endpoint according to Adobe’s instructions. To invoke the process one needs to configure its input parameters:
- emailaddressInbox (literal): <the e-maildress that needs to be polled>
- emailaddressFrom (variable): %SENDER%
- formData (variable): *
Once the endpoint is activated. The e-mail Inbox will be polled for incoming messages. Each incoming message will invoke the process and will be deleted afterwards. In my next post I will explain the ReceiveEmail service which will give you more control over the e-mails that start a certain process.


