Quick Start (Base64): Optimizing performance using the web service API

The following code example optimizes performance by setting the caching, standalone, and linearized options. A linearized file is optimized for delivery on the web. (See Optimizing the Performance of the Forms Service.)

/* 
    * Ensure that you create the Java proxy classes to use  
    * base64 encoding. This is required to populate a BLOB  
    * object with data or retrieve data from a BLOB object. 
    *  
    * For information, see "Creating Java proxy classes using Apache Axis"  
    * in Programming with LiveCycle.   
    */ 
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 java.io.FileInputStream; 
import java.util.HashMap; 
 
 
import javax.xml.rpc.holders.LongHolder; 
import javax.xml.rpc.holders.StringHolder; 
import com.adobe.idp.services.BLOB; 
import com.adobe.idp.services.FormsService; 
import com.adobe.idp.services.FormsServiceServiceLocator; 
import com.adobe.idp.services.PDFFormRenderSpec; 
import com.adobe.idp.services.URLSpec; 
import com.adobe.idp.services.holders.BLOBHolder; 
import com.adobe.idp.services.holders.FormsResultHolder; 
 
public class RenderFormPerformanceWS 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 { 
             
        try{ 
            //Create a FormsService object 
            com.adobe.idp.services.FormsServiceServiceLocator sl = new FormsServiceServiceLocator(); 
            FormsService formsOb = sl.getFormsService(); 
                 
            ((javax.xml.rpc.Stub)formsOb)._setProperty(javax.xml.rpc.Stub. 
            USERNAME_PROPERTY, "administrator"); 
            ((javax.xml.rpc.Stub)formsOb)._setProperty(javax.xml.rpc.Stub. 
            PASSWORD_PROPERTY, "password"); 
         
            //Specify file attachments to attach to the form 
            FileInputStream fileAttachment = new FileInputStream("C:\\graphic1.jpg");  
            BLOB attachment1 = new BLOB();  
            int len = fileAttachment.available();  
            byte []fileStream = new byte[len] ; 
            fileAttachment.read(fileStream);  
            attachment1.setBinaryData(fileStream);  
            String fileName = "rideau1.jpg"; 
         
            //Create a HashMap object to store file attachments 
            HashMap fileAttachments = new HashMap(); 
            fileAttachments.put(fileName, attachment1);  
                     
            //Create a PDFFormRenderSpec object 
            PDFFormRenderSpec pdfFormRenderSpec = new PDFFormRenderSpec(); 
            pdfFormRenderSpec.setCacheEnabled(new Boolean(true)); 
                 
            //Specify URI values used by the Forms service 
            URLSpec uriValues = new URLSpec();  
            uriValues.setApplicationWebRoot("http://localhost:8080/FormsServiceClientApp"); 
            uriValues.setContentRootURI("C:\\Adobe"); 
            uriValues.setTargetURL("http://localhost:8080/FormsServiceClientApp/HandleData"); 
                         
            //Create class holder objects                 
            BLOBHolder outRenderPDFFormResultDoc = new BLOBHolder();  
            FormsResultHolder formsResult = new FormsResultHolder();  
            LongHolder longHolder = new LongHolder();  
            StringHolder stringHolder = new StringHolder();   
                                 
            //Invoke the renderPDFForm method to render  
            //an interactive PDF form 
            formsOb.renderPDFForm( 
                      "Loan.xdp",                   
                      null,              
                      pdfFormRenderSpec,         
                      uriValues,                 
                      fileAttachments,                      
                      outRenderPDFFormResultDoc, 
                      longHolder, 
                      stringHolder, 
                      formsResult);  
         
            //Create a BLOB object that contains form data 
            BLOB formData = formsResult.value.getOutputContent(); 
                 
            //Get the content type of the response and 
            //set the HttpServletResponse object's content type 
            String contentType = formData.getContentType(); 
            resp.setContentType(contentType); 
         
            //Create a ServletOutputStream object 
            ServletOutputStream oOutput = resp.getOutputStream(); 
                             
            //Create a byte array that stores form data in the BLOB object 
            byte[] cContent = formData.getBinaryData(); 
         
            //Write a byte stream back to the web browser.  
            //Pass the byte array 
            oOutput.write(cContent); 
                         
        }catch (Exception e) { 
             System.out.println("The following error occurred during this operation " +e.getMessage()); 
            }     
    } 
}