Primefaces InputStream在fileDownload

时间:2015-07-16 13:42:47

标签: java jsf pdf primefaces inputstream

我需要您帮助解决从InputStream组件中使用的fileDownload生成损坏的PDF文件的问题。我有一个使用iText生成的PDF,然后我将其转换为inputStream,因此我可以将其用作fileDownload组件中的输入。点击下载commandButton后,我将下载该文件并打开它,它会显示一条消息:

  

Adob​​e Reader无法打开文件" sample.pdf"因为它是   要么不支持文件类型,要么已损坏

bean代码是:

private StreamedContent file;

public void createPdf() {
    try {
        Document doc = Document(PageSize.A4, 50, 50, 50, 50);
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ByteArrayInputStream in ;
        PdfWriter writer;
        writer = PdfWriter.getInstance(doc, out);
        doc.open();
        doc.add(new Paragraph("Hello World!"));
        in = new ByteArrayInputStream(out.toByteArray());
        file = new DefaultStreamedContent(in, "application/pdf", "sample.pdf");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

jsf代码是:

<p:commandButton value="Download" ajax="false"
        onclick="PrimeFaces.monitorDownload(start, stop);"
        icon="ui-icon-arrowthick-1-s" actionListener="#{pdf.createPdf}">
    <p:fileDownload value="#{pdf.file}"/>
</p:commandButton>

那么如何解决问题

1 个答案:

答案 0 :(得分:1)

在开始处理来自doc.close()的字节之前,不应该有out吗?如果您将文件保存到硬盘驱动器而不是将其发送到浏览器,该文件是否也已损坏?