我正在使用JasperReports生成PDF和HttpServlet以将二进制数据发送到浏览器。问题是从客户端下载的生成的PDF最终是一个损坏的pdf,因此PDF查看器显示一个空白的PDF。
起初,我认为这可能是一个JasperReports问题,但我将PDF保存到一个文件中,它就像一个魅力。
JasperExportManager.exportReportToPdfFile(jasperPrint, "/home/user/Desktop/Example.pdf");
// jasperPrint is the rendered JasperReport
所以它可能是与HttpServlet相关的问题。我发送数据的方式如下:
HttpServletResponse response;
byte[] out = JasperExportManager.exportReportToPdf(jasperPrint);
// jasperPrint is the rendered JasperReport
response.reset();
response.setHeader("Content-disposition", "attachment;filename=\"Example.pdf\"");
response.setContentType("application/pdf");
response.setHeader("Cache-Control", "max-age=0");
response.setContentLength(out.length);
response.setHeader("Content-Length", String.valueOf(out.length));
response.getOutputStream().write(out, 0, out.length);
response.getOutputStream().flush();
response.getOutputStream().close();
// Right after that, the browser asks me to download the file
// and this is the moment when I got a blank PDF
最重要的是,在我提出这个问题之前,我已经检查了这个答案 Blank PDF while downloading
还有一件事:在QA环境下下载PDF可以很好地工作(没有空白PDF),在Windows机器上运行JBoss服务器。在我的本地环境中,我得到了一个空白的PDF,如前所述,在Linux机器上运行JBoss服务器。
所以我想知道:我如何检查我的Jboss设置来解决问题?根据上一个问题,服务器可能忽略或压缩可能是二进制数据的问题,我不太确定。
我应该查看我的web.xml文件吗?
感谢您的帮助!
答案 0 :(得分:0)
我终于找到了解决方案!我的代码与此无关,一直是Grunt问题。出于某种原因,Grunt将发送到浏览器的PDF转换为错误的编码。我不得不改变
" grunt-contrib-connect":" ^ 0.8.0" 到" grunt-contrib-connect" :" ~0.5.0" 。
然后我跑了
npm install
这解决了我的问题。解决方案在这里找到
https://github.com/drewzboto/grunt-connect-proxy/issues/73#issuecomment-59532082
我无法解释为什么最新版本的 grunt-contrib-connect 以错误的方式编码PDF文件。现在,我想知道其工作原理。