Quick Start (EJB mode): Assembling PDF documents with bookmarks using the Java API

The following Java code example assembles a PDF document that contains bookmarks. The name of the DDX document is bookmarkDDX.xml. The name of the bookmark XML document that describes the bookmarks to add to the PDF document is bookmarks.xml. The result PDF document is saved as a PDF file named AssemblerResultBookmarks.pdf. (See Assembling PDF Documents with Bookmarks.)

/* 
    * This Java Quick Start uses the EJB mode and contains the following JAR files 
    * in the class path: 
    * 1. adobe-assembler-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. jacorb.jar (use a different JAR file if the LiveCycle Server is not deployed on JBoss) 
    * 7. 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. 
    *  
    * This quick start uses the following DDX document: 
    * <?xml version="1.0" encoding="UTF-8"?> 
    * <DDX xmlns="http://ns.adobe.com/DDX/1.0/"> 
    *  <PDF result="FinalDoc.pdf"> 
    *     <PDF source="Loan.pdf"> 
    *        <Bookmarks source="doc2" /> 
    *     </PDF> 
    *  </PDF> 
    * </DDX> 
    *  
    * This quick start also uses the following bookmarks XML   
    * to assemble a PDF document containing bookmarks: 
    * <?xml version="1.0" encoding="UTF-8"?> 
    * <Bookmarks xmlns="http://ns.adobe.com/pdf/bookmarks" version="1.0"> 
    *  <Bookmark> 
    *     <Action> 
    *        <Launch NewWindow="true"> 
    *           <File Name="C:\Adobe\LoanDetails.pdf" /> 
    *        </Launch> 
    *     </Action> 
    *        <Title>Open the Loan document</Title> 
    *  </Bookmark> 
    * <Bookmark> 
    *     <Action> 
    *        <Launch> 
    *           <Win Name="C:\WINDOWS\notepad.exe" /> 
    *        </Launch> 
    *     </Action> 
    *    <Title>Launch NotePad</Title> 
    *  </Bookmark> 
    * </Bookmarks> 
    *  
    */ 
import com.adobe.livecycle.assembler.client.*; 
import java.util.*; 
import java.io.File; 
import java.io.FileInputStream; 
import com.adobe.idp.Document; 
import com.adobe.idp.dsc.clientsdk.ServiceClientFactory; 
import com.adobe.idp.dsc.clientsdk.ServiceClientFactoryProperties; 
 
public class AssembleBookmarks 
{ 
    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 instance 
            ServiceClientFactory myFactory = ServiceClientFactory.createInstance(connectionProps); 
             
            //Create an AssemblerServiceClient object 
            AssemblerServiceClient assemblerClient = new AssemblerServiceClient(myFactory); 
 
            //Create a FileInputStream object based on an existing DDX file  
            FileInputStream myDDXFile = new FileInputStream("C:\\bookmarkDDX.xml");  
 
            //Create a Document object based on the DDX file 
            Document myDDX = new Document(myDDXFile);  
 
            //Create a Map object to store an input PDF document and a Bookmark 
            //XML document 
            Map inputs = new HashMap(); 
            FileInputStream mySourceMap = new FileInputStream("C:\\Loan.pdf"); 
            FileInputStream bookmarkInfo = new FileInputStream("C:\\bookmarks.xml"); 
 
            //Create a Document object based on the Loan.pdf source file 
            Document myPDFMapSource = new Document(mySourceMap);  
 
            //Create a Document object based on the bookmarks.xml file 
            Document myBookmarkXML= new Document(bookmarkInfo);  
 
            //Place two entries into the Map object 
            inputs.put("Loan.pdf",myPDFMapSource);  
            inputs.put("doc2",myBookmarkXML);  
             
            //Create an AssemblerOptionsSpec object 
            AssemblerOptionSpec assemblerSpec = new AssemblerOptionSpec(); 
            assemblerSpec.setFailOnError(false);  
 
            //Submit the job to Assembler service 
            AssemblerResult jobResult = assemblerClient.invokeDDX(myDDX,inputs,assemblerSpec);    
            java.util.Map allDocs = jobResult.getDocuments(); 
 
            //Retrieve the result PDF document from the Map object 
            Document outDoc = null; 
 
            //Iterate through the map object to retrieve the result PDF document 
            for (Iterator i = allDocs.entrySet().iterator(); i.hasNext();) { 
                // Retrieve the Map object?s value 
                Map.Entry e = (Map.Entry)i.next(); 
                 
                //Get the key name as specified in the  
                //DDX document  
                String keyName = (String)e.getKey(); 
                if (keyName.equalsIgnoreCase("FinalDoc.pdf")) 
                {  
                    Object o = e.getValue(); 
                    outDoc = (Document)o; 
 
                    //Save the result PDF file 
                    File myOutFile = new File("C:\\AssemblerResultBookmarks.pdf");  
                    outDoc.copyToFile(myOutFile); 
                } 
            } 
        }catch (Exception e) { 
            e.printStackTrace(); 
        } 
    } 
}