您现在的位置是:首页 > 互联网 > 正文
JasperReport涓枃鏂囨(Jasperreport基本介绍(Jasperreport与Ireport介绍))
发布时间:2022-07-18 01:35:27编辑:来源:
大家好,小太来为大家解答以上问题。JasperReport涓枃鏂囨,Jasperreport基本介绍(Jasperreport与Ireport介绍)这个很多人还不知道,现在让我们一起来看看吧!
一、Jasperreport基本介绍
二、Jasperreport与Ireport介绍
Jasperreport是一个报表打印工具,支持pdf和csv格式的报表打印。
JasperReport是一个开源工具包。您可以通过将JasperReport包添加到项目的类路径中来开始使用它。您可以通过调用包中的类从java程序中操作jrxml文件来编译、显示和输出报告。
Jasperreport的报表生成过程如下图所示。
如上图。有两种方法可以制作报告模板:
1)使用ireport图形编辑工具,这是一个用于报表编辑的图形工具。编辑后输出jrxml文件(xml格式)生成jasper文件(结尾为。碧玉);
2)直接编译java代码生成jasper文件(结尾为。贾斯珀)。
最终用途是编译后的*。贾斯珀文件。
Jasperreport支持多种数据源,包括xml、数据库、JavaBean等。
三、Jasperreport基本类
net.SF.jasperreports.engine.jaspercompiler类。
这个类的几个静态方法可以用来编译报告(详见api文档)。
编译后,Jaspercompiler可以用两种方式处理它:
1返回JasperReport对象。
2.在。jrxml文件的位置。
两种方法由程序员自己选择。但是,我更喜欢使用。贾斯珀文件。毕竟报表的结构不是每天都变的,所以每次重新编译报表并不是很划算。
net.SF.jasperreports.engine.jasperfllmanager类
这个类的功能是用数据填充报表。它可以使用JasperReport对象或。Jasper文件用作报告模板。
它也有两种处理方法:
1返回一个JsaperPrint对象。
2.在。贾斯珀文件的位置。
该类使用net.SF.jasperreports.engine.Jrdatasource接口的实现作为数据源。任何实现JRDataSource的类都可以用作数据源。
net.SF.jasperreports.engine.data包中定义了一些数据源,可以根据自己的需要选择。我使用JRTableModelDataSource作为
3.net.SF.jasperreports.engine.jasperprintmanager和
net.SF.jasperreports.engine.jasperexportmanager这两个类的用途是打印和导出报告。他们使用JasperPrint和。jrprint文件作为输入。
四、Jasperreport实例演示
废话少说,来做一些基本的演示吧。调查中只做了三点尝试:1)使用ireport设计模板,使用xml文件作为数据源;
2)使用ireport设计模板导入jfreechat对象;
3)用java代码设计模板,数据源是对象数组。
让我们逐一解释。好,我们走吧!
五、Ireport设计模板,xml数据源
1)安装ireport。
直接单击ireportforWindows版本的安装文件。安装文件已经包含jasperreport组件,这里不做描述。有问题问百度!
2)打开ireport
Ireport3.7.4用户界面如图所示。
警官,你看到用户界面上的“快速启动”了吗?按照图1,2,3做,基本就能搞清楚ireport是什么了!
3)添加一个数据源
点击标签,界面如下:
哇,这么多数据来源,看来真的好强大。我们选择“xmlfiledatasource”,单击下一步,
根据上图填写数据源名称和数据源的xml文件。确保选择“填写报告时使用报告表达式”。点击“保存”,相应的生成结果会出现在下图的标记处。
现在让我们看看刚刚添加的xml数据源的具体结构:
数据源准备好了,可以开始模板创建了。
4)创建模板
在上图中点击“②”,出现下图。
点击“Launchreportwizard”,如下图:
输入报表名以及保存路径,点击“下一步”
在“Connections/Datasources”中选择你需要的数据源。接下来就直接点击“下一步”,直到完成。
点击完成后,进入模板元素设计页面。
图中,左边标记为页面监视器(reportinspector),右边为组件工具栏。若客官您在使用的过程中,不小心关闭了这些窗口,您可以在菜单栏“窗口”中找到,点击之后,该窗口就会出现了。
5)添加元素
在组件工具栏中选择组件,直接拖拽到模板中。
点击图中红色标记,进入如下图:
将图中标记的“Customers”拖拽到下方的标记处,此处的作用就是要将数据源中的数据字段添加要ireport中,以便下一步为刚刚建立的“Field”元素指定,查询语句。如下图。
点击OK即可。
再右击Field元素,点击“EditExpression”,如图:
将Field括号内的改成您需要的字段如“CompanyName”。点击“Apply”
做到这一步,您可能觉得“应该该做了都做完了,可以进行预览了!”,其实我也这么想的,也这么做的,可是,预览报错,经过研究,我还是少做了一步,而这一步至关重要,就是我们没有选择xml文件中的数据list节点。
您必须要按照如上图所做,输入Query语句。
好了,这下我们就可以预览了。
6)预览报表
点击“preview”按钮就成,让我们看看效果吧:
呵呵,丑是丑了点,但是这是我们头一回用ireport,还是很有成就感的。
六、ireport设计模板,导入jfreechat对象
JasperReport在用数据填充报表时,根据图形报表的类型,生成对应的JFreeChart的Dataset对象,再调用org.jfree.chart.ChartFactory产生出对应的org.jfree.chart.JFreeChart对象。获取到该对象后,JasperReport在exporter里建立一个java.awt.image.BufferedImage对象,
BufferedImage返回一个java.awt.Graphics2D对象,再将它传入给之前JFreeChart对象,最后调用JFreeChart对象的draw方法将图形输出到BufferedImage对象,供给Exporter使用。
在介绍导入jfreechat对象之前,我们现在讨论一个东西,这个东西很有用,叫scriptlet---脚本语言,听过吧,我们把生成jfreechat对象的java代码放在报表模板的脚本里,在编译模板时,连同脚本一起编译进去。
jasperReport也是支持scriptlet的哦,先分析一下JasperReport的API吧!在填充报表时scriplet是一个非常有力的工具,
JRAbstractScriptlet.java位于net.sf.jasperreports.engine包下是一个抽象类
beforeReportInit()
afterReportInit()
beforePageInit()
afterPageInit()
beforeColumnInit()
afterColumnInit()
beforeGroupInit(Stringgroujpame)
afterGroupInit(Stringgroujpame)
看看这些名字就知道你能完成那些功能,这几个方法是要求我们实现的,jasperReport给我们提供了一个实现类JRDefaultScriptlet.java,默认的空实现了上面几个方法,它只是很便利的为我们提供了所需的八个方法的空实现。我们写自己的scriptlet时需要继承JRDefaultScriptlet.java这个类实现自己的相应的功能即可。
七、好了,我们现在就来为模板添加scriptlet
八、1)在模板中,选中整个模板,如图:
双击右边的属性窗口,将其中的内容设置为如图所示的内容:
将“scriptletclass”设为您即将要制作的java类,这里我的java类名叫scriplet.ScriptletDemo。
九、其内部代码如下:
packagescriplet;
importnet.sf.jasperreports.engine.JRDefaultScriptlet;
importnet.sf.jasperreports.engine.JRScriptletException;
importnet.sf.jasperreports.renderers.JFreeChartRenderer;
importorg.jfree.chart.ChartFactory;
importorg.jfree.chart.JFreeChart;
importorg.jfree.chart.plot.PiePlot;
importorg.jfree.chart.plot.PiePlot3D;
importorg.jfree.data.general.DefaultPieDataset;
publicclassScriptletDemoextendsJRDefaultScriptlet{
publicvoidafterColumnInit()throwsJRScriptletException{
System.out.println("**************************************afterColumnInit()**************************************");
}
@Override
publicvoidafterDetailEval()throwsJRScriptletException{
System.out.println("**************************************afterDetailEval()**************************************");
}
@Override
publicvoidafterGroupInit(Stringgroujpame)throwsJRScriptletException{
System.out.println("**************************************afterDetailEval()**************************************");
}
@Override
publicvoidafterPageInit()throwsJRScriptletException{
System.out.println("**************************************afterPageInit()**************************************");
}
@Override
publicvoidafterReportInit()throwsJRScriptletException{
System.out.println("**************************************afterReportInit()begin**************************************");
//createpiechartdataset
DefaultPieDatasetdateset=newDefaultPieDataset();
//setdatasetvalue
dateset.setValue("Chinese",108);
dateset.setValue("Math",110);
dateset.setValue("English",74);
dateset.setValue("ScienceDepartment",226);
/**//*
*createjfreeChartobject
*thefirstparameterispiecharttitle
*thesecendparameterisdatasetofpiechart
*thethreeparameterisbooleanvalue,createchartnote
*thefourparameterisbooleanvalue,it'satooltipofmovemouseon
*configurecharttogenerateURLs,It'sgetaPiePlot3Dobject
*
*/
JFreeChartfreeChart=ChartFactory.createPieChart3D("ReportPieChart",dateset,true,false,false);
PiePlotpieplot=(PiePlot)freeChart.getPlot();
pieplot.setNoDataMessage("Nodatatodisplay");
//setvariable"jfreeChart"value
this.setVariableValue("jfreechart",newJFreeChartRenderer(freeChart));
System.out.println("**************************************afterReportInit()end**************************************");
}
@Override
publicvoidbeforeColumnInit()throwsJRScriptletException{
System.out.println("**************************************beforeColumnInit()**************************************");
}
@Override
publicvoidbeforeDetailEval()throwsJRScriptletException{
System.out.println("**************************************beforeDetailEval()**************************************");
}
@Override
publicvoidbeforeGroupInit(Stringgroujpame)throwsJRScriptletException{
System.out.println("**************************************beforeGroupInit()**************************************");
}
@Override
publicvoidbeforePageInit()throwsJRScriptletException{
System.out.println("**************************************beforePageInit()**************************************");
}
@Override
publicvoidbeforeReportInit()throwsJRScriptletException{
System.out.println("**************************************beforeReportInit()**************************************");
}
publicStringshowInfor()throwsJRScriptletException{
return"theisscriptletscriptletscriptletthe,sscriptletreporttheisascriptletreportthisisascriptletreportthisisascriptletreport";
}
}
十、2)新建变量variable
如图在选中“Variable”,右击,点击“添加variable”
将新建的variable属性设置如下图所示:
其中variableclass设为“net.sf.jasperreports.engine.JRRenderable”,同志您可能要迷惑了,该选项的下拉菜单中没有该选项啊,是的,的确没有,但是你可以粘贴进去。
十一、3)添加图像,直接将组件中的“image”对象拖拽进来,拖拽的时候,会有图片选择框,这个没有关系,你可以选择一个您喜欢的图片,也可以直接取消,只不过是一个标志,在模板中出现如下画面:
是不是很丑呢,嘿嘿,我也觉得丑。
好了,下面来设置图片的属性,这个才是关键的。属性如下图:
重要的是imageexpression以及expressionclass,分别设为“$V{jfreechart}”、“net.sf.jasperreports.engine.JRRenderable”
至此模板设置成功。
十二、4)代码测试
将上面设计好的模板保存为“E:/ireport/jfreechat.jrxml”
写一段java代码测试一下:
packagetest;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.InputStream;
importjava.util.HashMap;
importnet.sf.jasperreports.engine.JREmptyDataSource;
importnet.sf.jasperreports.engine.JasperCompileManager;
importnet.sf.jasperreports.engine.JasperFillManager;
importnet.sf.jasperreports.engine.JasperPrint;
importnet.sf.jasperreports.engine.JasperReport;
importnet.sf.jasperreports.engine.base.JRBaseVariable;
importnet.sf.jasperreports.view.JasperViewer;
publicclassJChartReportMain{
/**
*Methodname:main<BR>
*Description:main<BR>
*Remark:<BR>
*@paramargsvoid<BR>
*/
publicstaticvoidmain(String[]args){
Stringpath="
Filefile=newFile(path);
InputStreamin;
try{
HashMap<String,String>parameters=newHashMap<String,String>();
parameters.put("ReportTitle","LAOSHULIN");
in=newFileInputStream(file);
JasperReportjasperReport=JasperCompileManager.compileReport(in);
for(inti=0;i<jasperReport.getVariables().length;i++){
JRBaseVariablejb=(JRBaseVariable)jasperReport.getVariables()[i];
System.out.println(jb.getValueClassName()+jb.getName());
}
JasperPrintjasperPrint=JasperFillManager.fillReport(jasperReport,
parameters,newJREmptyDataSource());
JasperViewerviewer=newJasperViewer(jasperPrint);
viewer.setVisible(true);
}catch(Exceptione){
e.printStackTrace();
}
}
}
运行结果如图:
你看多棒啊,是不是觉得自己很牛叉啊!
本文到此结束,希望对大家有所帮助。
标签:
猜你喜欢
最新文章
- DeepSeek公告:线上服务遭大规模恶意攻击,暂限非+86手机号注册
- IGN揭秘《刺客信条:影》新实机演示:主角形象深入人心!
- 焕新登场:全新起亚K4紧凑型车图解赏析
- 重庆:2025年将持续推进163项城中村改造项目
- 蔚来乐道春节期间暂停车机升级,2月6日恢复推送服务
- 超有牌面!国产游戏《明末:渊虚之羽》登上英国《EDGE》杂志封面,漫画风女侠惊艳亮相
- 币界网晚间行情速递:BTC比特币报价$103,391.48,日内微跌1.04%
- 暗区突围:全面转载新手必备攻略
- 未来人生:个人满级天赋展示与深度评价(五)
- 探索功夫英雄的奇妙世界:玩法特色与剧情概览
- 最后一波福利!速来领取《黑神话:悟空》限定红包封面!
- 《暗黑4》Steam史无前例大促:标准版仅售191.4元,速来抢购!
- 广东:2027年目标全面构建绿色低碳循环经济体系
- 金价飙升,直逼840元大关!黄金店铺春节延期休假,蛇金饰品与足金手机贴受热捧!
- 《宝可梦卡牌P》新扩展包时空激战1月30日震撼发布,帝牙卢卡荣耀参战
- 截至今晨7点,全国172个公路路段受雨雪寒潮侵袭影响
- 币界网晚间行情速递:DOT波卡币攀升至6.446美元/枚,日内涨幅达2.01%
- 《龙腾世纪4》销量惨淡致EA股价暴跌21.25%!市场反应强烈
- 比亚迪海豹汽车OTA升级:全新引入城市领航功能等重磅更新
- 特朗普透露或于30日天内决断TikTok命运
- 10亿基金助力,中部城市赣州抢占人形机器人产业先机
- 《蛋仔派对》服务器崩溃引发玩家不满,官方深夜致歉并修复问题
- Stellantis重启美国贝尔维迪尔工厂,千余员工将重返岗位
- 一鸣食品全资子公司增资扩建:1.32亿打造4500头规模繁育基地