当前位置: 代码迷 >> java >> Primefaces InputStream在文件下载中生成损坏的PDF
  详细解决方案

Primefaces InputStream在文件下载中生成损坏的PDF

热度:38   发布时间:2023-07-27 09:18:31.0

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

Adobe 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>

那么如何解决这个问题

不应该有doc.close()开始从应对字节之前out 如果将文件保存到硬盘而不是将其发送到浏览器,文件是否也损坏了?

  相关解决方案