在JSP中将原始字节嵌入为PDF

时间:2012-02-24 20:01:30

标签: jsp jsf pdf javabeans

我有一个bean,其中包含根据用户请求生成的PDF的原始字节。我想向用户显示此PDF而不是在我的服务器上真正保存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>

但这非常失败。任何帮助,将不胜感激。提前谢谢。

1 个答案:

答案 0 :(得分: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并在response方法中执行上述doGet()作业最后让<object>的URL指向该servlet。