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














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















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