Heis的Blog

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

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

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

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

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



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

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

          評(píng)論

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

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

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

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

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

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

          # re: JasperReport那些事兒(六)——制作分頁式報(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è)解決方法的思路有問題,你為什么不統(tǒng)一數(shù)據(jù)源,這樣可以更好地處理問題。還有你的bean是通過參數(shù)傳入,還是設(shè)想在報(bào)表里構(gòu)造?
          3.Jasperreport的參數(shù)傳遞是通過在subreport里設(shè)置傳遞的參數(shù)名,例如為ParamA,然后你再在子模板里新建一個(gè)相同名稱的參數(shù)ParamA,就可以獲取到這個(gè)參數(shù)的值了。
          2009-03-29 22:02 | Heis

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

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

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

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

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

          @sun
          打印之前肯定是可以修改的,我猜你的意思是打印預(yù)覽的階段對(duì)報(bào)表進(jìn)行修改吧?
          從Jasperreport的生成報(bào)表原理上來看,有這樣一個(gè)過程。
          1.模板設(shè)計(jì)階段。這是一個(gè)XML文件,以jrxml后綴名結(jié)尾。
          2.編譯階段。通過編譯jrxml文件得到一個(gè)jasper文件。
          3.數(shù)據(jù)填充階段。通過將數(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ù)類型的數(shù)據(jù)源就無能為力了。
          二是,打印預(yù)覽階段將導(dǎo)出可編輯的文件,例如像HTML,然后提供HTML的編輯器,修改后可以打印。

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

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

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

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

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

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

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

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

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

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

          ireport子報(bào)表分頁的問題,想向你請(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)在的問題是:這張單據(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)容少于等于一頁的情況(這種情況可以實(shí)現(xiàn)按聯(lián)次分頁),但是內(nèi)容多于一頁的時(shí)候還是不行,第二聯(lián)還是會(huì)接著第一聯(lián)打印,不會(huì)另起一張打印,請(qǐng)問你有什么好的辦法能幫我解決嗎?多謝!
          2012-05-31 11:26 | 常興

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

          @常興
          可以嘗試一下把pagebreak放到主報(bào)表去,放在子報(bào)表之間。
          2012-06-02 21:57 | heis
          主站蜘蛛池模板: 马山县| 义乌市| 康定县| 德昌县| 天台县| 贡觉县| 商南县| 扶余县| 阜城县| 丰城市| 双鸭山市| 吉林省| 沭阳县| 临朐县| 宁德市| 上虞市| 邢台县| 黔南| 盐边县| 杭锦旗| 罗平县| 来安县| 天水市| 洪湖市| 邯郸市| 新干县| 文昌市| 行唐县| 建宁县| 读书| 鹤壁市| 双牌县| 松潘县| 南郑县| 满洲里市| 焉耆| 启东市| 仲巴县| 柳州市| 怀宁县| 宝坻区|