1. 程式人生 > >SpringMVC與iReport整合開發時的PDF中文顯示處理

SpringMVC與iReport整合開發時的PDF中文顯示處理

  鑑於有不少網友問到《SpringMVC與iReport(JasperReports) 5.6整合開發例項》這篇技術部落格中,雖可以輸出PDF格式的報表,但報表內容中若包含中文漢字,則無法正常顯示。的確,整合開發例項中涉及到的PDF格式報表是不支援中文顯示的,因為我的初衷是讓大家熟悉SpringMVC與iReport的整合過程,並起到一個拋磚引玉的作用,所以PDF報表能否顯示中文漢字壓根沒在考慮範圍之內。

  既然現在有不少網友遇到了這樣的問題,剛好今天稍微有些空閒,就PDF如何顯示中文的問題做下說明。

一、特別說明:

  開始本示例之前,有必要先閱讀我先前釋出的《SpringMVC與iReport(JasperReports) 5.6整合開發例項》

這篇博文,只有熟悉了SpringMVC與iReport的整合基礎之後,才能更容易上手本示例教程。

  開始之前,先來預覽下最終的報表效果:

  

二、開發環境

  • 作業系統: 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報表。

六、Demo原始碼下載