使用JSF在新的浏览器窗口中读取和打开PDF

时间:2014-02-28 19:05:27

标签: java jsf primefaces downloadfile

Java / JSF

我试图在 一个新的浏览器窗口 中打开PDF而不是下载它,但是每次尝试都会成功下载该文件,并打开一个带有该应用程序的新选项卡只有而不是pdf文件。

<p:commandLink title="report" target="_blank"
    action="#{managedBean.generateReport('P',true)}"
    ajax="false" immediate="false" >
</p:commandLink>

托管bean :generateReport调用downloadFile

下面的filePath参数= /temp/doc/abc.pdf(chmod 777)

public static void downloadFile(String filePath) throws IOException{
    FacesContext context = FacesContext.getCurrentInstance();  
    HttpServletResponse response = (HttpServletResponse) context  
                         .getExternalContext().getResponse();  
    File file = new File(filePath);  
    if (!file.exists()) {  
      response.sendError(HttpServletResponse.SC_NOT_FOUND);  
      return;  
     }  
    response.reset();  
    response.setBufferSize(DEFAULT_BUFFER_SIZE);  
    response.setContentType("application/octet-stream");  
    response.setHeader("Content-Length", String.valueOf(file.length()));  
    response.setHeader("Content-Disposition", "attachment;filename=\""  
           + file.getName() + "\"");  
    BufferedInputStream input = null;  
    BufferedOutputStream output = null;  

    try 
    {  
        input = new BufferedInputStream(new FileInputStream(file),  
                    DEFAULT_BUFFER_SIZE);  
        output = new BufferedOutputStream(response.getOutputStream(),  
                        DEFAULT_BUFFER_SIZE);  
        byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];  
        int length;  
        while ((length = input.read(buffer)) > 0) {  
            output.write(buffer, 0, length);  
        }  
    } finally 
    {  
        input.close();  
        output.close();  
    }  
    context.responseComplete();
}

我的Chromium插件已启用:

enter image description here

3 个答案:

答案 0 :(得分:2)

主要表面media

来自showcase

<p:media value="/resources/other/guide.pdf" width="100%" height="300px"/>  

此外,您可以将此PDF查看器放在p:dialog here

答案 1 :(得分:0)

如果您希望浏览器知道它是PDF,则必须将其设置为PDF内容类型(“application / pdf”)。您将其设置为“application / octet-stream”。

答案 2 :(得分:-4)

在这一行

response.setHeader("Content-Disposition", "attachment;filename=\""  + file.getName() + "\"");

替换为

response.setHeader("Content-Disposition", "filename=\""  + file.getName() + "\""); 

删除==&gt;附件;然后Pdf将在新标签页中打开