struts2笔记——整合JasperReports

JasperReports,Jasper .[dʒæspə]碧玉

16.1 JasperReports简介

JasperReport是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成Excel、PDF、HTML或者XML格式。这个工具是开源的,完全使用java编写。

 

JasperReport由一份XML格式的报表设计文件开始,经过编译、填充、导出或预览,可以产生多种格式的报表文件。除此之外,它还提供了一个iPeport的开发工具,该工具能以所见即所得的方式来开发报表定义文件。

 

使用JasperReports开发报表的核心工作就是编辑一个报表设计文件。这个文件可以使用手工方式编辑,这种方式效率低下,也可以使用iReport。

 

16.1.1下载和安装JasperReport

到官方站点:http://jasperreports.sourceforge.net下载(目前站点改为http://jasperforge.org/了,读者注)。下载解压后在dist文件夹内找到它的API文档和JAR包

 

下载其他开源项目

JasperReports框架生成一些格式的文档可能依赖另外一些开源项目,例如生PDF文档依赖于iTest项目;生成Excel文件则依赖POI项目。

 

16.1.2 JasperReports初探

以开发一个静态报表为例。

首先把jasperReports JAR包复制到工程的lib中

1、定义一个报表设计文件(.jrxml)

包含大量的JasperReports标签,可以使用iReport工具生成,读者不要花太多时间在这份文件上

2、把报表设计文件编译成报表文件(.jasper)

    public static void main(String[] args)throws JRException {

       JasperCompileManager

           .compileReportToFile("static.jrxml","static.jasper");

       System.out.println("成功编译成JasperReport文件(*.jasper)");

    }

3、填充数据(.jsprint)

    public static void main(String[] args)throws JRException {

       JasperFillManager

           .fillReportToFile("static.jasper", nullnew  

                          JREmptyDataSource());//使用空参数,空的数据源

       System.out.println("成功填充了一个报表文件(.jrprint)");

  }

.jsprint文件已经是一个可以显示的报表了,但是这份报表是格式无关的,它既可以生成PDF格式,也可以生成Excel格式

4、浏览报表

JasperReports使用JRViewer类浏览报表,这个类继承了java里的Jpanel.

public static void main(String[] args)throws JRException {

       JRViewer jrv=new JRViewer("static.jrprint",false);

       //C/S结构使用Jframe来装载JRViewer。B/S则使用Applet来装载

       JFrame jf=new JFrame("报表预览");

       jf.add(jrv);

       jf.pack();

       jf.setVisible(true);

    }

5、导出Excel文档

这时要POI项目支持,下载网址:http://poi.apache.org/

    public static void main(String[] args)throws JRException {

       JasperPrint print=(JasperPrint)JRLoader

               .loadObject("static.jrprint");

       //excel文件导出器

       JRXlsExporter exporter=new JRXlsExporter();

       //导出的目标文件

       exporter.setParameter(JRExporterParameter.JASPER_PRINT,                   print);

       //设置每张报表都写在不同的文件里

        exporter.setParameter(JRXlsExporterParameter

              .IS_ONE_PAGE_PER_SHEETtrue);

       exporter.exportReport();

       System.out.println("成功创建了一个excel文档");

    }

除了JRXlsExporter导出器外,JasperReports还提供了如下文件导出器

JRCsvExporter:用于导出CSV格式文件

JRHtmlExporter:导出HTML文件

JRPdfExporter:导出PDF文件

JRRtfExporter:导出RTF格式文件

JRTextExporter:导出文本文件

JRXmlExport:导出XML格式文件

除此之外,JasperReports还提供了一个导出管理器:JasperExportManager,可以将JasperPrint文件导出成HTML、PDF、XML格式的报表文件(没有excel格式)。还提供了一个运行管理器:JasperRunManager,只可以导出HTMl和PDF格式的文件

6、导出成PDF文件

需要iText项目支持,下载网点:http://itextpdf.com/

    public static void main(String[] args) throws JRException{

       JasperExportManager

           .exportReportToPdfFile("static.jrprint","static.pdf");

       System.out.println("成功创建一个PDF文件");

    }

 

16.1.3JasperReports的开发流程

1、定义报表设计文件(.jrxml)

2、使用JasperCompileManager编译.jrxml文件成.jasper文件

3、使用JasperFillManager工具填充.jasper文件成.jrprint文件

4、使用导出管理器JasperExportManager或各种格式的文件导出器(JRXxxExport)或JasperRunManager将.jrprint文件导出成各种格式。也可以使用JRViewer直接浏览报表

 

16.1.4解决PDF报表的中文问题

在报表设计文件中(.jrxml)有中文字符的地方设置中文字符所用的PDF编码,以及PDF字体。

在文件内容前增加以下元素:

<textElement>

    <font pdfFontName=”STSong-Light” pdfEncoding=”UniGB-UCS2-H”/>

</textElemtnt>

也可以在文件中定义style对象,如

<style pdfFontName=”STSong-Light” pdfEncoding=”UNIGB-UCS2-H”/>

 

16.2动态报表

1、定义报表设计文件(.jrxml)

可以在设计报表时使用<parameter>元素定义一些传入参数,如:

<parameter name=”book3” isForPrompting=”false”

       class=”java.lang.String”/>

定义之后,可以使用$P{book3}输出参数内容

2、编译,同上

3、填充

通过Map对象传入,如

Map<String, String> params=new HashMap<String, String>();

params.put("author", "李刚");

params.put("book1", "spring2.0宝典");

JasperFillManager.fillReportToFile("static.jasper", params,

       new JREmptyDataSource());

4、浏览或导出文件,同上

 

16.2.2带查询的的报表

即系统的报表显示来自数据库里的数据。

1、  定义报表设计文件

<!--定义一个参数 -->

<parameter name=”id” isForPrompting=”true” class=”java.lang.Integer”/>

isForPrompting:表示输入参数是否是用于查询语句

<!--定义查询 -->

<queryString><![CDATA[select * from bool_table where book_id>$P{id}]]/>

<!--将查询的字段定义成Field -->

<field name=”book_id” class=”java.lang.Integer”/>

<!--输出book_id的Field -->

$F{book_id}

 

创建报表设计文件时引用动态数据的方式

a、$V{variablesName}:访问变量

b、$P(parameterName):访问参数,参数通过Map对象填充

c、$F{fieldsName}:访问字段,通过查询数据库返回

 

2、  编译,同上

3、  填充

public static void main(String[] args)throws Exception {

       Map<String, String> params=new HashMap<String, String>();

       params.put("id", "1");

       JasperFillManager.fillReportToFile("simpleQuery.jasper",

           params, QueryFill.getConnection());

       System.out.println("成功填充了一个报表文件(.jrprint)");

    }

   

    private static Connection getConnection()throws     

           ClassNotFoundException,SQLException{

       String driver="com.mysql.jdbc.Driver";

       String url="jdbc:mysql://localhost/jee";

       String user="root";

       String password="123";

       Class.forName(driver);

       Connection conn=DriverManager

           .getConnection(url,user,password);

       return conn;

    }

 

16.3使用iReport设计报表

iReport是一个所见即所得工具,可以快速地编辑出精美的报表设计文件(.jrxml)

 

16.3.1下载和安装iReport

下载网站:http://jasperforge.org/ (官方已有中文版的)

 

16.3.2使用iReport

以带条件查询的报表设计文件为例,iReport的版本是3.7.1,版本不同菜单会有所不同

1、文件->new…->Report 新建文件.

2、建立数据库连接

把数据库驱动程序复制到iReport的lib路径下,重启iReport.(3.7版本已经有Mysql驱动,在目录iReport-3.7.1\ide10\modules\ext下)

点击”Report Datasources ”工具按钮,再new一个新的数据库连接,如图:

 struts2笔记——整合JasperReports

3、编写SQL查询语句

点击struts2笔记——整合JasperReports,出现以下对话框,写入SQL语句。

struts2笔记——整合JasperReports
 

如果SQL语句没有错误,会查询出表单字段,单击OK,iReport会自动添加Fields。

4、设计报表布局

在Report Elements中选择元素添加到.jrxml,再把Fields元素拉到合格的位置。设计好.jrxml后,就可以使用上面介绍的步骤生成需要格式的文档

 

16.4安装JasperReports插件

struts2项目中有这个插件,myeclipse 8中也有,名称为

struts2-jasperreports-plugin-x.jar,可以到http://struts.apache.org/下载

使用解压缩软件打开其中的struts-plugin.xml文件,发现

<package name="jasperreports-default" >没有扩展原有的struts-default,李刚老师已经向struts2项目组反映(在struts2.1.8版中,已经发现插件配置文件扩展了extends="struts-default")

 

16.5使用JasperReports报表

16.5.1创建生成报表的Action

生成报表的Action和大部struts2的Action一样,但该Action使用List封装大量VO(value object,也就是要在页面显示的javaBean)

1、VO

public class Book {

    private int id;

    private String name;

    private String author;

    public int getId() {

       return id;

    }

    public Book(int id,String name,String author){

       this.id=id;

       this.name=name;

       this.author=author;

    }

}

2、Action

public class JasperAction extends ActionSupport {

    public List getBookList(){

       List<Book> result=new ArrayList<Book>();

       result.add(new Book(1,"Spring2宝典","李刚"));

       result.add(new Book(2,"轻量级J2EE企业应用实战","李刚"));

       result.add(new Book(3,"基于J2EE的Ajax宝典","李刚"));

       return result;

    }

}

16.5.2配置生成JasperReports报表的Action

需要增加一个类型为jasper类型的Result,故应该让该Action所在包继承jasperreports default包。定义jasper类型的Result时,需要配置以下3个属性:

1、 location:指定报表设计文件(.jasper)的位置

2、 format:指定生成报表文件的格式,如HTMl、PDF

3、 dataSource:指定一个集合属性名,让报表自动迭代输出该集合中的VO对象

<package name="lee" extends="jasperreports-default">

    <action name="export"

              class="com.rain.shop.jasperreports.JasperAction">

       <result name="sucess" type="jasper">

           <param name="location">jasper\sample_report.jasper</param>

           <param name="format">PDF</param>

           <param name="dataSource">bookList</param>

       </result>

    </action>

</package>

 

16.5.3生成JasperReport报表

经过上面步骤,只要提供系统所需的报表设计文件即可,这个文件可以使用iReport工具设计。按照上面VO的设计,在报表设计文件中增加3个字段,如:

<field name=”id” class=”java.lang.Integer”/>

可以直接在iReport添加,如:

struts2笔记——整合JasperReports

有了field,就可以在iReport上设计它们的位置和样式。

最后向export.action发送请求,将会获得一份PDF文档。系统会下载一份文件,后缀是

action。如果希望让系统自动使用该报表文件的后缀是pdf,应该在Struts2拦截请求后缀中增加pdf,然后直接向export.pdf请求,将得到一份名为export.pdf文件。

转载于:https://my.oschina.net/ldm95/blog/733446

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值