Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Open "byte array document" from a Java applet

Tags:

java

applet

I've a signed applet that retrieves a PDF document from a web service, then stores it on a temp folder, and opens it on Adobe Reader. I would like to avoid storing the file locally, but I really don't know how to achieve it (I'm a newbie with Java applets).

If it were a web application (i.e. a simple servlet), I could just write the PDF content over the ServletResponse; then the browser would store it on its temporary folder, and open it with Adobe Reader (or whatever application is associated with the MIME type).

Is there a similar way to do this... on a Java applet?

This is my code so far:

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"));
    }
}

Any alternative to Desktop.open(File), allowing me to pass a byte[] instead of a File?

like image 986
AJPerez Avatar asked Nov 03 '22 19:11

AJPerez


1 Answers

  1. Adobe reader can handle URL:s, so it could be a way forward to create a temporary (?) URL for the document.

  2. Otherwise you can create a temporary file use File.createTempFile, from the API:

    Creates a new empty file in the specified directory, using the given prefix and suffix strings to generate its name. If this method returns successfully then it is guaranteed that:

    1. The file denoted by the returned abstract pathname did not exist before this method was invoked, and
    2. Neither this method nor any of its variants will return the same abstract pathname again in the current invocation of the virtual machine.

    This method provides only part of a temporary-file facility. To arrange for a file created by this method to be deleted automatically, use the deleteOnExit() method.

    So in your case, instead of creating a new file yourself you can use this method:

    File f = File.createTempFile("tmp", ".pdf");
    f.deleteOnExit(); // deletes the file on exit
    ...
    
like image 144
dacwe Avatar answered Nov 12 '22 18:11

dacwe