Heis的Blog

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

          JasperReport那些事兒(一)——iReport制作表格

          如果你還不知道jasperreport和ireport,那你可以參考我的上一篇文章,或者谷歌百度一下。好了,廢話少說(shuō),Let’s start,Go!
                我的環(huán)境是iReport3.0+JDK6.0。
                先看看效果。
           
          1)    準(zhǔn)備數(shù)據(jù)源,這里使用XML文件(使用UTF8編碼)作為數(shù)據(jù)源。
           1 <?xml version="1.0" encoding="utf-8" ?>
           2 <NameList>
           3     <Person>
           4         <Name>強(qiáng)尼</Name>
           5         <Gender></Gender>
           6         <Age>56</Age>
           7     </Person>
           8     <Person>
           9         <Name>阿美</Name>
          10         <Gender></Gender>
          11         <Age>23</Age>
          12     </Person>
          13     <Person>
          14         <Name>李麗</Name>
          15         <Gender></Gender>
          16         <Age>58</Age>
          17     </Person>
          18     <Person>
          19         <Name>杰森</Name>
          20         <Gender></Gender>
          21         <Age>32</Age>
          22     </Person>
          23     <Person>
          24         <Name>劉三</Name>
          25         <Gender></Gender>
          26         <Age>21</Age>
          27     </Person>
          28 </NameList>

          2)    打開iReport,新建一個(gè)空的模版文件。
          3)    加入一個(gè)靜態(tài)文本(StaticText),右擊屬性(Property),編輯字體屬性和內(nèi)容。關(guān)于Font Name 屬性和PDF Font Name屬性需要PMingLiu字體(下載)(將PMingLiu字體放在ireport安裝目錄的font文件夾下)或者你可以選擇其他字體,例如宋體,PDF Font Name 選
          STSong-Light
           



          4)    接下來(lái)就要做表格部分,新建一個(gè)子報(bào)表(subreport),除了第二步選擇No Connection or datasource,基本上只要點(diǎn)Next就行了。
           





          5)    完成上一步后就會(huì)跳到子報(bào)表NameList_subreport0的視圖,其實(shí)子報(bào)表也是一個(gè)獨(dú)立的報(bào)表。但是你現(xiàn)在只能看到一個(gè)叫Detail的區(qū)域(band)。我們還需要更多的區(qū)域來(lái)結(jié)合完成表格的制作。調(diào)出區(qū)域管理器(菜單View->Bands),將column header 和column footer的高度(height)設(shè)為20.



           
          6)    在column header加入三個(gè)靜態(tài)文本(StaticText),字體屬性和之前的一樣,分別加入內(nèi)容姓名,性別,年齡。在detail區(qū)域加入三個(gè)文本(textField),在column footer加入一個(gè)文本,字體屬性和StaticText保持一樣。然后設(shè)置所有靜態(tài)文本和文本的邊框,如圖。現(xiàn)在的textField都是沒(méi)有數(shù)據(jù)的,那么怎么填充數(shù)據(jù)呢?現(xiàn)在我們來(lái)看怎么配置數(shù)據(jù)源和填充數(shù)據(jù)。
           

           
          7)    菜單data->connections/datasource,新建一個(gè)XML  datasouce,目錄位置指向之前建立的XML文件。選擇Use the report Xpath xpression when filling the report.
           



           

          8)    打開NameList模版,菜單data->report query,配置XPATH如圖。
           

          9)    配置NameList模板的subreport, 編輯屬性Connection/Data  Source  Expression,輸入 ((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).dataSource("/NameList /Person")。這一步主要是將數(shù)據(jù)源傳給子報(bào)表。
           



           
          10)    打開NameList_subreport0模板,先配置XPATH,然后右擊節(jié)點(diǎn)Name,選Add node as field.同樣將Gender和Age節(jié)點(diǎn)加入field。點(diǎn)OK。然后你可以看到左邊的結(jié)構(gòu)視窗多了三個(gè)Field。
           



           
          11)    編輯Table里的文本(textfield),右擊選Edit Expression,輸入表達(dá)式(Field的表達(dá)式,$F{Field_Name})。$V{REPORT_COUNT}是jasperreport 內(nèi)建的變量,用于計(jì)算detail區(qū)域的行數(shù)。
           

          12)    保存模板,菜單build->Compile,編譯兩個(gè)模板。打開NameList模板,帶數(shù)據(jù)源運(yùn)行(build->Execute with active connection)。大功告成。

                  寫這篇東西花了大半天,有興趣的同志可以下載源代碼看看。點(diǎn)擊下載





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

          posted on 2009-02-16 21:21 Heis 閱讀(30560) 評(píng)論(22)  編輯  收藏 所屬分類: JasperReport那些事兒

          評(píng)論

          # re: JasperReport那些事兒(一)——iReport制作表格  回復(fù)  更多評(píng)論   

          請(qǐng)教一下,怎么樣可以自做單元格合并這樣的中文式的報(bào)表?謝謝你的答復(fù)。
          我的qq:605524436。
          2009-03-09 13:22 | tide

          # re: JasperReport那些事兒(一)——iReport制作表格  回復(fù)  更多評(píng)論   

          @tide
          我理解你的意思是像下面這樣的表格嗎?
          _______________
          | |____|____|
          | |____|____|
          | |____|____|
          | |____|____|
          如果是,我會(huì)在下一篇文章中介紹。
          2009-03-09 15:02 | Heis

          # re: JasperReport那些事兒(一)——iReport制作表格  回復(fù)  更多評(píng)論   

          博主,我按照你的例子來(lái)操作一下,到第8步出錯(cuò)了,沒(méi)有列出xml的列表,這個(gè)該怎么處理?謝謝!
          2009-04-23 17:22 | zl

          # re: JasperReport那些事兒(一)——iReport制作表格[未登錄](méi)  回復(fù)  更多評(píng)論   

          希望博主能加我QQ:944500547
          有問(wèn)題請(qǐng)教,非常感謝!
          2009-04-23 17:23 | water

          # re: JasperReport那些事兒(一)——iReport制作表格  回復(fù)  更多評(píng)論   

          @zl
          首先確認(rèn)你的xml文件沒(méi)有錯(cuò),文件編碼注意要是UTF8;
          如果沒(méi)錯(cuò),這可能是ireport的xml解析器bug,我也經(jīng)常遇到這樣的問(wèn)題。你可以試一下先把原來(lái)的ireport的xml數(shù)據(jù)源刪掉,然后重啟ireport,再試著新建一個(gè)xml數(shù)據(jù)源。這個(gè)bug也困擾我很久,有時(shí)候會(huì)莫名奇妙地不能解析。
          2009-04-23 22:37 | Heis

          # re: JasperReport那些事兒(一)——iReport制作表格  回復(fù)  更多評(píng)論   

          博主好!首先感謝回復(fù)。
          還有問(wèn)題請(qǐng)教:
          我直接用的ireport里面連接的oracle。
          導(dǎo)出的是HTML格式
          比如在頁(yè)面上有:
          aaaaa
          bbbbb
          ccccc
          .......
          多行數(shù)據(jù),每一行對(duì)應(yīng)一個(gè)按鈕來(lái)打單。但是有時(shí)候會(huì)出現(xiàn)點(diǎn)a行打單后,再點(diǎn)b行打單,再點(diǎn)c等等行打單的話出現(xiàn)的都是a行對(duì)應(yīng)的數(shù)據(jù)。
          這種情況在局域網(wǎng)的時(shí)候沒(méi)出現(xiàn)過(guò),后來(lái)項(xiàng)目上線后出現(xiàn)。


          不知道我有沒(méi)有說(shuō)明白。
          2009-04-24 09:35 | zl

          # re: JasperReport那些事兒(一)——iReport制作表格  回復(fù)  更多評(píng)論   

          經(jīng)過(guò)反復(fù)終于調(diào)通,但是生成的pdf只有一條記錄
          就是第一條:強(qiáng)尼的信息。
          請(qǐng)問(wèn)這是怎么回事呢?
          2009-04-24 12:44 | zl

          # re: JasperReport那些事兒(一)——iReport制作表格  回復(fù)  更多評(píng)論   

          @zl
          1.檢查你的子報(bào)表,field是否放在detail區(qū)域內(nèi)。
          2.檢查父報(bào)表的subreport元素內(nèi)的XPATH是否是/NameList/Person
          3.你的XML數(shù)據(jù)源不會(huì)只有一條數(shù)據(jù)吧?

          如果還發(fā)現(xiàn)錯(cuò)誤,下載我的模板源代碼對(duì)比一下。
          2009-04-24 14:29 | Heis

          # re: JasperReport那些事兒(一)——iReport制作表格  回復(fù)  更多評(píng)論   

          是第二條的問(wèn)題。謝謝!
          另外一個(gè)問(wèn)題不知道有沒(méi)有說(shuō)明白,希望博主能夠指點(diǎn)。
          2009-04-24 15:27 | zl

          # re: JasperReport那些事兒(一)——iReport制作表格  回復(fù)  更多評(píng)論   

          @zl
          每一行對(duì)應(yīng)一個(gè)按鈕來(lái)打單?這個(gè)我不是很明白,我們郵件聯(lián)系吧。畢竟評(píng)論不是留言版。我郵箱:heisun@yeah.net
          2009-04-24 21:57 | Heis

          # re: JasperReport那些事兒(一)——iReport制作表格  回復(fù)  更多評(píng)論   

          @Heis
          調(diào)通后 五條出現(xiàn)都是第一條的信息
          2009-09-11 16:25 | cici

          # re: JasperReport那些事兒(一)——iReport制作表格  回復(fù)  更多評(píng)論   

          我沒(méi)有建子報(bào)表,直接在details下面寫的
          2009-09-11 16:26 | cici

          # re: JasperReport那些事兒(一)——iReport制作表格  回復(fù)  更多評(píng)論   

          @cici
          不用子報(bào)表是會(huì)有問(wèn)題的,估計(jì)是你的數(shù)據(jù)源配置錯(cuò)誤。
          2009-09-12 10:53 | Heis

          # re: JasperReport那些事兒(一)——iReport制作表格  回復(fù)  更多評(píng)論   

          @Heis
          恩,我選擇xpath的時(shí)候根本就出不來(lái)左邊的結(jié)構(gòu)視窗多了三個(gè)Field,要不你把源碼發(fā)給我看下吧,我的郵箱zengjin_mail@yahoo.com.cn.謝謝你了
          2009-09-14 11:07 | cici

          # re: JasperReport那些事兒(一)——iReport制作表格  回復(fù)  更多評(píng)論   

          你這表格是自己添加的邊框顯示的吧?
          2009-11-19 16:12 | liguangjun

          # re: JasperReport那些事兒(一)——iReport制作表格  回復(fù)  更多評(píng)論   

          請(qǐng)問(wèn)一下如果字段多了,是不是就會(huì)變形了?..
          2009-11-19 16:13 | liguangjun

          # re: JasperReport那些事兒(一)——iReport制作表格  回復(fù)  更多評(píng)論   

          有問(wèn)題請(qǐng)教博主!希望能加我QQ:460433459 謝謝博主!
          2009-11-20 15:15 | liguangjun

          # re: JasperReport那些事兒(一)——iReport制作表格  回復(fù)  更多評(píng)論   

          @liguangjun
          邊框是自己設(shè)置的;
          字段是靜態(tài)添加的,不是動(dòng)態(tài),所以要自己設(shè)計(jì);
          2009-11-20 19:10 | Heis

          # re: JasperReport那些事兒(一)——iReport制作表格  回復(fù)  更多評(píng)論   

          樓主加我QQ吧,573497195
          有問(wèn)題要請(qǐng)教你,謝謝啊
          2010-01-06 10:23 | chenhuagh

          # re: JasperReport那些事兒(一)——iReport制作表格  回復(fù)  更多評(píng)論   

          頂。。。。。。
          2012-09-27 11:40 | 32516

          # re: JasperReport那些事兒(一)——iReport制作表格[未登錄](méi)  回復(fù)  更多評(píng)論   

          請(qǐng)問(wèn),如果是有多個(gè)子報(bào)表,卻只有一個(gè)detail,該怎么實(shí)現(xiàn)呢?
          比如:
          書單
          書籍id 書名 作者
          1 語(yǔ)文 a
          2 數(shù)學(xué) b

          名單
          姓名 性別 年齡
          小張 男 18
          小王 女 20
          小劉 男 30
          2013-02-22 17:36 | 啊啊

          # 加快  回復(fù)  更多評(píng)論   

          我只是玩玩
          2015-08-25 15:46 | 地方
          主站蜘蛛池模板: 荔波县| 伊金霍洛旗| 陆丰市| 白城市| 泰安市| 平安县| 聂拉木县| 冀州市| 军事| 克东县| 顺平县| 屯门区| 嘉黎县| 阳原县| 天等县| 龙南县| 澄城县| 福建省| 平遥县| 淅川县| 平乡县| 芜湖县| 正阳县| 乐山市| 临潭县| 鄂伦春自治旗| 永靖县| 元氏县| 神池县| 谷城县| 八宿县| 营山县| 天全县| 新丰县| 赤壁市| 双城市| 肃南| 泸水县| 红原县| 穆棱市| 于田县|