我正在尝试通过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。有人可以帮帮我吗?
答案 0 :(得分:2)
尝试将内容类型更改为application/pdf
:
response.addHeader("Content-Type", "application/pdf");