Heis的Blog

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

          JasperReport那些事兒(四)——制作標簽式報表

              最近在想《JasperReport那些事兒》系列的寫作方向的問題,是要先寫Jasper的原理和基礎方面,還是寫怎么制作報表實例。如果你想我寫一些你感興趣的部分,可以在文章后面加評論告訴我。這周先寫一篇制作報表實例的文章吧。
              最近在blogjava看到一篇總結報表圖例的文章http://www.aygfsteel.com/report9d/archive/2009/03/04/257848.html??偨Y的相當不錯,如果你不知道什么是標簽式報表,可以看看。

          1.先上效果圖


          2.數據源還是沿用NameList XML數據源,關于怎么配置數據源可以看這里。
          <?xml version="1.0" encoding="utf-8" ?>
          <NameList>
              
          <Person>
                  
          <Name>強尼</Name>
                  
          <Gender></Gender>
                  
          <Age>56</Age>
              
          </Person>
              
          <Person>
                  
          <Name>阿美</Name>
                  
          <Gender></Gender>
                  
          <Age>23</Age>
              
          </Person>
              
          <Person>
                  
          <Name>李麗</Name>
                  
          <Gender></Gender>
                  
          <Age>58</Age>
              
          </Person>
              
          <Person>
                  
          <Name>杰森</Name>
                  
          <Gender></Gender>
                  
          <Age>32</Age>
              
          </Person>
              
          <Person>
                  
          <Name>劉三</Name>
                  
          <Gender></Gender>
                  
          <Age>21</Age>
              
          </Person>
          </NameList>  

          3.制作報表的思路
            在制作標簽報表的時候,我們先來理清一下思路??梢园l現,其實標簽式報表的每個小標簽內的內容類型都是一樣的,這樣可以認為報表是由多個標簽組成的。這樣就可以分離出主體報表和子報表的概念,這與Jasperreport里的subreport(子報表)概念是一樣的。這樣就可以大概抽象出一個標簽式報表的模型了,在主體報表上使用兩個subreport元素指向同一個標簽報表。

            那為什么要使用兩個subreport元素?我們先來看我們期待輸出的標簽模型的順序。
            但是在Jasperreport里,報表的渲染是從上到下的。所以我們期待的順序是先渲染1號標簽,然后渲染2號標簽,這是從左到右的渲染,在Jasperreport里面是做不到的。但是我們可以采用同時渲染1號和2號標簽,這就需要兩個subreport元素。
          4.具體步驟(關于子報表的制作,可以參考我的第一篇文章)
          a)建立一個主模板,加入兩個subreport。

          b)建立一個子模板(標簽模板)。


          c)配置subreport的XPATH。
          左邊的subreport的Datasource配置

          右邊的subreport的Datasource配置


          報表模板下載:http://www.aygfsteel.com/Files/heis/%E5%9B%9B-%E5%88%B6%E4%BD%9C%E6%A0%87%E7%AD%BE%E5%BC%8F%E6%8A%A5%E8%A1%A8/Chapter4.zip



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

          posted on 2009-03-08 15:33 Heis 閱讀(4200) 評論(12)  編輯  收藏 所屬分類: JasperReport那些事兒

          評論

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

          看了大大的四篇,發現自己的問題有了解決方法,大大是把查詢結果弄成XML數據源,然后再把它們讀取到報表,這就解決了直接對數據庫綁定數據源造成無法對條件搜索進行報表了。這樣又要涉及XML的讀寫問題,如果我的數據有好幾萬條一次性寫入XML不知道會不會效率有問題,我第一次接觸報表,請多多指教,謝謝
          2009-03-09 09:16 | 游上岸的魚

          # re: JasperReport那些事兒(四)——制作標簽式報表  回復  更多評論   

          @游上岸的魚
          使用XML作為數據源比直接讀取數據庫更有優勢的地方在于:
          1.數據可以在程序里處理;
          2.數據獨立性和可讀性好

          但是劣勢也是很明顯的,因為要從數據庫讀取數據到對象,對象再轉換為XML,這個過程消耗的資源要更多,效率也會受到影響。具體的效率我也沒測試過,但是我在項目里生成的XML在一萬行左右時,效率是可以接受的。
          但是對于效率要求比較高的報表,但是數據不需要做中間處理的報表,我并不推薦XML作為數據源這種方式。
          2009-03-09 10:20 | Heis

          # re: JasperReport那些事兒(四)——制作標簽式報表  回復  更多評論   

          這樣的報表做起來很麻煩,而且多個子報表效率無疑會很底,樓主有沒有想過jasperReport的API支持多結果集的報表,也就是針對報表上不同的塊解釋不同的SQL填充?而且樓主所說的標簽式報表完全可以通過簡單的一個jrxml文件通過分欄操作完成
          2009-03-09 17:08 | 凌晨風

          # re: JasperReport那些事兒(四)——制作標簽式報表  回復  更多評論   

          @凌晨風
          首先,針對你說的“報表做起來很麻煩”。我前面的文章有說過,以XML作為數據源是針對不同的需求的,請考慮下面的幾種情況:如果你的報表數據要經過一系列的精確計算,然后在報表上展示計算結果;如果你的報表數據并不是全部都來自于數據庫,而是某些來自程序或其他配置文件;SQL能不能解決問題?

          其次,我不能認同“多個子報表效率無疑會很底”這句話。標簽式報表主體報表的subreport元素都是指向相同的子報表模板。這相當于java中一個類調用同一個類的多個實例,這樣并不會有效率問題。使用“無疑”這個詞并不是程序員應有的素質,至少你應該先去運行一下這個報表。

          我猜想你說的“多結果集”是指subdatasets,這個是只適用于連接(Connection)類型的數據集(像數據庫,Hibernate之類),并不適用于數據源(Data Source)類型的數據集(像XML,CSV之類)。

          對于你的“分欄”操作,我并不是很理解,請賜教。
          2009-03-09 20:00 | Heis

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

          感覺這樣介紹沒實際意義 因為JasperReport并不適合中國的報表,很多都做不出來,建議你看看潤乾報表,不要在這里給大家推薦一個不適合中國的報表!
          2009-03-10 08:52 | john

          # re: JasperReport那些事兒(四)——制作標簽式報表  回復  更多評論   

          @Heis
          博主說的很有道理,需求不同,中國式復雜的報表的確做起來很麻煩.
          我也是發表一下個人意見而已.大家共同學習啊!
          我接觸過jasper的api,底層針對子報表采用io加載,編譯jasper文件,之后.java文件,博主可以跟蹤調試一下多子報表的例子看看,程序運行時會在你的硬盤上寫文件之后編譯加載到內存后刪除掉,放開底級別的日志就可以看出來.
          我們的系統是跑在局域網的,運行起來都不是很理想.至于報表上展示的數據和圖表等等需要特殊經過計算的數據我是采用scriplet處理,而底層只需要一個簡單的connection就可以(主要是考慮到我們的報表系統是給用戶使用的,而用戶只會一些簡單的sql,配上我們封裝的scriplet就可以達到想要的效果).
          關于那個"分欄",我是看了這個效果圖才有此說法,至于是不是和你的需求一致那大家就應該多交流了:先說說我的想法:分成兩列橫著打印就可以出現你要的這種效果圖,不知道博主是不是這個意思?學習學習!
          2009-03-10 09:04 | 凌晨風

          # re: JasperReport那些事兒(四)——制作標簽式報表  回復  更多評論   

          @john
          JasperReport不是不適合中國報表,只是它不是為中國報表而設計!jasperReport功能很強大,只要你有想象力完全可以定制所需要的報表,關鍵是它開源,是一個純java報表,如果你是跨系統那么它是首選,前提是你有足夠的時間和耐心哦
          2009-03-10 09:11 | 凌晨風

          # re: JasperReport那些事兒(四)——制作標簽式報表  回復  更多評論   

          @john
          那你的意思是適合中國的報表才有意義?那什么是中國式的報表呢?
          2009-03-10 19:18 | Heis

          # re: JasperReport那些事兒(四)——制作標簽式報表  回復  更多評論   

          @凌晨風
          “分成兩列橫著打印”是不是指像我現在的報表逆時針轉90度。如果是,那在Jasperreport里是做不到的。文章中也有提及,Jasperreport是只能一個區域(band)一個區域地去渲染,因為區域的排列是由上到下,所以渲染的順序也是從上到下的,沒辦法從左到右渲染。
          2009-03-10 19:26 | Heis

          # re: JasperReport那些事兒(四)——制作標簽式報表  回復  更多評論   

          不是指報表逆時針轉90度,而是數據橫向排列
          2009-03-11 08:52 | 凌晨風

          # re: JasperReport那些事兒(四)——制作標簽式報表  回復  更多評論   

          JasperReport似乎支持橫向label
          http://jasperforge.org/website/jasperreportswebsite/trunk/samples.html?group_id=252
          2009-08-02 15:23 | caper

          # re: JasperReport那些事兒(四)——制作標簽式報表  回復  更多評論   

          blog的布局和字體怎么這么難看?
          2009-11-10 10:45 | yzc
          主站蜘蛛池模板: 天津市| 福建省| 弥勒县| 芒康县| 洞口县| 齐齐哈尔市| 汉沽区| 呼图壁县| 万荣县| 湾仔区| 洛南县| 巫山县| 三河市| 衡山县| 连南| 崇仁县| 洛南县| 界首市| 冕宁县| 五河县| 阿坝县| 湾仔区| 闽侯县| 长寿区| 香格里拉县| 成安县| 通榆县| 邹平县| 安多县| 拉萨市| 马龙县| 宁陕县| 兴业县| 珠海市| 武穴市| 金华市| 房产| 新田县| 凌海市| 山丹县| 高淳县|