【发布时间】:2018-02-10 05:07:11
【问题描述】:
我正在使用 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 文件吗?
感谢您的帮助!
【问题讨论】:
-
您是否已在客户端保存损坏的 pdf 并对其进行分析?可能你在它前面找到了一些html...
-
是的,我分析过,内容中到处都是问号。我要再检查一次以防万一,但我找不到一些 html
-
问号...听起来在某些阶段您的 pdf 被作为文本处理。不过,我在您的代码摘录中没有意识到这一点。
-
抱歉,我没有提到一个重要的细节:在 QA 环境下下载 PDF 非常好(没有空白 PDF),在 Windows 机器上运行 JBoss 服务器。在我的本地环境中,如前所述,我得到一个空白 PDF,在 Linux 机器上运行 JBoss 服务器。这就是为什么我想知道这是否是配置问题。我将使用此信息更新我的帖子。
-
而且我使用 Grunt 在本地环境中运行服务器,因此也可能是编码问题。也许通过代理下载的 PDF 被转换为错误的编码。有道理
标签: java jasper-reports export-to-pdf