在程序开发过程中,打印功能是不可或缺的。iReport,是目前相当好用的一款插件,
同时,很好的支持springmvc。
1、项目依赖包,添加必须的JasperReports依赖包。
<!-- iReport JasperReports -->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>5.6.0</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-all</artifactId>
<version>2.2.2</version>
</dependency>
2、ireport视图处理扩展类
package zteict.qinhuangdao.framework.base.utils;
import java.util.Map;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import org.springframework.web.servlet.view.jasperreports.JasperReportsMultiFormatView;
/**
* @author: football98
* @createTime:: 16-6-8
* @classDescription: IReport视图处理扩展
*/
public class ApplicationIReportView extends JasperReportsMultiFormatView {
private JasperReport jasperReport;
public ApplicationIReportView() {
super();
}
protected JasperPrint fillReport(Map<String, Object> model) throws Exception {
if (model.containsKey("url")) {
setUrl(String.valueOf(model.get("url")));
this.jasperReport = loadReport();
}
return super.fillReport(model);
}
protected JasperReport getReport() {
return this.jasperReport;
}
}
3、springmvc xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd ">
<bean id="iReportView" class="zteict.qinhuangdao.framework.base.utils.ApplicationIReportView">
<!-- <property name="url" value="/WEB-INF/jasper/report2.jasper"/> -->
<property name="reportDataKey" value="jrMainDataSource"/>
</bean>
</beans>
4、Jasper报表的渲染需要用到XmlViewResolver视图解析器,这样你的项目中就会存在多个视图解析器。需要注意的是,项目中如果使用了多个视图解析器,则需要设置
order的值来区分解析器的使用顺序,order值越小则越靠前。增加XmlViewResolver视图解析器的同时,并指定其要解析的配置文件路径。
<bean id="jasperReportResolver" class="org.springframework.web.servlet.view.XmlViewResolver">
<property name="order">
<value>0</value>
</property>
<property name="location">
<value>classpath:applicationContext-jasper.xml</value>
</property>
</bean>
public String print(Model model) {
List<SumPrintVo> list = sumtableService.queryListPrint() ;
// 报表数据源
JRDataSource jrDataSource = new JRBeanCollectionDataSource(list);
// 动态指定报表模板url
model.addAttribute("url", "/jasper/test.jasper");
model.addAttribute("format", "pdf"); // 报表格式
model.addAttribute("jrMainDataSource", jrDataSource);
return "iReportView"; // 对应jasper-defs.xml中的bean id
}