我也不知道 Jasperreports 什麼時候改作法,這篇筆記用的是 4.6 這個版本,離最新的 4.7.1 應該不會有差別。
中文顯示可以分成三個部份:
- iReport Preview
- iReport 產出 PDF
- Java 產出 PDF
以下逐項說明。
先在 iReport Designer 裡輸入中英文與數字,甚至難字。
然後到 Preview 看看,沒問題。
然後將 Preview 從 Interval Preview 改成 PDF Preview。
再 Preview 一次,PDF 的中文全不見了。
解答:為 iReprot 安裝中文字型,以及中文欄位選用中文字型。
開啟「工具 > 選項 > iReport > Fonts > Install Font」。
True Type Font 輸入微軟正黑體「C:\Windows\Fonts\msjh.ttf」,或者標楷體「C:\Windows\Fonts\kaiu.ttf」、新細明體「C:\Windows\Fonts\mingliu.ttc」,這是 Win7 的路徑。
下一頁的 PDF Encoding 選 Identity-H(Unicode with horizontal writing),然後按下完成。
可以在「工具 > 選項 > iReport > Fonts」看到剛安裝的字型。
最後為中文欄位選用中文字型。
完成後到 Preview 看看,噹,PDF 也有中文囉!
事情結束了嗎?不,正要開始,接下來要用 Java 來產生 PDF,這才是重點。
先在 iReport 開啟報表屬性,將 Language 改成 Java,然後重新編譯報表或 Preview 也有編譯的效果。
再用 Java 產出 PDF 報表,記得要附上剛產生的 jasper 檔。
// 先用 iReport 套用 Template 做出一個 Jasper 檔來 // iReport 預設產生 XML 檔,在預覽過後,在 XML 所在目錄就會產出 Jasper 檔 String jsFile = "D:/_Download/report4.jasper"; String outFile = "D:/_Download/report4.pdf"; try { // 產出報表 JasperPrint print = JasperFillManager.fillReport(jsFile, new HashMap<String, Object>(), new JREmptyDataSource()); JRExporter exporter = new JRPdfExporter(); exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outFile); exporter.setParameter(JRExporterParameter.JASPER_PRINT, print); exporter.exportReport(); } catch (JRException e) { e.printStackTrace(); }PDF 產生了,但是中文不見了。
剛才 iReport 無法顯示中文是因為不知道中文字型,那現在也是一樣的狀況嗎?假設是,那怎麼告訴 Java 字型在哪呢?
解答:將用到的中文字型「打包」成 jar 檔,丟到專案裡。
但是!但是!這個打包不是壓縮改檔名就可以的。
回到 iReport 的「工具 > 選項 > iReport > Fonts」,左鍵加 ctrl 將「有用到的中文字型」統統選起來,然後按下「Export as extension」,檔名輸入「fonts.jar」(其他名字也行)。
將剛的 Java 專案關聯到這個 fonts.jar,再產出一次 PDF。
噹噹,下班了。
---
---
---
放在 Java 程式執行時可以讀到的地方,以最常見的 Java Webapp 為例,就是放在 WEB-INF/lib 下就可以了。
回覆刪除想不到又再次藉由您的文章解決了PDF 中文顯示的問題!
回覆刪除文章寫得很清楚!!!