Heis的Blog

          保持簡(jiǎn)單,保持愚蠢
          隨筆 - 29, 文章 - 1, 評(píng)論 - 122, 引用 - 0
          數(shù)據(jù)加載中……

          JasperReport那些事兒(六)——制作分頁(yè)式報(bào)表

              之前介紹的一些報(bào)表都是單頁(yè)式的報(bào)表,就是格式都一樣。如果要生成一份有不同樣式的報(bào)表,這要怎么做呢?就像一份保險(xiǎn)公司保單,可能有產(chǎn)品介紹、收益表、建議書(shū)、最后還有合同,這都要求不同的報(bào)表分頁(yè)顯示。這一篇將給你介紹怎么讓報(bào)表分頁(yè)。
              先來(lái)看一下效果。

              這份報(bào)表沿用了上一篇的報(bào)表,只是在這個(gè)基礎(chǔ)上加了分頁(yè)功能。
              實(shí)際上我只改動(dòng)了DepartmentList_department.jrxml這張報(bào)表。就在detail區(qū)域top=0處加入一個(gè)分頁(yè)符(page break),因?yàn)榉猪?yè)符需要占用1像素的高度,所以要將原來(lái)detail內(nèi)的內(nèi)容往下移一個(gè)像素,就是top=1.
             

              在Jasperreport里,強(qiáng)制分頁(yè)有兩種方法。第一種是加入分頁(yè)符(page break),就是上文提到的方式;第二種只適用group的區(qū)域(band),可以設(shè)定當(dāng)區(qū)域延伸到一定的高度就分頁(yè)。
             
             
              報(bào)表模板和數(shù)據(jù)源下載:請(qǐng)點(diǎn)這里
             
             



          程序員的一生其實(shí)可短暫了,這電腦一開(kāi)一關(guān),一天過(guò)去了,嚎;電腦一開(kāi)不關(guān),那就成服務(wù)器了,嚎……

          posted on 2009-03-28 13:57 Heis 閱讀(16051) 評(píng)論(13)  編輯  收藏 所屬分類(lèi): JasperReport那些事兒

          評(píng)論

          # re: JasperReport那些事兒(六)——制作分頁(yè)式報(bào)表[未登錄](méi)  回復(fù)  更多評(píng)論   

          不知道這個(gè)東西能不能錄改了?
          2009-03-28 16:01 | sun

          # re: JasperReport那些事兒(六)——制作分頁(yè)式報(bào)表  回復(fù)  更多評(píng)論   

          @sun
          報(bào)表的數(shù)據(jù)是依賴(lài)數(shù)據(jù)源的,修改數(shù)據(jù)源自然能修改報(bào)表內(nèi)容。
          2009-03-28 17:41 | Heis

          # re: JasperReport那些事兒(六)——制作分頁(yè)式報(bào)表  回復(fù)  更多評(píng)論   

          1、想問(wèn)一下部門(mén)這個(gè)字段能不能上下居中?像“技術(shù)部門(mén)”和“財(cái)政部門(mén)”這兩個(gè)行。
          2、還有另外一個(gè)問(wèn)題就是我的主報(bào)表嵌套一個(gè)子報(bào)表,子報(bào)表又嵌套一個(gè)子報(bào)表,其中主報(bào)表是直接使用sql語(yǔ)句;而子報(bào)告是使用javabean作為數(shù)據(jù)源的。javabean怎么從主報(bào)表傳遞給子報(bào)表。以什么型式傳遞?
          3、如果是只傳遞一層的話(huà),直接通過(guò)變量型式可以傳遞,但是現(xiàn)在是嵌套多層子報(bào)表,所以到了第二層子報(bào)表就得不到值了。
          不知道我說(shuō)的清楚沒(méi)有。
          :(
          2009-03-29 21:21 | nesta

          # re: JasperReport那些事兒(六)——制作分頁(yè)式報(bào)表  回復(fù)  更多評(píng)論   

          @nesta
          1.可以,在屬性-字體 里面有一個(gè)垂直居中的選項(xiàng)。
          2.你可以嘗試在subreport屬性當(dāng)中配置一個(gè)合適的數(shù)據(jù)源,像net.sf.jasperreports.engine.data.JRBeanArrayDataSource(Object[])或者net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(Collection)。你可以去查一下API,但是這個(gè)解決方法的思路有問(wèn)題,你為什么不統(tǒng)一數(shù)據(jù)源,這樣可以更好地處理問(wèn)題。還有你的bean是通過(guò)參數(shù)傳入,還是設(shè)想在報(bào)表里構(gòu)造?
          3.Jasperreport的參數(shù)傳遞是通過(guò)在subreport里設(shè)置傳遞的參數(shù)名,例如為ParamA,然后你再在子模板里新建一個(gè)相同名稱(chēng)的參數(shù)ParamA,就可以獲取到這個(gè)參數(shù)的值了。
          2009-03-29 22:02 | Heis

          # re: JasperReport那些事兒(六)——制作分頁(yè)式報(bào)表  回復(fù)  更多評(píng)論   

          謝謝你的回答!
          1、我也想使用統(tǒng)一的數(shù)據(jù)源,但是就是因?yàn)榻y(tǒng)一的數(shù)據(jù)源不能滿(mǎn)足要求,子報(bào)表中嵌套的子報(bào)表的數(shù)據(jù)要進(jìn)行處理過(guò)之后才能符合要求;
          2、我就是通過(guò)參數(shù)傳遞進(jìn)來(lái)的,如果是一層子報(bào)表的話(huà),我在主報(bào)表中定義的參數(shù)類(lèi)型為Object,這樣可以獲取到數(shù)據(jù),就是多層嵌套的話(huà)就不行。
          3、我試試看你說(shuō)的參數(shù)類(lèi)型為net.sf.jasperreports.engine.data.JRBeanArrayDataSource(Object[])或者 net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(Collection)
          這兩個(gè)行不行;
          4、定義參數(shù)類(lèi)型是因?yàn)橄吕蛑袥](méi)有這幾個(gè)類(lèi)型,所以我不知道可以手寫(xiě)的。我以為只能選擇下拉框中的類(lèi)型。
          2009-03-30 09:08 | nesta

          # re: JasperReport那些事兒(六)——制作分頁(yè)式報(bào)表[未登錄](méi)  回復(fù)  更多評(píng)論   

          要求在打印之前可以修改報(bào)表中的數(shù)據(jù)(只要雙擊就可以修改數(shù)據(jù)),好像聽(tīng)人說(shuō)在源代碼的JRViewer.java中修改.
          可是我對(duì)這個(gè)東西不太熟悉,
          JRViewer.java中有個(gè)這方法
          public void mousePressed(MouseEvent e)
          {
          if(e.getClickCount()==2)
          {
          //這中間就不會(huì)了.
          }
          }
          博主遇到過(guò)這種要求嗎?
          2009-04-09 14:21 | sun

          # re: JasperReport那些事兒(六)——制作分頁(yè)式報(bào)表  回復(fù)  更多評(píng)論   

          @sun
          打印之前肯定是可以修改的,我猜你的意思是打印預(yù)覽的階段對(duì)報(bào)表進(jìn)行修改吧?
          從Jasperreport的生成報(bào)表原理上來(lái)看,有這樣一個(gè)過(guò)程。
          1.模板設(shè)計(jì)階段。這是一個(gè)XML文件,以jrxml后綴名結(jié)尾。
          2.編譯階段。通過(guò)編譯jrxml文件得到一個(gè)jasper文件。
          3.數(shù)據(jù)填充階段。通過(guò)將數(shù)據(jù)源填充到j(luò)asper文件上,然后生成一個(gè)jrprint文件。jrprint可以轉(zhuǎn)換為PDF,Excel等格式的報(bào)表。jrprint文件已經(jīng)是填充了數(shù)據(jù)的報(bào)表,不能編輯內(nèi)容了。

          所以要做到修改,有兩個(gè)方法:
          一是修改數(shù)據(jù)源,你需要將數(shù)據(jù)源轉(zhuǎn)為可編輯的形式,例如XML數(shù)據(jù)源,像javaBean或數(shù)據(jù)庫(kù)類(lèi)型的數(shù)據(jù)源就無(wú)能為力了。
          二是,打印預(yù)覽階段將導(dǎo)出可編輯的文件,例如像HTML,然后提供HTML的編輯器,修改后可以打印。

          我個(gè)人推薦第一種方法。因?yàn)榭梢詫?bào)表導(dǎo)為各種形式的文件,雖然需要工作量比較多。第二種方法就只能綁定在一種報(bào)表格式上了。
          2009-04-10 13:21 | Heis

          # re: JasperReport那些事兒(六)——制作分頁(yè)式報(bào)表  回復(fù)  更多評(píng)論   

          我請(qǐng)教一個(gè)問(wèn)題:
          如何insert a RTF file to another RTF file?
          非常感謝.
          2009-05-05 03:07 | zhenlu

          # re: JasperReport那些事兒(六)——制作分頁(yè)式報(bào)表  回復(fù)  更多評(píng)論   

          @zhenlu
          這與博文的主題沒(méi)關(guān),這可能要找一些支持RTF文件操作的代碼看看咯。
          2009-05-06 22:29 | Heis

          # re: JasperReport那些事兒(六)——制作分頁(yè)式報(bào)表  回復(fù)  更多評(píng)論   

          博主你好,我在數(shù)據(jù)很多的情況下出現(xiàn)沒(méi)有對(duì)齊的情況,就你的例子來(lái)說(shuō)吧,你把技術(shù)部的人員數(shù)加到100或更多時(shí),出現(xiàn)部分名稱(chēng)的拉伸高度比右邊子報(bào)表的具體的數(shù)據(jù)的高度要出一截來(lái),這樣顯示得比較難看,請(qǐng)博主幫忙解決一下這個(gè)沒(méi)有對(duì)齊的問(wèn)題,謝謝。
          2010-03-29 17:03 | DDR

          # re: JasperReport那些事兒(六)——制作分頁(yè)式報(bào)表  回復(fù)  更多評(píng)論   

          @DDR
          一般來(lái)說(shuō)是子報(bào)表的高度超了而導(dǎo)致的問(wèn)題,不過(guò)你描述的不是很清楚,要不你把截圖發(fā)我郵箱,讓我看看吧
          2010-03-29 22:17 | Heis

          # re: JasperReport那些事兒(六)——制作分頁(yè)式報(bào)表  回復(fù)  更多評(píng)論   

          ireport子報(bào)表分頁(yè)的問(wèn)題,想向你請(qǐng)教一下!我的需求是這樣的:制作一張要打印的單據(jù)(以出庫(kù)單為例),這張單據(jù)需要有好幾聯(lián)(存根聯(lián)、財(cái)務(wù)聯(lián)、倉(cāng)庫(kù)聯(lián)),我的做法是做三張一樣的單據(jù)(只是聯(lián)次名字不同),然后我把這三張單據(jù)都放到主報(bào)表里面,打印的時(shí)候,就打印主報(bào)表。現(xiàn)在的問(wèn)題是:這張單據(jù)內(nèi)容可能占據(jù)一張半,比如存根聯(lián)是占一張半,我想第二張剩下的部分就不要打印內(nèi)容了,從第三張打印財(cái)務(wù)聯(lián),同理,從第5張打印倉(cāng)庫(kù)聯(lián)。。。。。。我現(xiàn)在在主報(bào)表每個(gè)子報(bào)表下面增加了一個(gè)page break,但是只是適用于單據(jù)內(nèi)容少于等于一頁(yè)的情況(這種情況可以實(shí)現(xiàn)按聯(lián)次分頁(yè)),但是內(nèi)容多于一頁(yè)的時(shí)候還是不行,第二聯(lián)還是會(huì)接著第一聯(lián)打印,不會(huì)另起一張打印,請(qǐng)問(wèn)你有什么好的辦法能幫我解決嗎?多謝!
          2012-05-31 11:26 | 常興

          # re: JasperReport那些事兒(六)——制作分頁(yè)式報(bào)表[未登錄](méi)  回復(fù)  更多評(píng)論   

          @常興
          可以嘗試一下把pagebreak放到主報(bào)表去,放在子報(bào)表之間。
          2012-06-02 21:57 | heis
          主站蜘蛛池模板: 子长县| 盐池县| 龙陵县| 莫力| 怀柔区| 屏南县| 华宁县| 长沙市| 建德市| 伊金霍洛旗| 信宜市| 尉氏县| 新巴尔虎左旗| 福鼎市| 门源| 濮阳县| 吐鲁番市| 阳西县| 山阳县| 舒兰市| 静宁县| 吉安市| 兴仁县| 巴彦淖尔市| 米易县| 哈尔滨市| 阿瓦提县| 河北区| 离岛区| 深水埗区| 木里| 建水县| 黔西县| 柘城县| 叙永县| 遂昌县| 嘉峪关市| 九寨沟县| 云林县| 都昌县| 集贤县|