2012-02-24 44 views
1

我有一个bean,其中包含根据用户请求生成的PDF原始字节。我想将这个PDF文件显示给用户,而不需要在我的服务器上保存PDF文件。在JSP中将原始字节嵌入为PDF

在我的jsp我曾尝试标签,如

<object data="#{bean.pdfBytes}" type="application/pdf" ></object> 
<object type="application/pdf" width="600" height="400"> 
    <h:outputFormat value="#{bean.pdfBytes}" escape="false"/> 
</object> 

,但失败了苦头。任何帮助,将不胜感激。提前致谢。

+0

需要更多来自JSP的行。 JSP中是否只有PDF对象?那么为什么不使用一个servlet将数据提供给浏览器并让它呈现呢? – 2012-02-25 01:19:05

回答

2

我想将这个PDF文件显示给用户,而不需要在我的服务器上保存PDF文件。

将其写入响应的输出流。假设您使用iText来生成PDF,将响应的输出流传递到PdfWrter#getInstance()

public void download() throws IOException { 
    FacesContext context = FacesContext.getCurrentInstance(); 
    HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse(); 
    response.setContentType("application/pdf"); 
    response.setHeader("Content-Disposition", "inline; filename=\"" + filename + "\""); 

    Document document = new Document(); 
    PdfWriter writer = PdfWriter.getInstance(document, response.getOutputStream()); 
    document.open(); 
    // Build document. 

    context.responseComplete(); 
} 

然而,这将在浏览器中全部显示PDF。如果您想要另存为对话,只需将标头中的inline部分更改为attachment。或者,如果您确实希望将其嵌入到<object>中,则需要创建servlet并在doGet()方法内执行上述response作业,最后让<object>的URL指向该servlet。

+0

谢谢,我会试试这个。 – Daniel 2012-02-27 16:02:31