一、 安装iReport
其实,有很多技术可以实现报表,因为项目很急,人员少,时间紧,任务重,因为之前了解过iReport,这次便直接get it started.
首先可以Google一下iReport
打开第一条记录,进入官网
目前最新版本是v5.5,之前网上很多资料都是低版本的,新版本不会用,我折腾了好久。
官网上提供了安装版和bin目录版,我都下载过。比较喜欢bin目录版本,OK ,Download it
下载完成后,解压目录如下
进入bin 目录,双击ireport.exe运行就好。
Ireportdesigner不知啥情况,界面上中英文夹杂。第一次打开不知道怎么下手,直觉告诉我,按照提示step to step。
二、配置DataSource
点击step1.会弹出这样的对话框。
此处和大家分享的是,采用JavaBean数据源。其他的方式,如果项目需要可Google一下或者查看官网文档。外事问Google,内事问Baidu。
给你的JavaBean数据源设置一个名字,如果有轻度强迫症的童鞋,名字都会想好久,就像我。
Factoryclass是让你配置一个静态测试工厂,提供一些在Preview时,可以查看的报表效果的数据。时间紧迫,可以不做。(此处可以直接用默认的,不会影响对ireport的基本使用)
好的,step1 done, 继续step2.
很漂亮的新建模板的界面,初次相逢,很是陌生,还是新建一个Blank A4吧, 下面的Open this Template和Launch Report Wizard,都可以选择。
点击Launch..
于是又出现,中英混血的窗口,就像现在职场里流行的中英文夹杂说话一样。请不要嘲笑,这很正常,IT一直是老外走在咱们前面。
接下来选择你刚刚设置好的数据源,然后可以一路next.
也许因为项目很着急,需要马上会基本使用iReport,所以会在网上找到很多文章,很多都会直接讲到设置JavaBean出现的界面。
我就是这样的情况,如果你遇到了这种情况,请不要着急。如果模板文件还没用新建好,在iReport的界面里是找不到刚刚那个界面的。所以一定要先建模板。
继续吧。
刚刚一路下一步,直到完成。会出现下面的界面。
四、配置JavaBean
设计界面如图。你可以放置你的报表的title,Header等。但是你的报表肯定会显示你的项目里的相关内容,或从数据库里查询或者其他内容。所以有一个JavaBean适配器。
1. 新建是JavaBean适配器(此次用eclipse)
2. 也就是说我们的类写好了。你可以选择以.class的形式与import到ireport,你也可以选择以.jar的形式。通常如果是web项目的话,class文件在服务器的项目类路径下,要繁琐一点。于是,走jar文件的方式。
3. 把.java文件打包成.jar。
选中你的java文件
然后右键>Export>
然后在出现的对话框里,设置一个漂亮的名字和导出的路径(比如说桌面)。接着一路Next
Until Finished.
4. 回到iReport,添加.jar文件。
点击工具>>选项,找到classpath.AddJar(就是刚刚你导出的jar)
勾选好Reloadable。然后完成。
然后配置JavaBean。
点击设计的主界面里的数据源图标。
出现下面的对话框
Switch到JavaBean DataSource选项.
在class name里输入你的JavaBean 适配器的全称类名(package + class name)
点击Read Attribute。此时会列出你bean里的所用Fields。
选择你要的字段即可
五、设计模版
设计这个是个体力活,把我几点就好。
每一个栏目官方称为Band。包含
Title:显示报表的Title,或者封面。
PageHeader:每一页的Header,可重复。
Detail:显示重复的内容。
…
我常用的组件:Static Text,静态文本也就是HTML里的Label。
TextField显示动态内容,Line 线条,Image 图片。
一般报表的设计:
1.直接Drag 一个控件到面板里即可。
2.拖动左侧导航中的:Fields中的字段。(通过数据源导入进来的)
表头(Header)为可变的的报表
1. 因为Header不能循环的显示。所以用到了Parameters
在Parameter上,右键鼠标,添加参数。
新建一个与你报表表头相关的参数。
然后把该参数拖动到相关位置即可。
报表里有其他循环数据
在Detail Band里,添加动态字段,即可循环显示。
设计完毕以后可以预览一下。
如果添加了参数,iReport提示你输入测试的参数。
Pdf效果
带图片的报表
其实很简单,拖动一个Image空间到相应显示的位置,拖动的时候,会提示你import一张图片,可选而已。
然后选中该图片,在右侧Property栏目找到Image Expression
添加一个图片路径的字段,在显示的时候,给该字段设置一个图片路径就好。
六、集成Struts2
新建一个Action。
配置相关Action名字或路径。
直接一张截图
此处配置数据源,显示格式,如果报表里有参数,还需配置参数。
数据源一定要有Set/Get方法
参数也是。
贴一段代码:
@SuppressWarnings("serial")
@ParentPackage("myreport")
@Action("view-report")
@Results({
@Result(name = "success", type ="jasper", params = { "location",
"WEB-INF/jasper/report2.jasper","format", "PDF", "dataSource",
"datas" }),
@Result(name = "press", type ="jasper", params = { "location",
"WEB-INF/jasper/report_press.jasper","format", "PDF",
"dataSource", "datas2"}),
@Result(name = "bind", type ="jasper", params = { "location",
"WEB-INF/jasper/report_bind.jasper","format", "PDF",
"reportParameters","params", "dataSource", "datas3" }) })
publicclass ReportAction extends ActionSupport {
private Integer id;
private List<EExport> datas;
private List<EExortPress> datas2;
private BookService bookService;
// private JREmptyDataSource datas3 ;
private List<EReportDetail> datas3;
@SuppressWarnings("rawtypes")
private HashMap params = new HashMap();
@Override
public String execute() throws Exception {
datas = new ArrayList<>();
if (id != null) {
EExport export = new EExport();
EBook e = bookService.load(EBook.class, id);
EProtype pro = bookService.load(EProtype.class, id);
EIsbn isbn = bookService.load(EIsbn.class, id);
export.setEsBookname(e.getEsBookname());
export.setEsCategories(e.getEsCategories());
export.setEsKilowords(e.getEsKilowords());
export.setEsEditorname(e.getEsEditorname());
export.setEsAuthorname(e.getEsAuthorname());
export.setEsAuthorsex(pro.getEsAuthorsex());
export.setEsAuthorage(pro.getEsAuthorage());
export.setEsAuthortitle(pro.getEsAuthortitle());
export.setEsAuthorunit(pro.getEsAuthorunit());
export.setEsAuthorbackground(pro.getEsAuthorbackground());
export.setEsDraftcontentvalue(isbn.getEsDraftcontentvalue());
export.setEsDraftissue(isbn.getEsDraftissue());
export.setEsDrafttreatment(isbn.getEsDrafttreatment());
export.setEsIssuetosecond(isbn.getEsIssuetosecond());
export.setEsTreatmenttosecond(isbn.getEsTreatmenttosecond());
export.setEsRemarktofirst(isbn.getEsRemarktofirst());
export.setEsTreatmenttofirst(isbn.getEsTreatmenttofirst());
export.setEsIssuetofinal(isbn.getEsIssuetofinal());
export.setEsRemarktosecond(isbn.getEsRemarktosecond());
export.setEsFinaltreatment(isbn.getEsFinaltreatment());
datas.add(export);
}
return super.execute();
}
好久没有写过文章了。梨花院落溶溶月,柳絮池塘淡淡风,如此良辰美景,把此刻分享一下。
七、关于字体
待续...