之前生成报表,数据源都是通过SQL查询获得,把SQL语句写在报表模板里。这次的数据源是需要调用存储过程,导出Excel报表,于是傻眼了。ireport里没法call 存储过程啊,网上查说可以封装成JavaBean,但是看了步骤好麻烦。同事有用jxl直接导出Excel的,不用jasperreport报表工具,觉得还是比较死板。后来问了岑同学,才知道有这么简便的方法,struts2原来是整合了jasperReport的,Action里只要通过调用service层得到数据,直接就可以编译报表导出来了。。。我真是out。。。orz
第一步:准备相关包放到工程的lib目录下:
groovy-all-1.7.5.jar
commons-beanutils-1.8.3.jar
commons-digester-1.7.jar
commons-logging-1.0.4.jar
iText-2.1.7.jar
iTextAsian.jar
iText-rtf-2.1.7.jar
jasperreports-4.0.2.jar
json-lib-2.3-jdk15.jar
struts2-core-2.1.8.1.jar
struts2-jasperreports-plugin-2.1.8.1.jar
struts2-json-plugin-2.1.8.1.jar
struts2-junit-plugin-2.1.8.1.jar
说明:这些包能够相兼容,当然你也可以使用其他一些相兼容的包
第二步:使用模板设计工具IReport制作模板(*.jrxml),编译成二进制文件(*.jasper)
第三步:新建ExportPDFAction
public class ExportPDFAction extends ActionSupport{
List list;
list get、set方法;
public String exportPDF()
{
try {
list =new ArrayList();
// 此处省略
// ...
String reportSource = request.getRealPath("/jasper/pdf_report.jrxml");
File parent = new File(reportSource).getParentFile();
//将.jrxml模板文件编译成为.jasper文件,当然,其文件名可以指定,如果没指定,则与.jrxml文件名一样.只是后缀不同而已
JasperCompileManager.compileReportToFile(reportSource, new File(parent, "pdf_report.jasper").getAbsolutePath());
} catch (EamDataAccessException e) {
e.printStackTrace();
} catch (JRException e) {
e.printStackTrace();
}
return SUCCESS;
}
}
第四步:struts.xml中的配置如下:
<package name="houseQueryAndReport" extends="jasperreports-default">
// 我加了继承jasperreports-default这个包,反倒报异常,不加反而能运行,好奇怪
<result-types>
<result-type name="jasper" class="org.apache.struts2.views.jasperreports.JasperReportsResult"></result-type>
</result-types>
<action name="exportPDF" method="exportPDF" class="cck.ExportPDFAction">
<result name="success" type="jasper">
<param name="location">
/jasper/pdf_report.jasper
</param>
<param name="dataSource">list</param>
<param name="format">PDF</param>
</result>
</action>
<action name="exportPDF" method="exportPDF" class="cck.ExportPDFAction">
<result name="success" type="jasper">
<param name="location">
/jasper/pdf_report.jasper
</param>
<param name="dataSource">list</param>
<param name="format">XLS</param>
</result>
</action>
</package>
location 是指我们刚才用iReport编译生成的jasper文件
dataSource 是指我们执行的数据库查询结果,JavaBean , List
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 生成图形的路