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

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

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

    Heis的Blog

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

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

        最近在想《JasperReport那些事兒》系列的寫作方向的問(wèn)題,是要先寫Jasper的原理和基礎(chǔ)方面,還是寫怎么制作報(bào)表實(shí)例。如果你想我寫一些你感興趣的部分,可以在文章后面加評(píng)論告訴我。這周先寫一篇制作報(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í)候,我們先來(lái)理清一下思路。可以發(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元素?我們先來(lái)看我們期待輸出的標(biāo)簽?zāi)P偷捻樞颉?br />
      但是在Jasperreport里,報(bào)表的渲染是從上到下的。所以我們期待的順序是先渲染1號(hào)標(biāo)簽,然后渲染2號(hào)標(biāo)簽,這是從左到右的渲染,在Jasperreport里面是做不到的。但是我們可以采用同時(shí)渲染1號(hào)和2號(hào)標(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ò)去了,嚎;電腦一開不關(guān),那就成服務(wù)器了,嚎……

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

    評(píng)論

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    @john
    JasperReport不是不適合中國(guó)報(bào)表,只是它不是為中國(guó)報(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ù)  更多評(píng)論   

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

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

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

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

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

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

    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ù)  更多評(píng)論   

    blog的布局和字體怎么這么難看?
    2009-11-10 10:45 | yzc
    主站蜘蛛池模板: 国产亚洲综合成人91精品| 亚洲精品美女久久久久9999| a级毛片毛片免费观看久潮| 亚洲男人都懂得羞羞网站| 福利免费观看午夜体检区| WWW国产亚洲精品久久麻豆| 亚洲午夜精品久久久久久浪潮| 三年片在线观看免费大全电影| 国产v亚洲v天堂a无| 久久夜色精品国产亚洲av| 亚洲免费福利视频| 本道天堂成在人线av无码免费 | 亚洲香蕉免费有线视频| 日本不卡视频免费| 日韩电影免费在线观看中文字幕| 精品亚洲AV无码一区二区三区| 亚洲午夜福利精品久久| 无码日韩人妻av一区免费| 嫩草在线视频www免费看| 亚洲AV综合永久无码精品天堂| 日韩亚洲一区二区三区| 免费的一级片网站| 最近中文字幕高清免费中文字幕mv| 人人狠狠综合久久亚洲| 亚洲高清资源在线观看| 亚洲午夜无码久久久久| 免费毛片网站在线观看| 3d动漫精品啪啪一区二区免费| 无遮挡免费一区二区三区| 亚洲高清视频在线| 麻豆亚洲AV永久无码精品久久| 亚洲精品黄色视频在线观看免费资源| 无码av免费毛片一区二区| 免费黄网站在线观看| 特级毛片在线大全免费播放| 精品日韩99亚洲的在线发布| 亚洲av无码国产精品夜色午夜| 亚洲尤码不卡AV麻豆| 最好免费观看韩国+日本| aⅴ在线免费观看| 国产免费一区二区三区在线观看 |