将Outputstream转换为文件

3

我遇到了一个问题,

我需要用HTML源代码创建一个PDF文件,我是这样做的:

File pdf = new File("/home/wrk/relatorio.pdf");
OutputStream out = new FileOutputStream(pdf);
InputStream input = new ByteArrayInputStream(build.toString().getBytes());//Build is a StringBuilder obj
Tidy tidy = new Tidy();
Document doc = tidy.parseDOM(input, null);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(doc, null);
renderer.layout();
renderer.createPDF(out);
out.flush();
out.close();

我正在使用JSP,因此需要将此文件下载到用户端而不是在服务器上写入...

如何在Java中将此Outputstream输出转换为文件,而无需在硬盘上写入此文件?


1
你想要写入一个文件,但不希望它保存在硬盘上?我不理解你的问题。 - Tala
我需要下载PDF而不是写入硬盘。 - gmlyranetwork
下载文件意味着将其存储到硬盘中... - Tala
http://stackoverflow.com/questions/9268165/itext-generating-files-on-the-fly-without-needing-a-pdf-file/9296669#9296669 - rickz
3个回答

2
如果您正在使用VRaptor 3.3.0+,您可以使用ByteArrayDownload类。从您的代码开始,您可以使用以下内容:
@Path("/download-relatorio")
public Download download() {
    // Everything will be stored into this OutputStream
    ByteArrayOutputStream out = new ByteArrayOutputStream();

    InputStream input = new ByteArrayInputStream(build.toString().getBytes());
    Tidy tidy = new Tidy();
    Document doc = tidy.parseDOM(input, null);
    ITextRenderer renderer = new ITextRenderer();
    renderer.setDocument(doc, null);
    renderer.layout();
    renderer.createPDF(out);
    out.flush();
    out.close();

    // Now that you have finished, return a new ByteArrayDownload()
    // The 2nd and 3rd parameters are the Content-Type and File Name
    // (which will be shown to the end-user)
    return new ByteArrayDownload(out.toByteArray(), "application/pdf", "Relatorio.pdf");
}

0
一个File对象实际上并不持有数据,而是将所有操作委托给文件系统(请参见这个讨论)。 但是,您可以使用File.createTempFile创建临时文件。此外,您还可以在这里查找可能的替代方案,而无需使用File对象。

-1
使用临时文件。
File temp = File.createTempFile(prefix ,suffix);

前缀 -- 前缀字符串定义文件名;必须至少三个字符长。

后缀 -- 后缀字符串定义文件扩展名;如果为空,则使用后缀“.tmp”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接