首页 JasperReport中使用多个数据源的方法

JasperReport中使用多个数据源的方法

举报
开通vip

JasperReport中使用多个数据源的方法JasperReport中使用多个数据源的方法廖章2012年4月15日几经探索,终于寻找到在一个报表中使用多个数据源的方法,现在分享出来以便后来者少走弯路!网上很多资料说多数据源只能使用子报表方式,呵呵!一个报表中使用多个数据源的场景:在同一张报表中,既有交叉表又有饼状图,交叉表与饼状图分别使用不同的数据源。具体报表格式如下:市民需求情况(2012年1月〜2012年3月)办事指南公共服务企业服务社区服务数量45883374244占比28%52%5%15%.办事指引.公共服务|企业...

JasperReport中使用多个数据源的方法
JasperReport中使用多个数据源的方法廖章2012年4月15日几经探索,终于寻找到在一个报表中使用多个数据源的方法,现在分享出来以便后来者少走弯路!网上很多资料说多数据源只能使用子报表方式,呵呵!一个报表中使用多个数据源的场景:在同一张报表中,既有交叉表又有饼状图,交叉表与饼状图分别使用不同的数据源。具体报表格式如下:市民需求情况(2012年1月〜2012年3月)办事指南公共服务企业服务社区服务数量45883374244占比28%52%5%15%.办事指引.公共服务|企业服务■社区服务第一、使用iReport报表设计器设计报表(本人使用iReport4.5.1版本),步骤:1.新建空白报表。打开iReport软件,点击【File]菜单的【New】子菜单,在弹出的Newfile窗口中按红色框指示选择,然后点击右下角中间的【LaunchReportWizard]按钮,使用向导来新建一张报表。在下一个窗口中,输入报表文件名以及选择保存的目录路径,点击【下一步】Vueandlocn.tion1选择 模板 个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载 皿4locationQueryFieldsGroupby...FinishReportname:subDataSetReportLocation:D:iReport£ro»sefile:D:iReport'subDataSetReport.jnml[<上一步堡)]下一步>完成任)取消幕助QP在弹出的新窗口中,设置报表使用的查询连接或数据源,可以使用一个jdbc连接或javaobject数据源,如果前你已经设置有数据源,可以选择你原来的数据源,或者你可以点击【New】按钮新建另外一个数据源,这里我选择新建一个数据源。步骤Query2.5.6选择槿板KameandlocationQ««ryFieldsGroupby...Finish[〈上一步<S)下一步》」|完成(E)][®l消[帮助0()新建数据源,这里新建一个JavaBean数据源:5wxfereques^XMLPrevi11ii■iIi■iiIi/IktNewita®夕裁迭择模ITameslx3.QueryFieldsGroupFinis!DatasourceSelectthedatasourcetypeDatabaseJDBCconnectionITetBeansDatabaseJDBCconnectionJavaBeanssetdatasourcJRDataSourceProviderCustomJRDataSourceEmptydatasourceHibernateconnectionSpringloadedHibernateconnectionEJBQLconnectionXMLAServerMondrianOLAPconnectionQueryExecutermodeMicrosoftExcel(xls)datasourceMicrosoftExcel2007(xlsx)datasourceMongoDBConnectionRemoteXMLfiledatasourceJSOITdatasourceHadoopHiveConnectionSampleDatabaseConnectionreques%New步骤1.2.3.4.5.6.file...PreviGroup助Of)ITameITew在弹出的设置Fields窗口中继续点击【下一步】flNew1选择模板FamearidlocationQueryFieldsGroupby...Finish<上一步®)下一步>W成E取消幕助H在弹出的设置Groupby…(分组)窗口中继续点击【下一步】新建报表最后一步,按【完成】按钮,至此新建一张空白报表完成。title和detail两部分其余2.设置报表。由于目标报表只放置一个交叉表和饼状图表,故报表只需要报表的的pageheader、columnheader等不需要(高度设置为0)宜也FjMilTl嵋凶Fee毗Pnsww布口;W)工JlEWKW一—■口:约1pi:da^lKML.CT3XX^lifaCV舛iHpniIJLuf'AC-lvSSJ国,W心Q/*叫项FurmiL«T£JitldiS-Er3ptl4ll.TitltE.・w侦CanDei^ietf富丹〔F)MilKl嵋呵FormatPrwrwIJLO]WRS(H)Ml1%M#'jctr^n密SEFJKT-DMycm留HraflJKMPIUT留HRKTJjZCJOIEP3KT_H!SflUKl_ElIHlL£留HK)M_TM_K«密MK'H_FuMIM_?*:ECWlEP3JtT_mEE_ljaADIl留MK®T_lffiLJMJL£RJALCDBI塑HRKTjrZLB-KBSDLblBlHEFjKT_rEKFUiC25曾MRijmjs留JILHll书MP»DKi_mtTirmzEB笛IS-KWRM屹WUWTlUAiIiLblI]faf*MadarLH*山rTlLIvL31tax.FoE-t«ri^inortau1!ju.t■.■B.«pefLPz-abilaa%添加reportTitle参数,并设置其属性ParametersClass选择java.lang.String:L°JLSJLSJ■t»*rI-Lu^fteiltT衣■parkauC^at:.■Bj«pefLFT-abLiaxTtudnE&回时回明国&前山15社IhpMl:SSt^lKI粉?Ur4Flttri-冬HPHET-ZDITEII留IE湖gMgJIAP苦jAsni^ajaai留KKiKijawE-rnoir蚤留HKiSTJMJL5!:™i苦MKiEI.EiZHPIUT留JEKiKIJXCJO留HKiM.IMJCJE苗12KiH^FuMIU_J*!:uCM,留IE湖JUSLUlJm留KKiEI,m=HMnL£RJ*T[GaJ留ffiKiSTJHl_H50LVHL莅HP:iKT„TmUlC2S留50BJJFIEU5苦JILT11密ffi?:iKT_mTUMJZER耘I5_IMElJfcHIAJ2CJ£*Jlvldi_ATifikHif~ScrapQvli.MTimI『■<.x«■日.=I-!C.hmHtfritrHPiLad]IqRM-gTi-pdivv»客:fqW"略jn»lxD虹icntfXMLTr«v&»机Jssper均ftiRe^&rtD#i-gp>er4.5.1WMI^Itf!E(X>FormalPhrview目口血ZAfflWt(H)iOM4_n.ilri..,3l«p*r4Lu;m«A岖■AMhDkt«5tt9l«pcrtE甫Firwittri-警lEK'H_:OITm苦JA£F11_K!NHT留HKI[j2i3HKII0B苦S£KiKT_BjU_C01in帛1J®时顷心*!毛fJEFjJtT_9ZIIPrLlT财HKJtlJjMJdJ齿JEFjlT_R!SfllIHL2_EliniL£留ffiF?KT_FOMI*T_J«TGaT曾»BWJUSS_Wtt留MR3JtT_lJKL_HMnLn?_FACiaBJ鼾fflKiMJIUJUMLflR留1EP31T_TUFLAT15曾MUJIILM留JXU11鼾fflKJrt_mtUAU:2£A苦网皿P^WTGfft整if岫的t口11*|TiildiE_A『衅曲1“回■AirtlmBHtm*回l"lFnpKfWwFjHC-iliMm.0Flhtvkl1留ghf4Vblfe,irJiiii5F«r«nwlbrUmiUMMt■伊Kin狙V**ueEacpmignDw^nptS1"PrcpErtiMDcrauitVaiuiz-€KprcssionFrpaFt?LticINCprOpCilg司«□□□□□iliport^rntiiiLt.'上B.*ptrtFr^bltav凯园柄添加pieData(饼状图数据参数),并设置其ParameterClass为net.sf.jasperreports.engine.JRDataSource(这一步很重要,否则等会程序传数据时会出错),点击ParameterClass行的最右边【•••】按钮后弹出一个小窗口,如下图示:【添加crosstabData(交叉表数据参数),创建方法和上面的创建饼状图数据参数一样。】取J«p«r&cvftiRt^rl'4.S.1曰[|寻||百|32^(FlMllEl曲BMFee丽Pr^-w塑!口伸0XHpjWR?;HJ""Scn/tl*”HtitinISfladis,"ICflwiKttkrl3品?Fu-milL*Dkt4Sr1JIUdi3?:ip-3rtouh;u.t..E«pefLPTahliaxTindE4Di-i-i(r>wFt*vlf・1elrE«4TloJ^vm—ijHtiU■■史宓HKrgdrEjrnl*两个参数添加完成后,我们需要设置交叉表和饼状图的子数据集(subDataSet)。在最右边的Report康pti■皿信虹如<^.1Inspector面板的报表名中点击右键,在弹出的菜单中选择【AddDataset】:Kffltri*低:1康虐WForma?SwwWD(W)HUE晚昭E1%Kt眼■■占jnri■■IMLmgTflIII.jjIiillIixxj-LuE昨4Tt-QBtptrt,iELdi«ldiijtxiRtjxsiH豆林(F)*8©插画⑴■■vi>iILnivv-c-l4£〜S-EE-apQvli.ft虬eEi*B噩FurMit«riM宕?L«ldiE声W】”Bt"k冲目di_pn■MmxiITiftX««dtr"lC«liaa.HhfrlFiE[htvil1ICflimF“t«rI『■<■Ja4larLutFan-FaeIEukn-aundTHT-i|311■1■111诟叩打卜eHFQ■,3)为饼状图的subDataset设置Field的过程也是一样,只是对于的javabean不同而已。这样即可完成为subDataset添加Field,效果如下:JaspersoftiReportDesigner4.5-1文件(£}编辑旧视图QDFormatPreview窗口QfiDLJ5jCReportInspectorsubPataSatRaport【星Style曾FieldsVarialileE卢氢®-:^-dscrosstabParamatersFieldsamounttypenam^Variables亩怎Groups由"毫ds_pieL.XReportqueryExportqatryBeiid.attriljutta•jbvjl.J«n^._String[jCtBitfravii#rCSVBk.tosurccfxctlDdt*取消帮助.Hi最后按【完成】按钮,这时交叉表组件已经添加到报表中:*■皿4%i5tttl£l*111嶂助Forma?PwrwS5D>3KlIII®职时旦1%屈盗噌十*pib0■tif*tLip町t\叫MFurMiaL«tkJi.«ldETU'atilltlS-criptlelKfiE.CTHKRlAdl_pliITitli-HlWCrtjflrOitltF归HFfe£«XfltriatfclEC-altKiK»h£irBKIPtltlil1a43[o,or™.th]EMDts-icnitrINLLa-uJijiiIiij,lL!J$F{reportTitle}b—'it|bJn,m兰蔓昼丘i.T,IJIIIILJjl■1,■117,C-iIeho.FoB-t-arFit*ffoRtrLUITLI回留»>-uttM.H-EA-ElA-回A-曰TurikHtrS-erapblali.dw_m*!E心da^jiB■TintHNErwmtliilMEMFytSHht*,I日Csluu.HsfelirB1=1htiiil1S-E[D,0.555.3E3]土nC«lwiF”t・rt*'iI『■<.Taalar昭HAar,.JtDkti«*iIIBjcbEr-auni!!IMm—『iiitoii■[fenWv-i^«t1itv«rlMl|_D函SirXMLTrgM宣|底律.~D5ih■】iiii■ii』11■ihNtjjiL|-jCreiiiUhLEapwrI.ElHHBHtH■_£roi.«l«bJ_iCLirlQEliLff«EUk-m*IIBvrcadifiGlMFLCELMWi^三S詹洛'Jthltfl"T«Ui一Hri-a^♦w□BbiHu£1Li<_1Xauiid9bfe^>!ue«|■■|||£«iig£eg~i:f|IL1~139l,|■ifff'E■ZS3?专厂自gmi.l.i,illi.iiliii.lmi.l.i,ili.iillinnlii・l・ijD—一雳盟照™®,]tTexlprapimietsFontname|宋体|sia[19Bold一tafcUrHferfncStrfceThruuqh—|HDrizorMHlAJignrrenl[tculer—VrrhcfllAlflnment[s—Rolaton]虹《16—Un«邹■mp|Sincle—Lin«wcngsizeFinal;UnehtlBfituLeftkideni0RightMdont0SpacingBefore0SpacingAfter0TabSloplAfidtri40TabSi叫ahbt%stopssetPdfFontflans尊naw[|flP「KCa说SISanc-Licht.用fEeMMb噂豆1ftdfEncodinfl11m筒-1KS2-H1口11半.一UlHiTkUE]B1M1E-1$V{axisy}|$V{arftCHuinliMeasur-.^$V{typen>am白}tE>«{A*.riport回耍譬nBtt设置饼状图的字体等属性:VtlcanAIfi讪skw讷Dm心"[ItI■•魄■|网|囹■|】口J*、|lfc,■■■■・l!■MLI■i「i■i」■i■i.i■iS.i.』IjLIi%■■■I.i』11i■i.I.i.11i.i.I.i■』iIb1IJI.IIJIIli■七_Il・I■I■I・3j=IXiiimiord'ICresstnb36$佑RO.Q)I2JIM刷□I?源卖3踣5]□□□_u_u_u3n3_^公netsCotirs口icgmLabelPileRosnionSubctleExpresstonSubitleFaMSubetkeColorSIidwLegendLegrendFontLegendGatorLegendBackgroundColorLegendPostonGmsco-mizerQ\a^R&nderTypeThemeBactgroundAlpha(%}Fonegri'aundAlphaLabelrotation第四步:编译报表文件。编译成功后将会生成一个jasper后缀的文件:subDataSetReport.jasper。x区subEataS«tR«portx,I画qIdevi皂*0I$P{reportTitle}D=S1gTi-arFourth25251iTkutl1515%tFirst•SecondThirdFourthFifthTii=t15I5MBIiiiili第五步:在Java中生成报表,所需jar文件包括:jasperreports-4.5.1.jar、jasperreports-applet-4.5.1.jar、jasperreports-fonts-4.5.1.jar、jasperreports-javaflow-4.5.1.jar、jcommon-1.0.15.jar、jfreechart-1.0.12.jar、commons-digester-2.1.jar、groovy-all-1.7.5.jar、iText-2.1.7.jar、ilhxtAsian.jar。代码如下:packagecom.digitalchina.smartcity.myreport;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.OutputStream;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importnet.sf.jasperreports.engine.JRException;importnet.sf.jasperreports.engine.JRExporterParameter;importnet.sf.jasperreports.engine.JasperFillManager;importnet.sf.jasperreports.engine.JasperPrint;importnet.sf.jasperreports.engine.JasperReport;importnet.sf.jasperreports.engine.data.JRBeanCollectionDataSource;importnet.sf.jasperreports.engine.export.JRPdfExporter;importnet.sf.jasperreports.engine.util.JRLoader;importcom.digitalchina.smartcity.myreport.vo.DataForPie;importcom.digitalchina.smartcity.myreport.vo.DataForTable;publicclassTestExampleReport{publicstaticvoidmain(String[]args){try{TestExampleReporttestReport=newTestExampleReport();testReport.genReport();}catch(Exceptionex){ex.printStackTrace();/***@Method:genReport*@Author:Liaolz*@Description:生成报表文件*@param*@returnvoid*@throws*/publicvoidgenReport()throwsFileNotFoundException,lOException,JRException(System.out.println("=========开始生成报表=========");longstartTime=System.currentTimeMillis();//准备报表数据ListlistDataCrosstab=newArrayList();ListlistDataPie=newArrayList();String叩arrData={{"01”,"办事指引”,”458”},{"02”,"公共服务”,”833”},{"03”,"企业服务”,”74”},{"04”,"社区服务",”244”}};for(String[]data:arrData){//交叉表数据DataForTabledataCrosstab=newDataForTable();dataCrosstab.setId(data[0]);dataCrosstab.setAxisy("数量");dataCrosstab.setTypename(data[1]);dataCrosstab.setAmount(data[2]);listDataCrosstab.add(dataCrosstab);/**//饼状图数据DataForPiedataPie=newDataForPie();dataPie.setPieId(data[0]);dataPie.setPieTypename(data[1]);dataPie.setPieAmount(Integer.parseInt(data[2]));listDataPie.add(dataPie);for(inti=0;i<5;i++){//交叉表数据DataForTabledata=newDataForTable();data.setId(""+i);data.setAxisy("占比");data.setAmount(""+(((i+5)/total*100))+"%");data.setTypename("非常好_"+i);listData.add(data);}*///报表主数据源JRBeanCollectionDataSourceds=newJRBeanCollectionDataSource(listDataCrosstab);//交叉表数据源JRBeanCollectionDataSourcedsCrosstab=newJRBeanCollectionDataSource(listDataCrosstab);//饼状图数据源JRBeanCollectionDataSourcedsPie=newJRBeanCollectionDataSource(listDataPie);Mapparameters=newHashMap();parameters.put("reportTitle”,"市民需求情况(2012年1月〜2012年3月)");parameters.put("crosstabData”,dsCrosstab);parameters.put("pieData",dsPie);//生成JasperPrintJasperReportreport=(JasperReport)JRLoader.loadObject(newFile("D:\\iReport\\subDataSetReport.jasper"));JasperPrintjasperPrint=JasperFillManager.fillReport(report,parameters,ds);OutputStreamouputStream=newFileOutputStream(newFile("d:\\iReport\\out\\subDataSetReport.pdf"));//使用JRPdfExproter导出器导出pdfJRPdfExporterexporter=newJRPdfExporter();//设置JasperPrintListexporter.setParameter(JRExporterParameter.JASPER_PRINTasperPrint);exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,ouputStream);exporter.exportReport();ouputStream.close();System.out.println("=========生成报表完成,所需时间:"+((System.currentTimeMillis()-startTime)/1000)+"秒=========");}}生成的PDF报表:市民需求情况(2012年1月〜2012年3月)•办事指引•公我用%3企业服务,社区服务公共眼芳办事指引社KK务数量74833244完整的jrxml文件:
本文档为【JasperReport中使用多个数据源的方法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_997338
暂无简介~
格式:doc
大小:3MB
软件:Word
页数:50
分类:
上传时间:2020-05-18
浏览量:92