2012-07-23 7 views
5

Ich habe ein signiertes Applet, das ein PDF-Dokument von einem Webdienst abruft, speichert es in einem temporären Ordner und öffnet es auf Adobe Reader. Ich möchte vermeiden, die Datei lokal zu speichern, aber ich weiß wirklich nicht, wie man es erreicht (ich bin ein Neuling mit Java Applets).Öffnen Sie "Byte-Array-Dokument" aus einem Java-Applet

Wenn es eine Webanwendung wäre (d. H. Ein einfaches Servlet), könnte ich einfach den PDF-Inhalt über die ServletResponse schreiben; dann speichert der Browser es in seinem temporären Ordner und öffnet es mit Adobe Reader (oder welcher Anwendung auch immer dem MIME-Typ zugeordnet ist).

Gibt es einen ähnlichen Weg ... auf einem Java-Applet?

Dies ist mein Code so weit:

public class MyListener implements ActionListener { 
    public void actionPerformed(ActionEvent event) { 
     // Retrieve the document contents 
     byte[] content = webService.getPdfDocument(...); 

     // Write to file 
     File f = new File("my-document-filename.pdf"); 
     FileOutputStream fos = new FileOutputStream(f); 
     fos.write(content); 
     fos.close(); 

     // Open the file 
     Desktop.getDesktop().open(new File("my-document-filename.pdf")); 
    } 
} 

Jede Alternative zu Desktop.open(File), so dass ich ein byte[] anstelle eines File passieren?

+1

eine oder andere Weise, die temporäre Datei müssen erstellt werden. Ich bin mir nicht sicher, was mit 'Desktop.open' los ist. Es ist eine absolut gültige Art, Dinge zu tun. –

+0

+1. Ich glaube nicht, dass Sie die temporäre Datei vermeiden können, aber vielleicht gibt es eine Möglichkeit, sie vom Browser verwalten zu lassen (so dass sie nach dem Löschen bereinigt wird). – Thilo

+0

Es ist in Ordnung, die temporäre Datei zu erstellen, solange sie vom Browser verwaltet wird, genau wie im ServletResponse-Beispiel. Was ich vermeiden möchte, ist das Erstellen mehrerer PDF-Dateien "irgendwo" im lokalen Laufwerk des Benutzers (zB C: /temp/a-document.pdf, C: /temp/another-one.pdf, usw.) – AJPerez

Antwort

2
  1. Adobe reader can handle URL:s, so dass es nach vorne ein Weg sein könnte, eine temporäre (?) URL für das Dokument zu erstellen.

  2. Andernfalls können Sie eine temporäre Datei Verwendung File.createTempFile, von der API erstellen:

    Erzeugt eine neue leere Datei im angegebenen Verzeichnis, die angegebenen Präfix und Suffix-Strings mit seinem Namen zu erzeugen. Wenn diese Methode erfolgreich dann wird es wieder gewährleistet, dass:

    1. Die Datei mit den zurückgegebenen abstrakten Pfadnamen bezeichnet nicht vor dieser Methode existieren aufgerufen wurde, und
    2. Weder diese Methode noch eine ihrer Varianten die gleiche Rück abstrakter Pfadname im aktuellen Aufruf der virtuellen Maschine.

    Diese Methode stellt nur einen Teil einer temporären Dateieinrichtung zur Verfügung. Um zu veranlassen, dass eine mit dieser Methode erstellte Datei automatisch gelöscht wird, verwenden Sie die deleteOnExit() -Methode.

    Also in Ihrem Fall, anstatt eine neue Datei selbst Erstellen Sie diese Methode verwenden können:

    File f = File.createTempFile("tmp", ".pdf"); 
    f.deleteOnExit(); // deletes the file on exit 
    ... 
    
+0

Nicht genau was Ich habe gesucht ... aber es könnte das Problem lösen. Ich werde es versuchen. Vielen Dank! – AJPerez

+0

Aktualisierte Antwort mit einer anderen Option. Aber die temporäre Datei ist nicht so schlecht. – dacwe

+0

Die zweite Option ist in meinem Fall nicht anwendbar: Ich kann die Datei serverseitig nicht speichern, daher kann ich sie nicht mit einer URL öffnen. Wie auch immer, deine erste Option war schon gut genug :) – AJPerez

Verwandte Themen