从Java applet打开"字节数组文档"

AJP*_*rez 5 java applet

我有一个签名的applet,它从Web服务中检索PDF文档,然后将其存储在临时文件夹中,并在Adobe Reader上打开它.我想避免在本地存储文件,但我真的不知道如何实现它(我是Java小程序的新手).

如果它是一个Web应用程序(即一个简单的servlet),我可以将PDF内容写在ServletResponse; 然后浏览器将其存储在其临时文件夹中,并使用Adobe Reader(或任何与MIME类型相关联的应用程序)打开它.

在Java applet上有类似的方法吗?

到目前为止这是我的代码:

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"));
    }
}
Run Code Online (Sandbox Code Playgroud)

Desktop.open(File)的任何替代方案,允许我传递一个byte[]而不是一个File

dac*_*cwe 2

  1. Adobe reader 可以处理 URL:s,因此它可能是为文档创建临时(?) URL 的一种方法。

  2. File.createTempFile否则,您可以从 API创建一个临时文件 use :

    在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。如果此方法成功返回,则可以保证:

    1. 返回的抽象路径名表示的文件在调用此方法之前不存在,并且
    2. 此方法或其任何变体都不会在虚拟机的当前调用中再次返回相同的抽象路径名。

    此方法仅提供临时文件功能的一部分。要安排自动删除由此方法创建的文件,请使用deleteOnExit() 方法。

    因此,在您的情况下,您可以使用以下方法,而不是自己创建新文件:

    File f = File.createTempFile("tmp", ".pdf");
    f.deleteOnExit(); // deletes the file on exit
    ...
    
    Run Code Online (Sandbox Code Playgroud)