JasperReport那些事兒(五)——再說表格式報(bào)表
上一篇文章就有人評(píng)論說Jasperreport不適合中國式報(bào)表。我就很奇怪了,我從來沒說Jasperreport適合中國式報(bào)表(當(dāng)然我也沒說不適合)。我寫文章的初衷就是分享技術(shù),工具這種東西向來是以需求為導(dǎo)向的,合適就用,不合適沒錢買好的,也湊合用用。但是程序員往往是沒權(quán)去決定那些事兒的,程序員應(yīng)該是一群能用有限的資源去解決問題的人,何況開源產(chǎn)品使用成本和學(xué)習(xí)成本都比較低,不用白不用。要一些人看著刺眼或打著打廣告的心態(tài),我就勸你別看,方正我是會(huì)繼續(xù)寫下去的。扯遠(yuǎn)了,回到正題吧。
最近博客留言有問怎么做“單元格合并的報(bào)表”,單看這定義,無從下手啊,我也不知道我理解的意思對不對,上星期做了一個(gè)我理解的“單元格合并的報(bào)表,希望和那位留言的博友的意思有一點(diǎn)重合就好了。看一下效果吧。
數(shù)據(jù)源結(jié)構(gòu):
這里還要借助子報(bào)表,子報(bào)表是Jasperreport最為強(qiáng)大的功能,也是最具擴(kuò)展性的功能組件(純粹個(gè)人意見)。
做這樣的表格我是用了三個(gè)報(bào)表模板。
第一個(gè),DepartmentList.jrxml.(編譯后為jasper后綴名)
第二個(gè),DepartmentList_department.jrxml.
第三個(gè),DepartmentList_department_person.jrxml.
調(diào)用關(guān)系是第一個(gè)模板調(diào)用第二個(gè),第二個(gè)模板再調(diào)用第三個(gè)。
DepartmentList.jasper.
|-DepartmentList_department.jasper.
|-DepartmentList_department_person.jasper.
在第二個(gè)報(bào)表給子報(bào)表傳遞數(shù)據(jù)源時(shí),表達(dá)式要像下面這樣寫。這樣寫主要目的是選擇當(dāng)前department節(jié)點(diǎn)下的所有person節(jié)點(diǎn)。
這里值得一提的是在第二張報(bào)表的部門那個(gè)textfield里有個(gè)屬性需要注意,Stretch Type設(shè)置為"relative to band height",就是讓textfield自動(dòng)往下延伸,延伸到與其所在的區(qū)域(band)相同的高度。
說句實(shí)話,在Jasperreport里面處理表格的確是一件很麻煩的事(指以XML為數(shù)據(jù)源),像上文提到的表格是很簡單的例子,但是卻要用到三個(gè)模板。而且Jasperreport報(bào)表是線性渲染(由上到下),所以無論從靈活性和還是效率來說,都比不上像Excel那種以表格為導(dǎo)向類型的報(bào)表工具。但是還是那句話,工具這種東西向來是以需求為導(dǎo)向的,合適就用,不合適沒錢買好的,也湊合用用。
報(bào)表模板及數(shù)據(jù)源點(diǎn)這里下載。
程序員的一生其實(shí)可短暫了,這電腦一開一關(guān),一天過去了,嚎;電腦一開不關(guān),那就成服務(wù)器了,嚎……
最近博客留言有問怎么做“單元格合并的報(bào)表”,單看這定義,無從下手啊,我也不知道我理解的意思對不對,上星期做了一個(gè)我理解的“單元格合并的報(bào)表,希望和那位留言的博友的意思有一點(diǎn)重合就好了。看一下效果吧。

數(shù)據(jù)源結(jié)構(gòu):
<?xml version="1.0" encoding="utf-8" ?>
<DepartmentList>
<list>
<Department>
<name>行政部</name>
<personList>
<person>
<age>35</age>
<gender>男</gender>
<name>張三</name>
</person>
</personList>
</Department>
<Department>
<name>技術(shù)部</name>
<personList>
<person>
<age>30</age>
<gender>男</gender>
<name>李四</name>
</person>
<person>
<age>28</age>
<gender>女</gender>
<name>王五</name>
</person>
</personList>
</Department>
</list>
</DepartmentList>
都說中國的報(bào)表是大表中有小表,這其實(shí)和關(guān)系數(shù)據(jù)庫的表格概念有很大的不同。關(guān)系數(shù)據(jù)庫的表格是簡單的二維表格,不會(huì)在表格里再嵌套表格。那遇到這類型的表格應(yīng)該怎么處理呢?我在前面的文章有講怎么制作簡單的二維表格,所以這篇主要是解決表格前面的單元格合并的問題。<DepartmentList>
<list>
<Department>
<name>行政部</name>
<personList>
<person>
<age>35</age>
<gender>男</gender>
<name>張三</name>
</person>
</personList>
</Department>
<Department>
<name>技術(shù)部</name>
<personList>
<person>
<age>30</age>
<gender>男</gender>
<name>李四</name>
</person>
<person>
<age>28</age>
<gender>女</gender>
<name>王五</name>
</person>
</personList>
</Department>
</list>
</DepartmentList>
這里還要借助子報(bào)表,子報(bào)表是Jasperreport最為強(qiáng)大的功能,也是最具擴(kuò)展性的功能組件(純粹個(gè)人意見)。
做這樣的表格我是用了三個(gè)報(bào)表模板。
第一個(gè),DepartmentList.jrxml.(編譯后為jasper后綴名)

第二個(gè),DepartmentList_department.jrxml.

第三個(gè),DepartmentList_department_person.jrxml.

調(diào)用關(guān)系是第一個(gè)模板調(diào)用第二個(gè),第二個(gè)模板再調(diào)用第三個(gè)。
DepartmentList.jasper.
|-DepartmentList_department.jasper.
|-DepartmentList_department_person.jasper.
在第二個(gè)報(bào)表給子報(bào)表傳遞數(shù)據(jù)源時(shí),表達(dá)式要像下面這樣寫。這樣寫主要目的是選擇當(dāng)前department節(jié)點(diǎn)下的所有person節(jié)點(diǎn)。
((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).dataSource("/DepartmentList/list/Department["+$V{REPORT_COUNT}.intValue()+"]/personList/person")
REPORT_COUNT變量是指當(dāng)前detail band內(nèi)的計(jì)數(shù)器。例如,從父報(bào)表傳過來的數(shù)據(jù)源的節(jié)點(diǎn)數(shù)是3,則REPORT_COUNT會(huì)從1到3遍歷,detail band也會(huì)渲染3次。這里的XPATH是遍歷了第一個(gè)到第三個(gè)Department下的所有person節(jié)點(diǎn)。這里值得一提的是在第二張報(bào)表的部門那個(gè)textfield里有個(gè)屬性需要注意,Stretch Type設(shè)置為"relative to band height",就是讓textfield自動(dòng)往下延伸,延伸到與其所在的區(qū)域(band)相同的高度。

說句實(shí)話,在Jasperreport里面處理表格的確是一件很麻煩的事(指以XML為數(shù)據(jù)源),像上文提到的表格是很簡單的例子,但是卻要用到三個(gè)模板。而且Jasperreport報(bào)表是線性渲染(由上到下),所以無論從靈活性和還是效率來說,都比不上像Excel那種以表格為導(dǎo)向類型的報(bào)表工具。但是還是那句話,工具這種東西向來是以需求為導(dǎo)向的,合適就用,不合適沒錢買好的,也湊合用用。
報(bào)表模板及數(shù)據(jù)源點(diǎn)這里下載。
程序員的一生其實(shí)可短暫了,這電腦一開一關(guān),一天過去了,嚎;電腦一開不關(guān),那就成服務(wù)器了,嚎……
posted on 2009-03-16 22:40 Heis 閱讀(6234) 評(píng)論(9) 編輯 收藏 所屬分類: JasperReport那些事兒