博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于iReport5.5+JavaBean+Struts2(注解方式)的报表设计与查看
阅读量:4030 次
发布时间:2019-05-24

本文共 4662 字,大约阅读时间需要 15 分钟。

基于iReport5.5+JavaBean+Struts2(注解方式)的报表设计与查看

一、  安装iReport
二、  配置Datasource、新建一个报表
三、  配置JavaBean数据源
四、  配置iReport的classpath
五、  设计模板
六、  集成Struts2
七、  关于字体

一、  安装iReport

其实,有很多技术可以实现报表,因为项目很急,人员少,时间紧,任务重,因为之前了解过iReport,这次便直接get it started.

首先可以Google一下iReport

打开第一条记录,进入官网

下载最新版iReport Designer

目前最新版本是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();

}

好久没有写过文章了。梨花院落溶溶月,柳絮池塘淡淡风,如此良辰美景,把此刻分享一下。

七、关于字体

待续...

 

你可能感兴趣的文章
[LeetCode By Python]118. Pascal's Triangle
查看>>
[LeetCode By Python]121. Best Time to Buy and Sell Stock
查看>>
[LeetCode By Python]122. Best Time to Buy and Sell Stock II
查看>>
[LeetCode By Python]125. Valid Palindrome
查看>>
[LeetCode By Python]136. Single Number
查看>>
[LeetCode By Python]167. Two Sum II - Input array is sorted
查看>>
[LeetCode BY Python]169. Majority Element
查看>>
[LeetCode By Python]172. Factorial Trailing Zeroes
查看>>
[LeetCode By MYSQL] Combine Two Tables
查看>>
python jieba分词模块的基本用法
查看>>
[CCF BY C++]2017.12 最小差值
查看>>
[CCF BY C++]2017-12 游戏
查看>>
如何打开ipynb文件
查看>>
[Leetcode BY python ]190. Reverse Bits
查看>>
面试---刷牛客算法题
查看>>
Android下调用收发短信邮件等(转载)
查看>>
Android中电池信息(Battery information)的取得
查看>>
SVN客户端命令详解
查看>>
Android/Linux 内存监视
查看>>
Linux系统信息查看
查看>>