2016-05-11 5 views
-1

Ich habe Funktion, die docx oder odt-Datei erstellen. Ich brauche diese Datei automatisch in Microsoft/Libre Office zu öffnen, gleich nachdem die Erstellung abgeschlossen ist. Wie codiert man dies in flex/as3?FLEX/AS3 Wie docx/odt Datei zu öffnen

 protected function create003(docType:String, patientID:String):void 
     { 
      create003Result.token = nhealthReports.create003(docType, patientID);    
     } 

     protected function getFormModuleDataResult_resultHandler(event:ResultEvent):void 
     { 
      var pathToFile:String; 
      pathToFile=create003Result.lastResult; // this is path to created file 
      // here i need some code from you 
     } 



     <nhealthreports:NhealthReports id="nhealthReports" 
            showBusyCursor="true"/>  
     <s:CallResponder id="create003Result" result="getFormModuleDataResult_resultHandler(event)"/> 
+0

Also ist die Datei auf dem Server erstellt, oder? Ist das eine AIR-Desktopanwendung, an der Sie gerade arbeiten? – Philarmon

+0

Ja Datei auf dem PHP-Server erstellt und String-Name der Datei gesendet. Und ja, ich arbeite mit AIR, nicht Browser – Alex

+0

Verwenden Sie ** NativeProcess **, um das externe Programm (MS Office usw.) auszuführen. –

Antwort

2

Sie müssten also zunächst die Datei auf den Computer des Benutzers herunterladen und dann öffnen. So etwas sollte es tun (kopiert eingefügtes Zeug aus meinen Projekten, so dass du es vielleicht etwas anpassen musst).

Auch Ihr Server benötigt möglicherweise eine Crossdomaindatei, damit Ihre App Dateien von ihr laden kann.

private function getFormModuleDataResult_resultHandler(event:ResultEvent):void 
    { 
     // load file 
     var loader:URLLoader = new URLLoader(); 
     loader.addEventListener(Event.COMPLETE, onLoadingComplete); 
     loader.dataFormat = URLLoaderDataFormat.BINARY; 
     loader.load(new URLRequest(pathToFile)); 
    } 

    private function onLoadingComplete(event:Event):void 
    { 
     // get the data as bytearray 
     var data:ByteArray = event.target.data; 

     // you will probably need to figure this out from your server path or define your own here 
     var fileName:String = "MyFilename.doc"; 

     // create a file under the application storage directory (C:\Users\YOURUSERHERE\AppData\Roaming\RateBook\Local Store) 
     // you can store the file anywhere but it is recommended to do it here 
     // as users with restricted access on their machines (non-admin users) might have trouble saving the files elsewhere 
     var file:File = File.applicationStorageDirectory.resolvePath(fileName); 

     //create a file stream to be able to write the content of the file  
     var fileStream:FileStream = new FileStream(); 
     //open the file stream and set for Write 
     fileStream.open(file, FileMode.WRITE); 
     //writes the bytes 
     fileStream.writeBytes(data, 0, data.length); 
     //close the stream 
     fileStream.close(); 

     // by now the file should be saved to disk, let's open it 
     // Naturally this assumes that the user have the file extension (like .doc) associated with the correct program (MS Word) 
     file.openWithDefaultApplication(); 
    } 
+0

Ich habe einen Fehler - Fehler # 3001: Datei- oder Verzeichniszugriff verweigert. Können Sie bitte Ihr Beispiel für es remake: öffnen Sie einfach "D: \ 1.docx" Datei. Nichts, das vom Server sendet, braucht nicht. – Alex

+0

Hilfe mehr nicht brauchen. Es funktioniert jetzt. Danke vielmals ! – Alex

+0

Aber vielleicht können Sie mir bei dieser Frage helfen - http://stackoverflow.com/questions/37135722/flex-as3-make-mini-icon-under-cursor-when-drag-and-drop-in-process ?? – Alex