如何在新标签页中打开PDF文件

5

我正在使用JSF,当我点击一个按钮时,我想在一个新的标签页中打开一个PDF文件。

XHTML

<p:commandButton onclick="this.form.target = '_blank'"
                 actionListener="#{managedBean.openFile(file)}"
                 ajax="false" />

Managed bean

public void openFile( File file ) {
FacesContext facesContext = FacesContext.getCurrentInstance();
        ExternalContext externalContext = facesContext.getExternalContext();
        HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
        BufferedInputStream input = null;
        BufferedOutputStream output = null;

        try {
            // Open file.
            input = new BufferedInputStream(new FileInputStream(file), 10240);

            // Init servlet response.
            response.reset();
            // lire un fichier pdf
            response.setHeader("Content-type", "application/pdf"); 
            response.setContentLength((int)file.length());

            response.setHeader("Content-disposition", "attachment; filename=" + node.getNomRepertoire());
            response.setHeader("pragma", "public");
            output = new BufferedOutputStream(response.getOutputStream(), 10240);

            // Write file contents to response.
            byte[] buffer = new byte[10240];
            int length;
            while ((length = input.read(buffer)) > 0) {
                output.write(buffer, 0, length);
            }

            // Finalize task.
            output.flush();
        } finally {
            // Gently close streams.

                output.close();
                input.close();
        }
}

问题在于我使用这个方法时只下载了文件。供您参考,我正在遵循这篇文章:http://balusc.omnifaces.org/2006/05/pdf-handling.html
1个回答

7

你应该进行修改

response.setHeader("Content-disposition", "attachment; filename=" + node.getNomRepertoire());

进入

response.setHeader("Content-disposition", "inline; filename=" + node.getNomRepertoire());

所以,使用 inline 而不是 attachment

另请参阅:


只是想知道是否可能从managedBean中使用onclick="this.form.target = '_blank'"?! - user6788711
你可以在bean中创建一些JavaScript并将其传递到前端,但这会使事情变得过于复杂。不确定this是否有效,因为PF包装了onclick。如果有效,请尝试document.getElementById('yourFormId').target = '_blank' - Jasper de Vries

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接