了解jasperreport ,讓web報表跑得更好
一、為什么是jasperreport
很簡單兩點:
1 免費
2 在大多數(shù)開源產品中最能滿足本人/公司的需求.
如果要一句話總結那么就是 "適合就好!" ,其次再想插一句"其實jasperreport可以做得更好,只是缺少大家去發(fā)現(xiàn)。"
在erp軟件開發(fā)中一套強大易用的報表工具還是相當重要的地位,在這里我只針對一些日常業(yè)務報表.
jasperreport + ireport 報表套裝在普通的報表中已做得很不錯:流水賬式的,分組報表都可以輕松實現(xiàn).在這里提出的是一些相對特別以及少用到的報表設計問題.
當前版本 : jasperreport 1.1.0
ireport : 0.5.2
二、問題與解決
1.操作
初用ireport 設計報表(特別是早期的版本)感覺還是比較原始,相對于birt 類似于在 Dreamweaver中畫table 式的設計還是有點差距.但新版本(0.5.2)中也有不小的改善,增加了很多快速對齊,格式化的工具欄以及快捷操作方式.通過結合這些操作還算是方便了不少.
2.分頁
剛接觸jasper report ,無論是看其官方的example還是自己動手設計報表, html view 總給人很深的印象:"怎么字體那么小,而且實際打印一下,分頁功能并沒真正實現(xiàn)"
經過客戶一輪的抗義,最終還是下定決心去修補一下,
其實jasper report 原理還是挺簡單:
它默認的分頁方式是能過一輪的高度計算,再用兩個<br>就以為了事了.














解決方案:
好在jasperreport還提供了很好的擴展方案.它允許我們自定義分頁方式(就是說在兩頁/table之間能讓我們放自己的代碼),自己定義betweenPagesHtml 就OK了,可以能過CSS定義分頁.在這里,我就直接改它代碼算了.大家可以自己選擇.
net.sf.jasperreports.engine.export.JRHtmlExporter















3. 打印
分頁解決后可以發(fā)現(xiàn)當報表預覽時真的能一頁一頁分得很好.卻又發(fā)現(xiàn)了一個問題.報表明顯不能滿一張A4張大小(ireport 設計選擇的是A4紙張),疑惑了一際子,其實不能算是BUG.
ireport 報表屬性中明顯(21 * 29.7 CM) 一張A4紙的大小,為什么HTML出來的效果卻明顯小的那么多了.其實這與計算機的分辨率有關
計算機中的分辨率,普遍是72 象素/英寸,而打印機普通是300象素/英寸.
jasperreport 與ireport 默認單位是px,我猜想如果用CM做單位的話可以解決這個問題.但在這里我們的做法是盡量加大報表設計時的寬度與高度.另一個要注意的是記得將所有頁邊距設為0,因為這些設置在打印的時候已在IE/瀏覽器中設定了,不用重復.
4.分欄
以前沒多注意,但剛用ireport新版本時可以發(fā)現(xiàn)在報表屬性設計的時候可以設置欄.這下子如果當報表主體部分列數(shù)不多時實現(xiàn)分欄顯示,以節(jié)省紙張.
5.斑馬線式顯示報表主體
有時我們想讓報表更美化,讓用戶更方便地觀看數(shù)據(jù),可以設置兩種色相隔.這種效果在jasperreport 中的example中有demo一下,大家如果想學習可以下載看看.
6.交叉報表
關于jasperreport的交叉報表設計網上還是有不小的討論,而真正實現(xiàn)的不多.我觀察過大多用jasperreport實現(xiàn)都是偽交叉報表.并不是真正實現(xiàn)真正的動態(tài)行與列.
其實在jaspert report下載包中還是有個交叉報表的實現(xiàn)example(crosstabs),只不過據(jù)我了解,現(xiàn)在ireport還不能實現(xiàn)設計.只能通過手工寫jrxml文件實現(xiàn).本人小試一下,還是挺不錯的.
三、待研究
通過繼承net.sf.jasperreports.engine.export.JRHtmlExporter ,還是能擴展不小的功能.例如用CSS格式化,可以大大減小代碼量,動態(tài)列/可設列寬度大大增強我們的報表功能.
現(xiàn)本人初部實現(xiàn)100%寬度,不再用jasperreport中hardcode列度等等,以下三點還有待時間去跟進:)
1.動態(tài)列
2.可設列寬度
3.CSS設計
posted on 2005-11-28 20:35 一凡@ITO 閱讀(13516) 評論(6) 編輯 收藏 所屬分類: Bi report Tools