Spring3 Web MVC 集成Jasper Report生成PDF例子

简介: Spring3 Web MVC 集成JasperReport生成PDF例子 一:环境搭建与配置 1.      安装JDK6以上版本 2.      安装STS, 下载地址如下:http://www.

Spring3 Web MVC 集成JasperReport生成PDF例子

一:环境搭建与配置

1.      安装JDK6以上版本

2.      安装STS, 下载地址如下:http://www.springsource.org/downloads/sts-ggts

3.      下载并安装Tomcat7

4.      创建一个Dynamic Web Project项目,然后选择创建好的项目右键选择

Configuration->convert to Manve Project.

5.      添加web.xml文件,在WEB-INF目录下新建reports, pages, classes三个子目录

6.      新建index.jsp文件在webapp目录下。

7.      最终的项目目录结构如下:


二:Spring配置详解

在web.xml中配置Spring的DispatchServlet与Context Listener,配置如下:


在express-servlet.xml中配置spring view解析器


三:Jasper Report配置详解

在jasper-views.xml添加如下配置


四:Report内容与数据源

两个报表,演示了子报表的用法,同时还演示了如何想子报表传递数据源,以及参

数传递在报表中显示图像等技巧。需要特别说明的是如果要在报表中使用图像路径

图像必须位于WEB-INF/classes下面,因为JasperReport解析是按找类路径寻找。关

于报表的详细内容建议查看下载以后的源文件,此处不再细说。

五:Controller与注解

Spring3 Controller支持注解(annotation)方式,使用非常方便,生成PDF报表的

Controller代码如下:

package com.gloomyfish.express.controllers;

import java.util.HashMap;
import java.util.Map;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JREmptyDataSource;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.gloomyfish.report.dao.MockDataFactory;

@Controller
public class JasperReportController {
	
	protected static Logger logger = Logger.getLogger("controller");
	
    /**
     * Retrieves the PDF report file
     * 
     * @return
     */
    @RequestMapping(value = "/getpdfReport", method = RequestMethod.GET)
    public ModelAndView doSalesReportPDF(ModelAndView modelAndView) 
		 {
		logger.debug("Received request to download PDF report");
		
		// Retrieve our data from a mock data provider
		MockDataFactory dataprovider = new MockDataFactory();
		
		// Assign the datasource to an instance of JRDataSource
		// JRDataSource is the datasource that Jasper understands
		// This is basically a wrapper to Java's collection classes
		JRDataSource categoryData  = dataprovider.getCategoriesData();

		// parameterMap is the Model of our application
		Map<String,Object> parameterMap = new HashMap<String,Object>();
		
		// must have the empty data source!!!
		JREmptyDataSource emptyData = new JREmptyDataSource();
		parameterMap.put("datasource", emptyData);
		parameterMap.put("JasperfishSubReportDatasource", categoryData);
		parameterMap.put("JasperfishSummaryInfo", dataprovider.getSummaryInfo());
		
		// pdfReport is the View of our application
		// This is declared inside the /WEB-INF/jasper-views.xml
		modelAndView = new ModelAndView("pdfReport", parameterMap);
		
		// Return the View and the Model combined
		return modelAndView;
	}
}
Mock数据工厂代码如下:

package com.gloomyfish.report.dao;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

public class MockDataFactory {
	
	public MockDataFactory()
	{
		System.out.println("create mock up data");
	}
	
	public GloomyFishSummaryInfoBean getSummaryInfo()
	{
		GloomyFishSummaryInfoBean summaryBean = new GloomyFishSummaryInfoBean();
		summaryBean.setBlogURL("http://blog.csdn.net/jia20003");
		summaryBean.setMajorDomain("J2SE, J2EE, WEB developer");
		summaryBean.setName("jia20003");
		summaryBean.setNickName("gloomyfish");
		summaryBean.setRegDate("2003-03-02");
		summaryBean.setWorkYears(8);
		return summaryBean;
	}
	
	public JRDataSource getCategoriesData()
	{
		List<ArticlesCategory> listData = new ArrayList<ArticlesCategory>();
		SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy, hh:mm:ss");
		Date createDte = new Date();
		ArticlesCategory category1 = new ArticlesCategory();
		ArticlesCategory category2 = new ArticlesCategory();
		ArticlesCategory category3 = new ArticlesCategory();
		ArticlesCategory category4 = new ArticlesCategory();
		ArticlesCategory category5 = new ArticlesCategory();
		ArticlesCategory category6 = new ArticlesCategory();
//		ArticlesCategory category7 = new ArticlesCategory();
//		ArticlesCategory category8 = new ArticlesCategory();
//		ArticlesCategory category9 = new ArticlesCategory();
//		ArticlesCategory categoryTen = new ArticlesCategory();
		category1.setCategoryName("Android Development");
		category1.setCount(6);
		category1.setCreateDate(sdf.format(createDte));
		category2.setCategoryName("Swing Desktop Development");
		category2.setCount(21);
		category2.setCreateDate(sdf.format(createDte));
		category3.setCategoryName("JAVA 2D Image Process");
		category3.setCount(56);
		category3.setCreateDate(sdf.format(createDte));
		category4.setCategoryName("J2EE");
		category4.setCount(8);
		category4.setCreateDate(sdf.format(createDte));
		category5.setCategoryName("HTML5");
		category5.setCount(4);
		category5.setCreateDate(sdf.format(createDte));
		category6.setCategoryName("Network Protocols Research");
		category6.setCount(4);
		category6.setCreateDate(sdf.format(createDte));
		category6.setCategoryName("ExtJS Learning");
		category6.setCount(2);
		category6.setCreateDate(sdf.format(createDte));
		listData.add(category1);
		listData.add(category2);
		listData.add(category3);
		listData.add(category4);
		listData.add(category5);
		listData.add(category6);
		JRBeanCollectionDataSource data = new JRBeanCollectionDataSource(listData);
		return data;
	}

}
启动运行在浏览器中访问地址为:http://localhost:8080/express/hello.html

六:Deploy与运行

全部代码完成以后,从IDE中运行Maven的clean与install命令,得到war包

将war拷贝到tomcat的webapps下面即可启动tomcat然后从浏览器访问。

点击[Get PDF Report]会自动在新窗口中打开生成的PDF报表文件。

程序运行打开主页面结果如下:


获取PDF报表在浏览器中打开以后效果如下:


七:常见问题

1.      必须在applicationContext.xml中导入jasper-views.xml资源否则报表不会被编译

          为jasper文件

2.      Web.xml的servlet名必须与spring的xxx-servlet.xml中的xxx一致

3.      Jasper-views.xml中声明的子报表路径参数与数据参数必须与报表文件jrxml中保

         持一致

4.      报表中field变量名必须与Java Class中的field变量名一一对应。

 

八:项目文件打包下载,解压缩作为Maven项目导入以后运行clean与 install命令。

下载地址:http://download.csdn.net/detail/jia20003/4963552

转载请注明-2013-01-05


目录
相关文章
|
3月前
|
JSON API 数据处理
Winform管理系统新飞跃:无缝集成SqlSugar与Web API,实现数据云端同步的革新之路!
【8月更文挑战第3天】在企业应用开发中,常需将Winform桌面应用扩展至支持Web API调用,实现数据云端同步。本文通过实例展示如何在已有SqlSugar为基础的Winform系统中集成HTTP客户端调用Web API。采用.NET的`HttpClient`处理请求,支持异步操作。示例包括创建HTTP辅助类封装请求逻辑及在Winform界面调用API更新UI。此外,还讨论了跨域与安全性的处理策略。这种方法提高了系统的灵活性与扩展性,便于未来的技术演进。
259 2
|
5月前
|
前端开发 安全 数据库
Web架构&前后端分离站&Docker容器站&集成软件站&建站分配
Web架构&前后端分离站&Docker容器站&集成软件站&建站分配
204 1
|
1月前
|
Java BI API
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
这篇文章介绍了如何在Spring Boot项目中整合iTextPDF库来导出PDF文件,包括写入大文本和HTML代码,并分析了几种常用的Java PDF导出工具。
462 0
spring boot 整合 itextpdf 导出 PDF,写入大文本,写入HTML代码,分析当下导出PDF的几个工具
|
1月前
|
存储 缓存 安全
如何使用 PHP 将天气跟踪集成到 Web 应用程序中
如何使用 PHP 将天气跟踪集成到 Web 应用程序中
32 0
|
3月前
|
机器学习/深度学习 存储 前端开发
实战揭秘:如何借助TensorFlow.js的强大力量,轻松将高效能的机器学习模型无缝集成到Web浏览器中,从而打造智能化的前端应用并优化用户体验
【8月更文挑战第31天】将机器学习模型集成到Web应用中,可让用户在浏览器内体验智能化功能。TensorFlow.js作为在客户端浏览器中运行的库,提供了强大支持。本文通过问答形式详细介绍如何使用TensorFlow.js将机器学习模型带入Web浏览器,并通过具体示例代码展示最佳实践。首先,需在HTML文件中引入TensorFlow.js库;接着,可通过加载预训练模型如MobileNet实现图像分类;然后,编写代码处理图像识别并显示结果;此外,还介绍了如何训练自定义模型及优化模型性能的方法,包括模型量化、剪枝和压缩等。
53 1
|
3月前
|
存储 消息中间件 前端开发
Web2py框架下的神秘力量:如何轻松集成第三方API,让你的应用不再孤单!
【8月更文挑战第31天】在开发现代Web应用时,常需集成第三方服务如支付网关、数据存储等。本文将指导你使用Web2py框架无缝接入第三方API。通过实例演示从注册获取API密钥、创建控制器、发送HTTP请求到处理响应的全过程。利用`requests`库与Web2py的内置功能,轻松实现API交互。文章详细介绍了如何编写RESTful控制器,处理API请求及响应,确保数据安全传输。通过本教程,你将学会如何高效整合第三方服务,拓展应用功能。欢迎留言交流心得与建议。
50 1
|
2月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
63 0
|
3月前
|
jenkins 持续交付 开发工具
"引爆效率革命!Docker+Jenkins+GIT+Tomcat:解锁持续集成魔法,一键部署Java Web应用的梦幻之旅!"
【8月更文挑战第9天】随着软件开发复杂度的增加,自动化变得至关重要。本文通过实例展示如何结合Docker、Jenkins、Git与Tomcat建立高效的持续集成(CI)流程。Docker确保应用环境一致性;Jenkins自动化处理构建、测试和部署;Git管理源代码版本;Tomcat部署Web应用。在Jenkins中配置Git插件并设置项目,集成Docker构建Tomcat应用镜像并运行容器。此外,通过自动化测试、代码质量检查、环境隔离和日志监控确保CI流程顺畅,从而显著提高开发效率和软件质量。
78 3
|
3月前
|
API C# 开发框架
WPF与Web服务集成大揭秘:手把手教你调用RESTful API,客户端与服务器端优劣对比全解析!
【8月更文挑战第31天】在现代软件开发中,WPF 和 Web 服务各具特色。WPF 以其出色的界面展示能力受到欢迎,而 Web 服务则凭借跨平台和易维护性在互联网应用中占有一席之地。本文探讨了 WPF 如何通过 HttpClient 类调用 RESTful API,并展示了基于 ASP.NET Core 的 Web 服务如何实现同样的功能。通过对比分析,揭示了两者各自的优缺点:WPF 客户端直接处理数据,减轻服务器负担,但需处理网络异常;Web 服务则能利用服务器端功能如缓存和权限验证,但可能增加服务器负载。希望本文能帮助开发者根据具体需求选择合适的技术方案。
167 0
|
3月前
|
Java 数据库连接 数据库
强强联手!JSF 与 Hibernate 打造高效数据访问层,让你的应用如虎添翼,性能飙升!
【8月更文挑战第31天】本文通过具体示例详细介绍了如何在 JavaServer Faces (JSF) 应用程序中集成 Hibernate,实现数据访问层的最佳实践。首先,创建一个 JSF 项目并在 Eclipse 中配置支持 JSF 的服务器版本。接着,添加 JSF 和 Hibernate 依赖,并配置数据库连接池和 Hibernate 配置文件。然后,定义实体类 `User` 和 DAO 类 `UserDAO` 处理数据库操作。
61 0
下一篇
无影云桌面