java - 在服务器上部署时发布导出到 PPTX 的下载报告

标签 java jasper-reports powerpoint

我们使用 JasperReports 5.6.1 生成报告,并允许将相同的模板导出为 PDF 或 Powerpoint。在本地运行时,下载的 PDF 和 PPTX 文件可以完美运行。当我们部署到我们的服务器时,PDF 工作正常,但无法打开 PPTX 文件。当我们在本地运行时,它被部署到 tomcat 上,但是当部署到服务器上时,它运行在 Websphere 上。

我尝试并注意到的事情:

  • 我已经检查了日志,没有任何异常或任何值得关注的地方。
  • 下载的文件通常比我们在本地运行时得到的文件稍大。
  • 如果我将文件的扩展名更改为 zip,然后取消存档。文件结构和文件名是相同的,文件实际上是相同的文件大小。内容似乎只是在每张幻灯片中找到的对象的名称不同。
  • 认为这可能是 x 类型文件的问题,我也尝试导出到 xlsx,只是为了看看会发生什么,并且它在相同的模板上工作正常。
  • 我添加了一个众所周知的静态 pptx 文件,并且可以毫无问题地从服务器下载它。我这样做是为了尝试从问题中消除服务器配置,并感觉它有效,我假设它与我的代码有关,只是不确定是什么。

这是我们编写响应的代码:

if ("xlsx".equals(type)) {
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setHeader("Content-Disposition", "attachment; filename=" + filename + ".xlsx");
} else if ("pptx".equals(type)) {
    response.setContentType("application/vnd.openxmlformats-officedocument.presentationml.presentation");
    response.setHeader("Content-Disposition", "attachment; filename=" + filename + ".pptx");
    response.setCharacterEncoding("UTF-8");
} else {
    response.setContentType("application/pdf");
    response.setHeader("Content-Disposition", "attachment; filename=" + filename + ".pdf");
}
try (final ByteArrayOutputStream reportResult = reportsService.generateReport(
        getDeal(userId, dealId, sessionStore),
        getScenarioModel(userId, dealId, scenarioId, sessionStore), reportId, type)) {
    configureResponse(response, type, reportResult, dealId + "-" + scenarioId);
    // Write to http response
    reportResult.writeTo(response.getOutputStream());
}

response.flushBuffer();

我已经没有关于故障排除步骤的想法,而且无法在本地重现,我发现很难诊断。

最佳答案

这有点摸不着头脑,但您确定在您的 WebSphere 实例中正确配置了 MIME 类型吗? (我意识到在响应中设置内容类型应该避免为该 MIME 类型配置 Web 服务器的要求,但它毕竟是 WebSphere ;-))

我敢打赌 PDF 是配置的 MIME 类型,但 PPTX 不是。你可以检查一下吗?

  1. 登录 WAS 管理控制台
  2. 转到虚拟主机
  3. 单击名为 MIME 类型的链接

( here's a more detailed technote )

IIRC,不像 Tomcat(缺少更好的术语)是一种“捆绑的”一体式 http 堆栈和 servlet 容器,WebSphere 有一个单独的 http 堆栈(以及每个应用程序的单独 JVM) ,因此对于更简单的容器来说,可能需要配置就不足为奇了。

关于java - 在服务器上部署时发布导出到 PPTX 的下载报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26418347/

相关文章:

java - Jasper 报告文本案例使用

java - Jasper 报告不显示图像

windows - 如何在 Windows 上同时搜索多个 Powerpoint 和 PDF 文件中的文本?

excel - 如何使用 vba 更新 powerpoint 2010 中嵌入的 Excel 链接

c# - 如何以自动方式将 OLEObject 的内容保存为文件?

java - 事件调度线程 - 报告

java - 使用 Jasypt 时获取密码 Salt

java - JRPdfExporter 不工作

java - 未找到类异常hadoop

java - 使用另一个列表对一个列表进行排序。根据第二个列表交换项目