【问题标题】:Java - Blank PDF with HttpServletJava - 带有 HttpServlet 的空白 PDF
【发布时间】: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


【解决方案1】:

我终于找到了解决方案!我的代码与此无关,这一直是 Grunt 问题。出于某种原因,Grunt 将发送到浏览器的 PDF 转换为错误的编码。我不得不改变

“grunt-contrib-connect”:“^0.8.0”“grunt-contrib-connect”:“~0.5.0”

然后我跑了

npm 安装

这解决了我的问题。解决方法在这里找到了

https://github.com/drewzboto/grunt-connect-proxy/issues/73#issuecomment-59532082

我无法解释为什么最新版本的 grunt-contrib-connect 以错误的方式对 PDF 文件进行编码。现在我想知道为什么会这样。

【讨论】:

    猜你喜欢
    • 2016-05-28
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 2023-01-21
    • 2012-09-04
    • 2017-04-24
    • 2020-07-17
    相关资源
    最近更新 更多