好幾年前曾將用過jasperreport,當時的設計工具為ireport,如今已經變成jasperstudio,看來eclipse成為主流已是不爭的事實了!
由於項目的需要,不得不重新學習一下這個新的工具了,總體上來說其設計思路還是不變的。想系列學習的,可以參照如下地址進行學習:http://blog.csdn.net/pigdreams/article/month/2017/02
本文只對項目中用的相關知識進行總結如下:
1、導出pdf中文問題,由於采用的是itext生成pdf,早期版本采用亞洲語言包可以滿足要求,新的版本已經不行了,需要將字體達成jar包,添加依賴。具體可參照csdn那位的博客,在此也向其表示感謝!
關於粗體、斜體的問題,如果采用的字體沒有單獨的文件,請移除相關的節點,否則在開發環境里面有效果,正式運行就會丟失效果了!
2、圖表的問題,jasperreport本身采用的是jfreechat,對於大多數項目已經能夠滿足,但對於我們項目來說,圖表個性化太強,jfreechart不能滿足要求,好在Jasperreport提供了一個 custom visualization component.
其原理是采用js繪制成svg,在填充報表時采用生成的svg(如pdf、html格式)或圖片(如word格式)進行填充。
官方有相關的地址進行說明:http://community.jaspersoft.com/wiki/custom-visualization-component-v60x
另外jasperreport libaray 本身是不帶 custom visualization 相關的jar包,可通過下載jasperreport server項目,在其中找到相關的jar包。
3、在生成報表的過程中,發現臨時生成的svg文件不能刪除,同時依賴的js文件不斷創建刪除。苦於找不到custom visualization component的源碼(jasperreport官網也沒找到),因此自能反編譯相關類了。
進行小手術!
- 判斷臨時目錄是否存在,不存在創建,不再刪除
- 對於無法刪除的svg文件的原因的是在讀取流的過程中,沒有close
4、頁面好像只有detail band可以自動調整高度,其它band除非有sub report
5、多個模板合成,可以有兩種方式。
- 先填充第一個模板,然后依次填充其它模板,所有頁面填充完成后,將第一個模板以后的頁面添加到第一個模板中。
- 采用批量導出的功能,所有模板依次填充,然后放入一個list中,采用exporter實現導出。
總的來說,個人傾向與第二種方式,可以增加更加靈活控制的參數,比如pdf可以增加bookmarker,甚至加密等。