Spring MVC JasperReport 導出Html格式報表圖片不顯示


最近這個項目使用了JasperReport組件,最開始使用的時候,是配置成了由org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView對報表模板進行解析,這樣的配置可以帶來一些好處,比如可以根據format關鍵字不同,動態生成html,pdf,xls,csv四種類型的報表,但是最近在使用的時候碰到問題了。 
設計了一種圖表結合的報表,使用html,pdf導出的時候圖片能夠正常顯示 ,但是導出html格式后,報表中的圖不見了。 
 
在網上查找后發現需要設置下面四個參數: 
1.JRHtmlExporterParameter.IMAGES_DIR_NAME 
2.JRHtmlExporterParameter.IMAGES_URI 
3.JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN 
4.JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR 
 
一開始是想結合Spring MVC的配置設置的,但是使用exporterParameters無法將上述參數設置到JasperReportHtmlView中,只好作罷。動手自己寫了一個。步驟如下: 
 
1.獲得報表模板存放路徑。 
String jasperFilePath = new StringBuilder(“WEB-INF/reports/”).append(jasperFileName).append(“.jasper”).toString(); 
 
2.獲得報表模板文件 
File reportFile = getWebApplicationContext(request).getResource(jasperFilePath).getFile(); 
 
3.根據報表模板文件生成報表打印對象 
JasperPrint print = JasperFillManager.fillReport(reportFile.getAbsolutePath(), model, dataSource.getConnection()); 
 
4.創建Html導出對象 
JRHtmlExporter exporter = new JRHtmlExporter(); 
 
5.設置圖片文件存放路徑,此路徑為服務器上的絕對路徑 
String imageDIR = webContext.getResource(“reportFiles”).getFile().getAbsolutePath(); 
exporter.setParameter(JRHtmlExporterParameter.IMAGES_DIR_NAME, imageDIR); 
 
6.設置圖片請求URI 
String imageURI = request.getContextPath() + “/reportFiles/”; 
exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, imageURI); 
 
7.設置導出圖片到圖片存放路徑 
exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.TRUE); 
exporter.setParameter(JRHtmlExporterParameter.IS_OUTPUT_IMAGES_TO_DIR, Boolean.TRUE); 
 
8.設置導出對象 
exporter.setParameter(JRExporterParameter.JASPER_PRINT, print); 
 
9.設置導出方法 
exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, response.getWriter()); 
 
10.設置HTTP Head 
response.setContentType(“text/html”); 
 
11.執行導出 
exporter.exportReport(); 
 
至此,自定義的導出方法完成了。 需要特別注意的是JRHtmlExporterParameter.IMAGES_DIR_NAME和JRHtmlExporterParameter.IMAGES_URI雖然執行的是相同的目錄,但是表達方式不一樣,IMAGES_DIR_NAME是文件系統的絕對路徑,而IMAGES_URI是http請求時的uri。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM