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)
3、填充数据(.jsprint)
.jsprint文件已经是一个可以显示的报表了,但是这份报表是格式无关的,它既可以生成PDF格式,也可以生成Excel格式
4、浏览报表
JasperReports使用JRViewer类浏览报表,这个类继承了java里的Jpanel.
public static void main(String[] args)throws JRException {
5、导出Excel文档
这时要POI项目支持,下载网址:http://poi.apache.org/
除了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/
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>
</textElemtnt>
也可以在文件中定义style对象,如
<style pdfFontName=”STSong-Light” pdfEncoding=”UNIGB-UCS2-H”/>
16.2动态报表
1、定义报表设计文件(.jrxml)
可以在设计报表时使用<parameter>元素定义一些传入参数,如:
<parameter name=”book3” isForPrompting=”false”
定义之后,可以使用$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,
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 {
16.3使用iReport设计报表
iReport是一个所见即所得工具,可以快速地编辑出精美的报表设计文件(.jrxml)
16.3.1下载和安装iReport
下载网站:http://jasperforge.org/ (官方已有中文版的)