JSP学习笔记(一百零一):在struts2中使用JasperReports
1.JasperReports的用途
JasperReports是一个用Java开发的开源的程序库,使用户能够透过它,利用Java语言来开发具有报告功能的程序。JasperReports的模版采用XML格式,从JDBC数据库中撷取合适的资料,并把资料在屏幕、打印机显示,或以PDF、HTML、XLS、CSV及XML等各种格式储存。
JasperReports的报告模板可以以iReport之类的工具来制作,只要把报告储存成XML格式,就可以让JasperReport阅读,然后再编译成为.jasper档。
2.iReport的使用
首先到官方下载iReport,下载地址:http://sourceforge.net/project/showfiles.php?group_id=64348
下载安装后,运行iReport,我简要的介绍一下IReport的使用:
1)连接到数据库:菜单->Data->Connections/Data Sources,New,Database JDBC connection->Next,
这里我连的是oracle数据库。
2)执行查询:菜单->Data->Report Query,输入对应的sql语句
3)插入数据:查询完以后,会把查询到的字段都列出来,把字段拖到detail区域,执行(菜单->Build->Execute with active connection),可以看到效果
4)编译:菜单->Build->Compile,会编译成jasper格式的文件,供JasperReports的使用
5)使生成的PDF支持中文:需要把iText中的iTextAsian.jar包复制到iReport安装文件夹的lib文件夹中,或者通过菜单->Classpath添加。然后在对应有中文的地方,查看Properties(属性),修改下列数据:
PDF Font:STSong-Light
PDF embedded:勾选
PDF Encoding:UniGB-UCS2-H (Chinese Simplified)
6)相关:通过菜单Build->****** Preview,可以生成其他各种格式的预览,这些格式的预览需要到对应的文件夹去查看;通过菜单Options->Settings,可以修改相关的设置,比如修改软件的语言,或者生成预览,编译文件的路径等等
3.JasperReports的使用
我使用JasperReports是在Struts2的基础上使用的,单独使用的话,也差不太多。
1)与Struts2的整合:
把JasperReports的包添加到项目中:jasperreports-3.x.x.jar;
把iText的包添加到项目中:iText-2.x.x.jar、iText-rtf-2.x.x.jar、iTextAsian.jar;
把struts2的JasperReports插件添加到项目中:struts2-jasperreports-plugin-2.0.x.jar;
在struts.xml配置文件中添加如下内容:
<result-types>
<result-type name="jasper"
class="org.apache.struts2.views.jasperreports.JasperReportsResult" />
</result-types>
……
</package>
2)添加一个Action类:
private List queryList;
@Override
public String execute() throws Exception {
queryList = searchList();
return SUCCESS;
}
public List getQueryList() {
return queryList;
}
public void setQueryList(List queryList) {
this.queryList = queryList;
}
}
3)修改struts2配置文件,输出结果:
<result name="success" type="jasper">
<param name="location">/WEB-INF/test.jasper</param>
<param name="dataSource">queryList</param>
<param name="format">PDF</param>
</result>
</action>
访问test.action就会打开输出的报表了
我来讲下这几个参数的含义:
location 是指我们刚才用iReport编译生成的jasper文件
dataSource 是指我们执行的数据库查询结果,在testAction类里把这个结果查询出来,这个参数必须要有
format 是指需要输出的类型,默认是PDF,其他的输出类型有:XML、HTML、XLS、CSV、RTF ,注意这里一定要大写
除了这几个参数,还有下列参数:
delimiter 是指如果输出类型为CSV的话,指定分割符,默认为“,”
parse 是指是否解析location参数中的EL表达式,默认为 true
contentDisposition 指定disposition,默认为“inline”,如果设为“attachment”就是强制下载
documentName 输出的文件名
format 格式,默认为“PDF”,其他的有:CSV、HTML、RTF、XLS、XML
imageServletUrl 生成图形的路径