The following Java code decodes form data that is located
in a PDF form that is saved as Loan.pdf. The decoded data is saved
as an XML file named extractedData.xml. This code example converts
a org.w3c.dom.Document object into a com.adobe.idp.Document object.
(See Decoding Barcoded Form Data.)
/*
* This Java Quick Start uses the EJB mode and contains the following JAR files
* in the class path:
* 1. adobe-barcodedforms-client.jar
* 2. adobe-livecycle-client.jar
* 3. adobe-usermanager-client.jar
* 4. adobe-utilities.jar
* 5. jbossall-client.jar (use a different JAR file if the LiveCycle Server is not deployed
* on JBoss)
* 6. xercesImpl.jar
* 7. jacorb.jar (use a different JAR file if the LiveCycle Server is not deployed on JBoss)
* 8. jnp-client.jar (use a different JAR file if the LiveCycle Server is not deployed on JBoss)
*
* The JBoss files must be kept in the jboss\client folder. You can copy the client folder to
* your local development environment and then include the 3 JBoss JAR files in your class path
*
* These JAR files are located in the following path:
* <install directory>/sdk/client-libs/common
*
* The adobe-utilities.jar file is located in the following path:
* <install directory>/sdk/client-libs/jboss
*
* The jbossall-client.jar file is located in the following path:
* <install directory>/jboss/client
*
* If you want to invoke a remote LiveCycle Server instance and there is a
* firewall between the client application and the server, then it is
* recommended that you use the SOAP mode. When using the SOAP mode,
* you have to include additional JAR files located in the following
* path
* <install directory>/sdk/client-libs/thirdparty
*
* For information about the SOAP
* mode and the additional JAR files that need to be included,
* see "Setting connection properties" in Programming
* with LiveCycle
*
* For complete details about the location of the LiveCycle JAR files,
* see "Including LiveCycle Java library files" in Programming
* with LiveCycle
*/
import java.io.*;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
import javax.xml.transform.*;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import com.adobe.livecycle.barcodedforms.CharSet;
import com.adobe.livecycle.barcodedforms.Delimiter ;
import com.adobe.livecycle.barcodedforms.XMLFormat ;
import com.adobe.idp.Document;
import com.adobe.idp.dsc.clientsdk.ServiceClientFactory;
import com.adobe.idp.dsc.clientsdk.ServiceClientFactoryProperties;
import com.adobe.livecycle.barcodedforms.client.*;
public class DecodeFormData {
public static void main(String[] args) {
try
{
//Set connection properties required to invoke LiveCycle
Properties connectionProps = new Properties();
connectionProps.setProperty(ServiceClientFactoryProperties.DSC_DEFAULT_EJB_ENDPOINT, "jnp://hiro-xp: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);
BarcodedFormsServiceClient barClient = new BarcodedFormsServiceClient(myFactory);
//Specify a PDF document to convert to a XDP file
FileInputStream fileInputStream = new FileInputStream("C:\\Adobe\LoanBarForms.pdf");
Document inDoc = new Document (fileInputStream);
java.lang.Boolean myFalse = new java.lang.Boolean(false);
java.lang.Boolean myTrue = new java.lang.Boolean(true);
//Decode barcoded form data
org.w3c.dom.Document decodeXML = barClient.decode(
inDoc,
myTrue,
myFalse,
myFalse,
myFalse,
myFalse,
myFalse,
myFalse,
myFalse,
CharSet.UTF_8);
//Convert the decoded data to XDP data
List extractedData = barClient.extractToXML(
decodeXML,
Delimiter.Carriage_Return,
Delimiter.Tab,
XMLFormat.XDP);
//Create an Iterator object and iterate through
//the List object
Iterator iter = extractedData.iterator();
int i = 0 ;
while (iter.hasNext()) {
//Get the org.w3c.dom.Document object in each element
org.w3c.dom.Document myDom = (org.w3c.dom.Document)iter.next();
//Convert the org.w3c.dom.Document object to a
//com.adobe.idp.Document object
com.adobe.idp.Document myDocument = convertDOM(decodeXML);
//Save the XML data to extractedData.xml
File myFile = new File("C:\\Adobe\extractedData"+i+".xml");
myDocument.copyToFile(myFile);
i++;
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
//This user-defined method converts an org.w3c.dom.Document to a
//com.adobe.idp.Document object
public static com.adobe.idp.Document convertDOM(org.w3c.dom.Document doc)
{
byte[] mybytes = null ;
com.adobe.idp.Document myDocument = 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
Source myInput = new DOMSource(doc);
//Create a Java Result object
Result 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();
com.adobe.idp.Document myDoc = new com.adobe.idp.Document(mybytes);
myDocument = myDoc ;
}
catch(Exception ee)
{
ee.printStackTrace();
}
return myDocument;
}
}
Note: When using both an org.w3c.dom.Document object
and a com.adobe.idp.Document object in the same
application logic, it is good practice to fully qualify both objects.