我有一个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>
但这非常失败。任何帮助,将不胜感激。提前谢谢。
答案 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。