Accessibility

LiveCycle Quick Starts: LiveCycle Remoting

Table of contents


Generating a PDF file from a Word file using LiveCycle Remoting

The following MXML code example shows how a Flex client application can use the GeneratePDF service and LiveCycle Remoting to create a PDF file from a Word (DOC) file.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" xmlns="*" 
  creationComplete="initializeChannelSet();">
  <mx:Script>
    <![CDATA[

  import mx.rpc.livecycle.DocumentReference;
  import flash.net.FileReference;
  import flash.net.URLRequest;
  import flash.events.Event;
  import flash.events.DataEvent;
  import mx.messaging.ChannelSet;
  import mx.messaging.channels.AMFChannel;  
  import mx.rpc.events.ResultEvent;
  import mx.collections.ArrayCollection;

  // Classes used in file retrieval  
  private var fileRef:FileReference = new FileReference();
  private var docRef:DocumentReference = new DocumentReference();
  private var fName:String = new String();
  private var parentResourcePath:String = "/";
  private var serverPort:String = "servername:portnumber";
  private var now1:Date;     

  // Holds information returned from LiveCycle
  [Bindable]
  public var progressList:ArrayCollection = new ArrayCollection();
  

  // Set up channel set to talk to LiveCycle.
  // This must be done before calling any service or process, but only 
  // once for the entire application.
  // Note that this uses runtime configuration to configure the 
  // destination correctly, so 
  // no other setup is needed in remoting-config.xml.
  private function initializeChannelSet():void {
    var cs:ChannelSet= new ChannelSet(); 
    cs.addChannel(new AMFChannel("remoting-amf", "http://" + serverPort + "/remoting/messagebroker/amf")); 
    PDFService.setCredentials("administrator", "password");
    PDFService.channelSet = cs;
  }
        
  // Call this method to upload the file.
  // This creates a file picker and lets the user select the file to upload.
  private function uploadFile():void {
    fileRef.addEventListener(Event.SELECT, selectHandler);
    fileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,completeHandler);
    fileRef.browse();
  }
  
  // Gets called for selected file. Does the actual upload via the file upload servlet.
  private function selectHandler(event:Event):void {
    var request:URLRequest = new URLRequest("http://" + serverPort + "/remoting/lcfileupload");
    fName = fileRef.name;
    fileRef.upload(request);
  }
  
  // Called once the file is completely uploaded. Now it is safe to access 
  // that object for other things.
  private function completeHandler(event:DataEvent):void {                    
    now1 = new Date();
    // At this point we can do whatever we want with the file that has been uploaded.
    // Our docRef variable has the object. Refer to the asdoc for 
    // DocumentReference for methods and properties.
    docRef.url = event.data as String;      
    docRef.referenceType=DocumentReference.REF_TYPE_URL;
    executeConvertToPDF(); 
  }      

  // prepares parameters for conversion and makes the call
  public function executeConvertToPDF():void {
     var paramObject:Object = new Object();
     paramObject["inputDocument"] = docRef;
     paramObject["fileName"] = fileRef.name;
     paramObject["fileTypeSettings"] = "Standard";
     paramObject["pdfSettings"] = "Standard";
     paramObject["securitySettings"] = "No Security";
     PDFService.CreatePDF(paramObject);
  }

      // this method handles a successful createPDF invocation
   public function handleCreatePDF(event:ResultEvent):void
     {
       var progObject:Object = new Object();
       // LC Remoting always returns a map in event.result. 
       // This method returns a map, too.
       var res:Object = event.result["Result"];
       // Within the Result map is another Map.
       var dr:DocumentReference = res["ConvertedDoc"] as DocumentReference;
       var now2:Date = new Date();
       // These fields map to columns in the DataGrid
       progObject.filename = fName;
       progObject.timing = (now2.time - now1.time).toString();
       progObject.state = "Success";
       now1 = new Date();
       progObject.link = "<a href='" + dr.url + "'>Right-click to open in new window</a>";
       progressList.addItem(progObject);
      }

  private function resultHandler(event:ResultEvent):void {
    // Do anything else here.
  }
    ]]>
  </mx:Script>
  
  <mx:RemoteObject id="PDFService" destination="GeneratePDFService" 
    result="resultHandler(event);">
      <mx:method name="CreatePDF" result="handleCreatePDF(event)"/>
  </mx:RemoteObject>

  <mx:Panel id="lcPanel" title="PDF Generation LiveCycle Remoting Example" 
       height="30%" width="35%" paddingTop="10" paddingLeft="10" paddingRight="10" 
       paddingBottom="10">
     <mx:Label width="100%" color="blue"
            text="Select a DOC file. This example automatically converts a Word doc to PDF."/> 
    <mx:DataGrid x="10" y="0" width="600" id="idProgress" editable="false" 
       dataProvider="{progressList}" height="231" selectable="false" >
      <mx:columns>
        <mx:DataGridColumn headerText="Filename" width="200" dataField="filename" editable="false"/>
        <mx:DataGridColumn headerText="State" width="75" dataField="state" editable="false"/>
        <mx:DataGridColumn headerText="Timing" width="75" dataField="timing" editable="false"/>
        <mx:DataGridColumn dataField="link" editable="false" headerText="Click to Open">
         <mx:itemRenderer>
            <mx:Component>
               <mx:Text x="0" y="0" width="100%" htmlText="{data.link}"/>
            </mx:Component>
         </mx:itemRenderer>
        </mx:DataGridColumn>
      </mx:columns>
    </mx:DataGrid>
    <mx:Button label="Select File" click="uploadFile()" />
  </mx:Panel>
</mx:Application>