码迷,mamicode.com
首页 > Web开发 > 详细

Jaspersoft studio工具(报表生成工具)之 设置PDF 的开发

时间:2020-07-11 12:52:16      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:attach   and   file   显示   design   info   src   Map集合   显示中文   

                                      JasperReport 导出 PDF 的设置


JasperReport生命周期(重点):

通过JasperReports生成PDF报表一共要经过三个阶段,我们称之为 JasperReport的生命周期,这三个阶段为:

设计(Design)阶段、定义模板    (用工具 Jaspersoft studio来定义模板)

执行(Execution)阶段,模板 + 数据(填充)  

输出(Export)阶段,展示。 将模板和数据一起展示

 


 

 

JasperReport执行流程(重点):

技术图片

 

 


 

 java整合jasper模板文件

jasper的PDF模板由Jaspersoft studio工具生成,但是得注意:

1.记得保存(ctrl+s)模板

2.修改模板字体和idea中支持的字体要吻合,这样才能显示中文

技术图片

在idea中项目的resources目录下要导入配置,文件在:D:\Astudy\软件语言\Java\java就\项目一\13.saax-export_day13\03.资料和工具\03 中文字体

技术图片

 

 

 步骤

1.在工具里面生成PDF模板并且编译,把编译后的.jsaper文件拷贝进idea项目中

2.编写代码,实现数据填充

注意:数据填充 由三种方式

方式一,参数map填充

/**
     * 演示Map参数填充
     * @param id
     * @throws Exception
     */
    @RequestMapping("/exportPdf")
    public void exportPdf(String id) throws Exception {
        //1.读取模板文件(.jasper)
        InputStream inputStream = session.getServletContext().getResourceAsStream("/jasper/test02_map.jasper");

        //2.把数据填充到模板
        /**
         * 参数一:需要填充的模板文件输入流
         * 参数二:Map参数
         * 参数三:Jasper的数据源
         */
        //进行Map参数填充
        HashMap map = new HashMap<>();
        //模板的参数名称和Map的key一致的
        map.put("userName","小苍");
        map.put("email","xc@itcast.cn");
        map.put("companyName","字节跑动");
        map.put("deptName","视频组");

        JasperPrint print = JasperFillManager.fillReport(inputStream, map , new JREmptyDataSource());

        //3.导出PDF文件
        /**
         * 参数一:封装好模板数据的JasperPrint对象
         * 参数二:输出的位置,response.getOutputStream() //输出在页面显示
         */
        JasperExportManager.exportReportToPdfStream(print,response.getOutputStream());
    }

  

方式二,JDBC数据源填充

  @Autowired
    private DataSource dataSource;

    /**
     * 演示JDBC数据源参数填充
     * @param id
     * @throws Exception
     */
    @RequestMapping("/exportPdf")
    public void exportPdf(String id) throws Exception {
        //1.读取模板文件(.jasper)
        InputStream inputStream = session.getServletContext().getResourceAsStream("/jasper/test03_jdbc.jasper");

        //2.把数据填充到模板

        JasperPrint print = JasperFillManager.fillReport(inputStream, new HashMap<>() ,dataSource.getConnection());

        //3.导出PDF文件
        /**
         * 参数一:封装好模板好数据的JasperPrint对象
         * 参数二:输出的位置
         */
        JasperExportManager.exportReportToPdfStream(print,response.getOutputStream());
    }

  

 

 方式三,JavaBean数据源填充

/**
     * 演示List集合(JavaBean)数据源导出
     * @param id
     * @throws Exception
     */
    @RequestMapping("/exportPdf")
    public void exportPdf(String id) throws Exception {
        //1.读取模板文件(.jasper)
        InputStream inputStream = session.getServletContext().getResourceAsStream("/jasper/test04_list.jasper");

        //2.把数据填充到模板
        List list = new ArrayList();
        //注意: 必须遵守的规则:List的JavaBean的每个属性名称 和 模板的Filed名称 一致
        for(int i=0;i<10;i++){

            User user = new User();
            user.setUserName("小苍"+i);
            user.setEmail("xc+"+i+"@itcast.cn");
            user.setCompanyName("字节跑动");
            user.setDeptName("视频组"+i);

            list.add(user);
        }

		//从而得到数据源
        JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(list);

        JasperPrint print = JasperFillManager.fillReport(inputStream, new HashMap<>() ,dataSource);

        //3.导出PDF文件
        /**
         * 参数一:封装好模板好数据的JasperPrint对象
         * 参数二:输出的位置
         */
        JasperExportManager.exportReportToPdfStream(print,response.getOutputStream());
    }

  

 

 Map 参数填充一般用在非表格(table)数据填充(关键是:只有一条数据)

数据源 参数填充一般用在表格(table)数据填充(关键是:n行数据)

 数据源  填充数据分为:JDBC数据源填充数据(数据库连接)、JavaBean填充数据(list集合

 

对于JDBC数据源,是在做PDF模板的时候就链接了数据库获取数据,再在代码里通过数据源创建连接对象从而填充

对于JaveBean数据源(又称为List集合填充),只是在PDF模板中填充空的数据,真正的数据还是在代码中填充

 

 其实在java代码中无非就是三步

1.读取模板文件(.jasper)  InputStream inputStream = session.getServletContext().getResourceAsStream("/jasper/test04_list.jasper(webapp下面的文件地址)");

2.把数据填充到模板

   JasperPrint print = JasperFillManager.fillReport      (inputStream,         Map集合 ,            dataSource数据源);

  填充就是在用数据源还是map集合的不同而分出的3中方法

    如果是用了map集合,那数据源就得为空,JasperPrint print = JasperFillManager.fillReport      (inputStream,         Map集合 ,           new JREmptyDataSource());

 

    如果用了数据源,那map集合就得为空,JasperPrint print = JasperFillManager.fillReport      (inputStream,         new HashMap<>() ,        数据源);

      在区分,①用JDBC数据源,那就是JasperPrint print = JasperFillManager.fillReport(inputStream, new HashMap<>() ,dataSource.getConnection());

                记得在外面写上   @Autowired
                          private DataSource dataSource;

          ②用JavaBean数据源,那就是

              //从而得到数据源

              JRBeanCollectionDataSource    dataSource       = new JRBeanCollectionDataSource(list);

              JasperPrint print = JasperFillManager.fillReport   (inputStream,        new HashMap<>() ,           dataSource);

 

        

3.pdf文件的显示或导出

 ①在浏览器显示

/** * 参数一:封装好模板好数据的JasperPrint对象 * 参数二:输出的位置 */

JasperExportManager.exportReportToPdfStream(       print,             response.getOutputStream());

 

②下载

* 参数:封装好模板好数据的JasperPrint对象
* 参数二:输出的位置

//设置下载框响应头
response.setHeader("Content-Disposition","attachment;filename=export.pdf");  /参数一是响应头,参数而,是附件和下载后的文件名
JasperExportManager.exportReportToPdfStream(        print,         response.getOutputStream());  //这一步同上

 

Jaspersoft studio工具(报表生成工具)之 设置PDF 的开发

标签:attach   and   file   显示   design   info   src   Map集合   显示中文   

原文地址:https://www.cnblogs.com/lanto/p/13282994.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!