Jasperreport+iReport報表設計(三)字體問題

Java開元項目JasperReport用於形成報表,報表可以導出多種格式:PDF、HTML、RTF、XLS等。在WebWork中直接集成了JasperReport的結果類型,可以用來解決Web應用的報表打印問題。本文主要討論到處PDF中中文字符和字體的幾點使用技巧。

JasperReport使用iText庫來生成PDF,報表中包括兩種字體設置:報表字體和PDF字體。報表字體用於其他形式的報表的字體設置,而PDF字體用於到處的PDF中的字體設置。PDF字體信息將傳遞給iText,由iText根據不同的字體設置,形成PDF。如果不進行特殊的設置,報表在導出PDF以後,其中的中文信息顯示不出來。本文針對這個問題,提供兩種解決方案。
iText對字體的支持,包括多種方式,詳見:http://itextdocs.lowagie.com/tutorial/fonts/getting/index.html。對於中文字體的支持,我們介紹兩種方式:
1.使用iTextAsian.jar
iTextAsian.jar是一個亞洲字體包,裏面包含幾種簡單的亞洲字體,其中包含簡體中文字體。使用iTextAsian.jar,其實是採用了iText字體解決方案中的“Fonts from jar”方式,從jar包中提取字符集編碼方式和字體。需要把iTextAsian.jar放到類路徑下,在報表文件(jrxml)中,文本區域的字體設置如下:<font pdfFontName="STSong-Light" isPdfEmbedded ="true" pdfEncoding ="UniGB-UCS2-H"/>。這樣,就能夠正常的顯示中文信息。
這種方法雖然能夠正常地顯示中文信息,但是有一個缺點,就是隻有一種字體。因爲iText官方網站提供的iTextAsian.jar包中只包含幾種簡單的亞洲字體,對於簡體中文來說,只有宋體。因此,採用這種方法生成的PDF中,中文字體只能爲宋體,無法顯示其他字體。當然,可以通過擴展iTextAsian.jar的方式解決這個問題,在這個包中增加其他的字體。但是我還沒找到其他的擴展包,也許以後會有人實現其他字體。
2.使用 TTF Files (True Type Fonts)字體文件
TTF是系統的標準字體文件,最初由Mac OS定義,後來Microsoft Windows普遍採用這種格式來定義字體文件。這也是目前我們最常用的字體格式。可以通過制定具體的字體文件的方式來指定字體。如:<font fontName="隸書" pdfFontName="STCAIYUN.TTF" size="18" isBold="true" isPdfEmbedded ="true" pdfEncoding ="Identity-H"/>
例子中我使用的是“華文彩雲”字體,STCAIYUN.TTF爲字體文件。需要注意的一點,我這裏使用的是相對路徑,在生成PDF的時候,程序會從類路徑中查找這個字體文件,你可以選擇把字體文件放到類路徑中,或者使用絕對路徑來引用這個字體文件(如:c:/windows/fonts/STCAIYUN.TTF)。不推薦採用後一種方法,因爲開發環境和使用環境中,系統的路徑可能不同,就會導致無法找到字體文件。 一種更好的解決辦法,把windows系統中fonts下的某些常用的字體打成一個jar包,然後把這個jar報放到類路徑下即可。
注意,在使用這種方式的時候,pdfEncoding 屬性要設爲"Identity-H"或者"Identity-V"。
關於iReport
iReport是一個可視化的JarsperReport設計器,可以很方便的生成報表文件。針對上述兩種解決方案,第一種方案可以直接在界面中選擇pdfFontName和pdfEncoding ,系統中已經集成了"STSong-Light" 和 "UniGB-UCS2-H",下拉列表中可以直接選到。
第二種方式下,iReport的路徑下有一個fonts目錄,其中包括一些TTF字體文件。在圖形界面中選擇pdfFontName的時候,只能選擇目錄中存在的字體文件。如果想使用其他的TTF字體,可以實現把相關的字體從windows系統的fonts目錄下拷貝到iReport的fonts路徑中,這些字體就會出現在pdfFontName的下拉列表中了。
報表中的圖片信息:
iReport設計表示,增加圖片信息的時候,以文件的絕對路徑方式取得圖片i,這種方式不好。建議把圖片放在報表存放的目錄下,用相對路徑來訪問圖片。當然,也可以通過類路徑方式訪問圖片信息,但是圖片不像字體,它是跟單個報表相關聯的,所以放在報表的目錄下比較合適。但如果在WebWork下使用,還需要在類路徑下存放圖片文件。

發佈了56 篇原創文章 · 獲贊 13 · 訪問量 24萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章