SpringMVC與iReport整合開發時的PDF中文顯示處理
鑑於有不少網友問到《SpringMVC與iReport(JasperReports) 5.6整合開發例項》這篇技術部落格中,雖可以輸出PDF格式的報表,但報表內容中若包含中文漢字,則無法正常顯示。的確,整合開發例項中涉及到的PDF格式報表是不支援中文顯示的,因為我的初衷是讓大家熟悉SpringMVC與iReport的整合過程,並起到一個拋磚引玉的作用,所以PDF報表能否顯示中文漢字壓根沒在考慮範圍之內。
既然現在有不少網友遇到了這樣的問題,剛好今天稍微有些空閒,就PDF如何顯示中文的問題做下說明。
一、特別說明:
開始本示例之前,有必要先閱讀我先前釋出的《SpringMVC與iReport(JasperReports) 5.6整合開發例項》
開始之前,先來預覽下最終的報表效果:
二、開發環境
- 作業系統: Windows 7 x64
- JDK: JDK 1.7.0_79 x64
- 開發IDE: Eclipse Luna Service Release 2 (4.4.2) x64
- Maven: Apache Maven 3.2.3
三、新增PDF中文顯示依賴包itextasian
PDF中文顯示需要itext和itextasian這兩個jar檔案的支援,尤其是itextasian,PDF報表能否顯示中文就靠它了。很多網友肯定都知道這一點,但為什麼還是不能正確顯示中文呢?原因有二:要麼itextasian這個包有問題,要麼報表模板設計有問題。
其實這兩個包在iReport的安裝目錄下也有,他們位於:${iReport安裝根目錄}\ireport\modules\ext下:
另外一點需要注意的是,我們的專案是使用Maven來管理Jar包依賴的,因此需要將上述兩個Jar包匯入到Maven本地庫中,然後在專案POM檔案中新增依賴。因此我已經寫好了批處理,雙擊對應的bat批處理指令碼即可將上述jar包匯入到Maven本地庫中(位於本專案的跟目錄下)。
然後在專案POM檔案中新增itextasian依賴:
<!-- iReport PDF中文支援 --> <dependency> <groupId>com.lowagie</groupId> <artifactId>itextasian</artifactId> <version>2.1.7.js2</version> </dependency>
四、報表模板設計
1、在報表模板中新增一個“Style”,暫且命名為“zh_CN”。
2、設定樣式“zh_CN”的<Pdf Font name>和<Pdf Encoding>兩項引數:
3、指定顯示欄位使用樣式“zh_CN”。
當然也可以不使用“Style”的方式,而是為每個欄位都指定<Pdf Font name>和<Pdf Encoding>這兩項引數,不過這樣會很繁瑣。記得儲存、編譯模板檔案。
五、編寫Controller方法
/**
* 返回iReport報表檢視,支援PDF顯示中文
* @param model
* @return
*/
@RequestMapping(value = "/reportChs", method = RequestMethod.GET)
public String reportChs(Model model) {
// 報表資料來源
JRDataSource jrDataSource = new JRBeanCollectionDataSource(JavaBeanPerson.getListChs());
// 動態指定報表模板url
model.addAttribute("url", "/WEB-INF/jasper/MvcIReportChsExample.jasper");
model.addAttribute("format", "pdf"); // 報表格式
model.addAttribute("jrMainDataSource", jrDataSource);
return "iReportView";
}
釋出專案,通過連結:http://localhost:8080/mvc-ireport-chs/reportChs訪問生成的PDF報表。