Java API快速入门(SOAP)可用于条形码Forms服务:
快速入门(SOAP模式):使用Java API解码条形码表单数据
AEM Forms操作可以使用AEM Forms强类型API执行,连接模式应设置为SOAP。
“使用AEM Forms进行编程”中的“快速入门”基于在JBoss应用程序服务器和Microsoft Windows操作系统上部署的Forms服务器。 但是,如果您使用的是其他操作系统(如UNIX),请将特定于Windows的路径替换为适用操作系统支持的路径。 同样,如果您使用的是其他J2EE应用程序服务器,请确保指定有效的连接属性。 请参阅 设置连接属性.
以下Java代码会对位于PDF表单中的表单数据进行解码,该表单另存为Loan.pdf。 解码的数据将另存为名为extractedData.xml的XML文件。 此代码示例将转换 org.w3c.dom.Document
对象 com.adobe.idp.Document
对象。 (请参阅 解码条形码表单数据.)
/*
* This Java Quick Start uses the SOAP 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. jboss-client.jar (use a different JAR file if the forms server is not deployed
* on JBoss)
* 6. activation.jar (required for SOAP mode)
* 7. axis.jar (required for SOAP mode)
* 8. commons-codec-1.3.jar (required for SOAP mode)
* 9. commons-collections-3.1.jar (required for SOAP mode)
* 10. commons-discovery.jar (required for SOAP mode)
* 11. commons-logging.jar (required for SOAP mode)
* 12. dom3-xml-apis-2.5.0.jar (required for SOAP mode)
* 13. jaxen-1.1-beta-9.jar (required for SOAP mode)
* 14. jaxrpc.jar (required for SOAP mode)
* 15. log4j.jar (required for SOAP mode)
* 16. mail.jar (required for SOAP mode)
* 17. saaj.jar (required for SOAP mode)
* 18. wsdl4j.jar (required for SOAP mode)
* 19. xalan.jar (required for SOAP mode)
* 20. xbean.jar (required for SOAP mode)
* 21. xercesImpl.jar (required for SOAP mode)
*
* 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 jboss-client.jar file is located in the following path:
* <install directory>/jboss/bin/client
*
* SOAP required JAR files are located in the following path:
* <install directory>/sdk/client-libs/thirdparty
*
* If you want to invoke a remote forms 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 these additional JAR files
*
* For information about the SOAP
* mode, see "Setting connection properties" in Programming
* with AEM Forms
*/
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 DecodeFormDataSOAP {
public static void main(String[] args) {
try
{
//Set connection properties required to invoke AEM Forms
Properties connectionProps = new Properties();
connectionProps.setProperty(ServiceClientFactoryProperties.DSC_DEFAULT_SOAP_ENDPOINT, "https://[server]:[port]");
connectionProps.setProperty(ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL,ServiceClientFactoryProperties.DSC_SOAP_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;
}
}
同时使用 org.w3c.dom.Document
对象和 com.adobe.idp.Document
对象在同一应用程序逻辑中,完全限定这两个对象是一种好做法。