JasperReport 配置及問題解決!

JasperReport PDF中文

來源:http://blog.sina.com.cn/s/blog_4ffe1dc90100bnt8.html

深入代碼去分析問題的原因,很快我就發現原來是jasperreports在調用itext.jar(另外一個開源項目)創建字體的時候出現了問題,查閱了itext的使用,原來它在使用亞洲字體的時候還有其他兩個包iTextAsian.jariTextAsianCmaps.jar, 並且把它們關聯到項目中,問題就解決了!

 

 在使用iReport與JasperReport作爲報表產生工具時, 中文支持是經常遇到的問題,筆者最近做的一個J2EE Web項目採用這套工具開發報表,也遇到了類似問題,本文總結了在使用iReport與JasperReport開發報表時中文支持的有關內容,希望能對讀者有所幫助.
1 運行環境
    1.1 JasperReport 1.2.8
    JasperReports是iReport的核心內容。它是一個強有力的開源報表產生工具,可以將內容輸出到屏幕上、打印機或生成PDF, HTML, XLS, CSV和XML等文件。它完全用Java編寫,並可在各種Java應用(包括J2EE或WEB應用)中用來產生動態報表內容。JasperReports組織根據在一個XML文件中定義的報表設計通過JDBC訪問關係數據庫中的數據.填充報表數據之前必須先將報表設計被編譯成一個jasper文件。
下載地址:
http://jasperreports.sourceforge.net/
    1.2 iReport 1.2 8
    iReport是一個製作Jasperreport XML文件的優秀可視化開發工具,通過它可以方便的設計報表模板。目前最高版本爲iReport 1.3.0
下載地址:
http://ireport.sourceforge.net
   1.3 iText 1.3.1
   iText是一個開放源碼的Java類庫,是用來生成PDF文件的。
下載地址:
http://itext.sourceforge.net
   1.4 iTextAsian.jar
   如果要在生成的pdf文件顯示中文等亞洲字符,還必須下載itext的亞洲字符包。
下載地址:
http://itextdocs.lowagie.com/downloads/iTextAsian.jar
以上四個包必須加到應用程序的構建路徑中或加到CLASSPATH,若是Web應用放入相應的WEB-INF/lib/中。
2 設置中文支持
    爲了在報表中能夠顯示中文,加入以上四個包還不夠(因爲以上四個包僅對報表生成及中文顯示提供了支持),必須設置報表上各顯示對象的相關屬性,各屬性設置說明如下:
   
Font        name:    宋體 (中文字體)
    PDF font name:   STSong-Light
    PDF  Encoding:  UniGB-UCS2-H(Chinese Siplified)
    PDF   Embeded: √
    如下圖所示(顯示對象的屬性設置):
 字體設置
   
注意:此三項的設置必須確保iTextAsian.jar亞洲語言包已經包含在項目中,否則出現編譯錯誤.
    若讀者覺得對每一個對象設置比較麻煩,可通過iReport的”Format”?”Fonts”菜單進行統一設置,並設成報表的默認字體。如下圖所示:
 
3可能出現的問題
   經過以上的設置,報表中文的顯示應該沒什麼問題了,筆者在報表的開發過程中遇到幾個問題,現總結如下:
 
3.1 問題描述
   在WinXp中運行iReport1.2.8,設計報表時將數據字段的字體設置成中文字體,調好格式後編譯並運行,並使用JRViewer進行預覽一切正常(中文顯示正常),但使用PDF、Excel預覽出現如下錯誤:
  
Could not load the following font :
   pdfFontName   : STSong-Light
   pdfEncoding   : UniGB-UCS2-H
   isPdfEmbedded : true
   產生原因:成成PDF的亞洲語言包沒有包含到項目中
  
解決辦法:將亞洲語言包iTextAsian.jar包含到項中,可能過iReport的”Options”?”Classpath”將iTextAsian.jar添加Classpath中或者直接將iTextAsian.jar複製到iReport安裝目錄下的lib中.若是Web項目則應該將iTextAsian.jar複製到此項目的WEB-INF/lib/中.
  
3.2 問題描述
    在WinXp中運行iReport1.2.8,設計報表時將數據字段的字體設置成中文字體,調好格式後編譯並運行,並使用JRViewer進行預覽一切正常(中文顯示正常),使用PDF、Excel預覽時無任何錯誤,但中文無法顯示(只顯示空白).
   
產生原因:報表顯示對象的PDF字體屬性設置不正確
   
解決辦法: 報表對象有關字體屬性的設置如下:
   
Font        name:         宋體 (中文字體)
    PDF font name:  STSong-Light
    PDF Encoding:   UniGB-UCS2-H(Chinese Siplified)
    PDF Embeded:  true
   即如下圖所法
 
   3.3問題描述
    生成PDF、Excel文件時,中文顯示一切正常,但生成Html文件時顯示亂碼
 
產生原因:主要是網頁編碼問題
   
解決方法
 在JSP頁中生成Html時,設置 <%@ page contentType="text/html;charset=GB2312" %> 
 在Servlet中生成Html時,response.setContentType("text/html;charset=GB2312");
  若用戶對項目進行了統一編碼設定及過濾,則需要另作考慮,但主要還是集中在編碼問題上.例如:筆者最近做的項目是其於Struts的,對編碼進行了統一和過濾處理,生成Html頁面時無需指編碼就可正確生成Html頁面,並不會出亂碼,若設置成charset=GB2312反而出現了亂碼.總之,對編碼的統一與處理還是比較嘛煩的事.
    另外, 我們通過查看iReport生成的jrxml(<?xml version="1.0" encoding="UTF-8" ?>)文件可以發現, iReport保存的漢字都是UTF-8編碼。瞭解它的編碼可以有助於我們統一編碼方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章