JSF无法从iTextPDF呈现PDF

时间:2015-11-09 15:42:49

标签: jsf itextpdf

我正在尝试通过JSF响应向浏览器发送PDF,这是一个非常简单的文档,请参阅:

public void gerarPDF() throws IOException{
     try {
         HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();

            // step 1
            Document document = new Document();
            // step 2
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            PdfWriter.getInstance(document, baos);
            // step 3
            document.open();
            // step 4
            document.add(new Paragraph("HELLO WORLD"));
            document.add(new Paragraph("ANOTHER LINE"));
            // step 5
            document.close();

            response.addHeader("Content-Type", "application/force-download");
            response.addHeader("Content-Disposition", "attachment; filename=report.pdf");
            response.setContentLength(baos.size());
            response.getOutputStream().write(baos.toByteArray());
            response.getOutputStream().flush();

            baos.flush();
            baos.close();
            FacesContext.getCurrentInstance().responseComplete();
        }
        catch(DocumentException e) {
            throw new IOException(e.getMessage());
        }
}

从commandButton调用此方法,问题浏览器显示:

%PDF-1.4 %2 0 obj <>stream x+S00SI

如果我更改我的代码以保存在文件中,一切正常,请参阅:

FileOutputStream fos = new FileOutputStream("C:\\"+UUID.randomUUID().toString()+".pdf");
        fos.write(baos.toByteArray());
        fos.close();

但我需要在浏览器中显示PDF。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:2)

尝试将内容类型更改为application/pdf

response.addHeader("Content-Type", "application/pdf");

参考。 Proper MIME media type for PDF files