2014-10-17 18 views
7

我們正在使用JasperReports 5.6.1生成我們的報告,並允許將相同的模板導出爲PDF或Powerpoint。在本地運行時,PDF和PPTX文件下載完美。當我們部署到我們的服務器時,PDF工作正常,但無法打開PPTX文件。當我們在本地運行時,它被部署到tomcat,但是當部署到服務器時,它將在Websphere上運行。發佈下載報告在服務器上部署時導出到PPTX

事情我試過,發現:

  • 我檢查了日誌,沒有異常或任何提出任何眉毛。
  • 下載的文件通常比我們在本地運行時獲得的文件稍大。
  • 如果我將文件的擴展名更改爲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(); 

我已經用完了對故障排除步驟的想法,而不能在本地複製它,我發現它很難診斷。

+0

有沒有人得到這個問題的解決方案?我們正在努力解決同一問題。任何人都可以幫忙嗎? – 2016-10-11 14:04:47

+0

類路徑設置?同一版本的Java本地和服務器端?相同的JasperReports庫版本?所有依賴庫安裝?相同的版本?記錄測試決策樹? (另外,對於未來的維護者的愛,請刪除重複的代碼...) – 2016-10-11 21:42:23

回答

3

這是在黑暗中的一點點,但是您確定在您的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),因此配置並不奇怪在那裏可能需要一些簡單的容器。

+0

是的,我同意,你應該這樣做,如果它缺少,你應該添加你的MIME類型('應用程序/ vnd。openxmlformats-officedocument.presentationml.presentation')那裏 – borowis 2016-10-18 12:27:24

相關問題