如何在 JSF 中显示 PDF,其中包含来自 ServletResponse 的内容



在我的应用程序中,我使用jsf和richfaces,我想在Web浏览器中显示生成的pdf,我已经在服务器端生成了这个PDF,它在ServletResponse中可用,但我无法在我的网页中显示它。

试过这个问题,但它没有解决我的问题。

是否有任何库或特殊方法可以做到这一点?

下面给出了我试图做的事情。

    <h:commandLink rendered="#{ fileImportOptionsViewBean.isFileExist(status.myPdf) }" action="#
    {fileImportOptionsViewBean.downloadFile(satus.myPdf)}" target="_blank">

<h:graphicImage url="../../resources/xyz/icons/pdf.png" /></h:commandLink>

下载文件方法

public void downloadFile(String filePath){
    try {           
        File file=new File(filePath);
        if(file.exists()){
            FacesContext fc=FacesContext.getCurrentInstance();
            ExternalContext ec=fc.getExternalContext();
            ec.responseReset();
            ec.setResponseContentType("application/pdf");
            ec.setResponseHeader("Content-Disposition", "inline; filename="" + file.getName() + """); 
            ec.setResponseBufferSize(8192);
            OutputStream output = ec.getResponseOutputStream();                       
            URL url = file.toURL();
                            try(
                                BufferedInputStream bis = new BufferedInputStream(url.openStream());
                                BufferedOutputStream bos = new BufferedOutputStream(output);             
                             ){
                                byte[] buff = new byte[8192];
                                int bytesRead;
                                while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
                                bos.write(buff, 0, bytesRead);              
                                 }                      
                            }
            fc.responseComplete(); 
        }

    } catch (Exception e) {
    }
}

任何帮助不胜感激,谢谢。

我认为您当前的设置没有任何问题。问题很可能出在您的XHTML页面中,并且某些东西导致您的h:commandLink无法触发该事件。有关更多详细信息,请参阅此帖子,当然这将对您有所帮助。

相关内容

  • 没有找到相关文章

最新更新