分享

<h3 style="color: rgb(0, 0, 0); font-family: 'ms song', 'Microsoft Yahei', SimHei, Verdana, Helvetic

 覡先生藏书馆 2015-10-07
您的评价:
     
 收藏该经验    

Spring3 Web MVC 集成JasperReport生成PDF例子

一:环境搭建与配置

1.      安装JDK6以上版本

2.      安装STS, 下载地址如下:http://www./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.      最终的项目目录结构如下:

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

二:Spring配置详解

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

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

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

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

三:Jasper Report配置详解

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

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

四:Report内容与数据源

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

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

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

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

五:Controller与注解

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

Controller代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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;
    }
}</string,object></string,object>
Mock数据工厂代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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;
    }
 
}</articlescategory></articlescategory>
启动运行在浏览器中访问地址为:http://localhost:8080/express/hello.html

六:Deploy与运行

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

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

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

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

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

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

Spring3 Web MVC 集成Jasper Report生成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命令。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多