Heis的Blog

          保持簡單,保持愚蠢
          隨筆 - 29, 文章 - 1, 評論 - 122, 引用 - 0
          數據加載中……

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

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

              這份報表沿用了上一篇的報表,只是在這個基礎上加了分頁功能。
              實際上我只改動了DepartmentList_department.jrxml這張報表。就在detail區域top=0處加入一個分頁符(page break),因為分頁符需要占用1像素的高度,所以要將原來detail內的內容往下移一個像素,就是top=1.
             

              在Jasperreport里,強制分頁有兩種方法。第一種是加入分頁符(page break),就是上文提到的方式;第二種只適用group的區域(band),可以設定當區域延伸到一定的高度就分頁。
             
             
              報表模板和數據源下載:請點這里。
             
             



          程序員的一生其實可短暫了,這電腦一開一關,一天過去了,嚎;電腦一開不關,那就成服務器了,嚎……

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

          評論

          # re: JasperReport那些事兒(六)——制作分頁式報表[未登錄]  回復  更多評論   

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

          # re: JasperReport那些事兒(六)——制作分頁式報表  回復  更多評論   

          @sun
          報表的數據是依賴數據源的,修改數據源自然能修改報表內容。
          2009-03-28 17:41 | Heis

          # re: JasperReport那些事兒(六)——制作分頁式報表  回復  更多評論   

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

          # re: JasperReport那些事兒(六)——制作分頁式報表  回復  更多評論   

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

          # re: JasperReport那些事兒(六)——制作分頁式報表  回復  更多評論   

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

          # re: JasperReport那些事兒(六)——制作分頁式報表[未登錄]  回復  更多評論   

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

          # re: JasperReport那些事兒(六)——制作分頁式報表  回復  更多評論   

          @sun
          打印之前肯定是可以修改的,我猜你的意思是打印預覽的階段對報表進行修改吧?
          從Jasperreport的生成報表原理上來看,有這樣一個過程。
          1.模板設計階段。這是一個XML文件,以jrxml后綴名結尾。
          2.編譯階段。通過編譯jrxml文件得到一個jasper文件。
          3.數據填充階段。通過將數據源填充到jasper文件上,然后生成一個jrprint文件。jrprint可以轉換為PDF,Excel等格式的報表。jrprint文件已經是填充了數據的報表,不能編輯內容了。

          所以要做到修改,有兩個方法:
          一是修改數據源,你需要將數據源轉為可編輯的形式,例如XML數據源,像javaBean或數據庫類型的數據源就無能為力了。
          二是,打印預覽階段將導出可編輯的文件,例如像HTML,然后提供HTML的編輯器,修改后可以打印。

          我個人推薦第一種方法。因為可以將報表導為各種形式的文件,雖然需要工作量比較多。第二種方法就只能綁定在一種報表格式上了。
          2009-04-10 13:21 | Heis

          # re: JasperReport那些事兒(六)——制作分頁式報表  回復  更多評論   

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

          # re: JasperReport那些事兒(六)——制作分頁式報表  回復  更多評論   

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

          # re: JasperReport那些事兒(六)——制作分頁式報表  回復  更多評論   

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

          # re: JasperReport那些事兒(六)——制作分頁式報表  回復  更多評論   

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

          # re: JasperReport那些事兒(六)——制作分頁式報表  回復  更多評論   

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

          # re: JasperReport那些事兒(六)——制作分頁式報表[未登錄]  回復  更多評論   

          @常興
          可以嘗試一下把pagebreak放到主報表去,放在子報表之間。
          2012-06-02 21:57 | heis
          主站蜘蛛池模板: 桦川县| 靖州| 满城县| 德惠市| 丰都县| 望谟县| 琼结县| 潞西市| 泗水县| 儋州市| 资兴市| 崇仁县| 阿图什市| 工布江达县| 论坛| 阿荣旗| 任丘市| 亚东县| 新和县| 许昌县| 德保县| 当涂县| 龙海市| 临洮县| 客服| 闵行区| 汤阴县| 万宁市| 红河县| 南和县| 高清| 平陆县| 集安市| 鹰潭市| 衢州市| 平潭县| 塔河县| 蒙山县| 浦城县| 珲春市| 石柱|