<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Heis的Blog

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

    JasperReport那些事兒(四)——制作標(biāo)簽式報(bào)表

        最近在想《JasperReport那些事兒》系列的寫作方向的問題,是要先寫Jasper的原理和基礎(chǔ)方面,還是寫怎么制作報(bào)表實(shí)例。如果你想我寫一些你感興趣的部分,可以在文章后面加評論告訴我。這周先寫一篇制作報(bào)表實(shí)例的文章吧。
        最近在blogjava看到一篇總結(jié)報(bào)表圖例的文章http://m.tkk7.com/report9d/archive/2009/03/04/257848.html。總結(jié)的相當(dāng)不錯(cuò),如果你不知道什么是標(biāo)簽式報(bào)表,可以看看。

    1.先上效果圖


    2.數(shù)據(jù)源還是沿用NameList XML數(shù)據(jù)源,關(guān)于怎么配置數(shù)據(jù)源可以看這里
    <?xml version="1.0" encoding="utf-8" ?>
    <NameList>
        
    <Person>
            
    <Name>強(qiáng)尼</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.制作報(bào)表的思路
      在制作標(biāo)簽報(bào)表的時(shí)候,我們先來理清一下思路。可以發(fā)現(xiàn),其實(shí)標(biāo)簽式報(bào)表的每個(gè)小標(biāo)簽內(nèi)的內(nèi)容類型都是一樣的,這樣可以認(rèn)為報(bào)表是由多個(gè)標(biāo)簽組成的。這樣就可以分離出主體報(bào)表和子報(bào)表的概念,這與Jasperreport里的subreport(子報(bào)表)概念是一樣的。這樣就可以大概抽象出一個(gè)標(biāo)簽式報(bào)表的模型了,在主體報(bào)表上使用兩個(gè)subreport元素指向同一個(gè)標(biāo)簽報(bào)表。

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

    b)建立一個(gè)子模板(標(biāo)簽?zāi)0澹?/span>


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

    右邊的subreport的Datasource配置


    報(bào)表模板下載:http://m.tkk7.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



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

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

    評論

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

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

    # re: JasperReport那些事兒(四)——制作標(biāo)簽式報(bào)表  回復(fù)  更多評論   

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

    但是劣勢也是很明顯的,因?yàn)橐獜臄?shù)據(jù)庫讀取數(shù)據(jù)到對象,對象再轉(zhuǎn)換為XML,這個(gè)過程消耗的資源要更多,效率也會(huì)受到影響。具體的效率我也沒測試過,但是我在項(xiàng)目里生成的XML在一萬行左右時(shí),效率是可以接受的。
    但是對于效率要求比較高的報(bào)表,但是數(shù)據(jù)不需要做中間處理的報(bào)表,我并不推薦XML作為數(shù)據(jù)源這種方式。
    2009-03-09 10:20 | Heis

    # re: JasperReport那些事兒(四)——制作標(biāo)簽式報(bào)表  回復(fù)  更多評論   

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

    # re: JasperReport那些事兒(四)——制作標(biāo)簽式報(bào)表  回復(fù)  更多評論   

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

    其次,我不能認(rèn)同“多個(gè)子報(bào)表效率無疑會(huì)很底”這句話。標(biāo)簽式報(bào)表主體報(bào)表的subreport元素都是指向相同的子報(bào)表模板。這相當(dāng)于java中一個(gè)類調(diào)用同一個(gè)類的多個(gè)實(shí)例,這樣并不會(huì)有效率問題。使用“無疑”這個(gè)詞并不是程序員應(yīng)有的素質(zhì),至少你應(yīng)該先去運(yùn)行一下這個(gè)報(bào)表。

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

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

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

    感覺這樣介紹沒實(shí)際意義 因?yàn)镴asperReport并不適合中國的報(bào)表,很多都做不出來,建議你看看潤乾報(bào)表,不要在這里給大家推薦一個(gè)不適合中國的報(bào)表!
    2009-03-10 08:52 | john

    # re: JasperReport那些事兒(四)——制作標(biāo)簽式報(bào)表  回復(fù)  更多評論   

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

    # re: JasperReport那些事兒(四)——制作標(biāo)簽式報(bào)表  回復(fù)  更多評論   

    @john
    JasperReport不是不適合中國報(bào)表,只是它不是為中國報(bào)表而設(shè)計(jì)!jasperReport功能很強(qiáng)大,只要你有想象力完全可以定制所需要的報(bào)表,關(guān)鍵是它開源,是一個(gè)純java報(bào)表,如果你是跨系統(tǒng)那么它是首選,前提是你有足夠的時(shí)間和耐心哦
    2009-03-10 09:11 | 凌晨風(fēng)

    # re: JasperReport那些事兒(四)——制作標(biāo)簽式報(bào)表  回復(fù)  更多評論   

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

    # re: JasperReport那些事兒(四)——制作標(biāo)簽式報(bào)表  回復(fù)  更多評論   

    @凌晨風(fēng)
    “分成兩列橫著打印”是不是指像我現(xiàn)在的報(bào)表逆時(shí)針轉(zhuǎn)90度。如果是,那在Jasperreport里是做不到的。文章中也有提及,Jasperreport是只能一個(gè)區(qū)域(band)一個(gè)區(qū)域地去渲染,因?yàn)閰^(qū)域的排列是由上到下,所以渲染的順序也是從上到下的,沒辦法從左到右渲染。
    2009-03-10 19:26 | Heis

    # re: JasperReport那些事兒(四)——制作標(biāo)簽式報(bào)表  回復(fù)  更多評論   

    不是指報(bào)表逆時(shí)針轉(zhuǎn)90度,而是數(shù)據(jù)橫向排列
    2009-03-11 08:52 | 凌晨風(fēng)

    # re: JasperReport那些事兒(四)——制作標(biāo)簽式報(bào)表  回復(fù)  更多評論   

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

    # re: JasperReport那些事兒(四)——制作標(biāo)簽式報(bào)表  回復(fù)  更多評論   

    blog的布局和字體怎么這么難看?
    2009-11-10 10:45 | yzc
    主站蜘蛛池模板: 在线观看免费大黄网站| 亚洲高清无码专区视频| 亚洲第一第二第三第四第五第六| 成人永久免费高清| 国产亚洲精品免费视频播放| 1区1区3区4区产品亚洲| 国产免费观看青青草原网站| 花蝴蝶免费视频在线观看高清版 | 国产亚洲精品a在线观看| 男的把j放进女人下面视频免费| 亚洲视频无码高清在线| 亚洲五月午夜免费在线视频| 亚洲成人免费网址| 香蕉国产在线观看免费| 亚洲依依成人精品| 久久乐国产精品亚洲综合| 无码国产精品一区二区免费虚拟VR | 免费不卡视频一卡二卡| 特级毛片免费播放| 亚洲国产模特在线播放| 国产亚洲成人久久| 在线免费视频一区二区| 久久99国产乱子伦精品免费| 深夜A级毛片视频免费| 亚洲免费在线视频播放| 亚洲成av人片在线观看无码不卡| 韩国二级毛片免费播放| 曰批全过程免费视频网址| 国产福利免费视频 | 麻豆va在线精品免费播放| 亚洲制服丝袜一区二区三区| 亚洲一区精品无码| 国产乱子伦精品免费无码专区| 亚洲免费视频观看| 久久国产乱子精品免费女| 成人免费视频一区二区| 亚洲一区二区三区国产精华液| 亚洲综合一区二区精品导航| 亚洲熟妇无码另类久久久| 国产区卡一卡二卡三乱码免费| 在线观看的免费网站|