说说如何使用 Jaspersoft Studio 设计你的第一张报表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了说说如何使用 Jaspersoft Studio 设计你的第一张报表相关的知识,希望对你有一定的参考价值。

参考技术A

1、选择报表模板

File -> New -> Jasper Report ,打开报表模板选择框:

Jaspersoft Studio 内置了一些报表模板供我们选择,也可以自定义我们自己的报表模板哦O(∩_∩)O~

这里我们选择 Coffee template ,然后点击 Next。

2、命名新的报表文件,并指定放置的路径:

点击 Next。

3、选择数据源:

在 Data Adapter 中,已经预安装了一些数据源:

这里我们选择 Sample DB - Database JDBC Connection,然后在右侧的框中,输入 SQL 语句:

点击 Next。

4、选择展示字段:

这里会执行刚才写的 SQL 语句,并把得到的所有字段都列在左侧列表中供选择,这里选择需要在报表中展示的字段(可双击选择或者使用中间的按钮):

选好后,点击 Next,会跳到【分组字段选择】,这个特性暂且不表,以后会说到,所以这里直接点 Next,最后点击 Finish。

至此,我们的第一张报表所需要的字段就添加成功咯:

Outline 中 点击【项目名称】-》Properties 中 点击 Edit query, filter and sort options:

在打开的数据源与查询对话框中,点击右上的 Read Fields ,读取更多的字段:

注意: 也可以在这里修改 SQL 语句来得到新的字段,但如果报表中已有的字段在新的字段集中不存在,那么必须手动把这些旧字段删除!

点击 OK 后,就配置好了新的字段集,它们会在 Outline 的 Fields 中列出来,以供使用:

在设计模式中,点击要删除的字段,按 Delete 就可以直接删除咯 O(∩_∩)O~

点击 preview 页签,就可以看到效果啦:

注意: 子报表与父报表是分别保存各自的文件中,所以如果在包含子报表的父报表中,进行修改、保存操作,是不会影响到子报表的!如果要一次性保存父子报表,可以在 Projects -> 勾选 Build Automatically。

File -> New -> Project,在 Wizards 中键入 “Jasper”(过滤出相关的内容):

选择 JasperReports Project,然后在接下来的对话框中输入项目名称,点击 Finish,项目文件夹就创建好咯。

在主界面左侧的 Project Explorer 中,就可以看到刚才我们新增的项目文件夹咯:

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

                                      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软件语言Javajava就项目一13.saax-export_day133.资料和工具3 中文字体

技术图片

 

 

 步骤

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 设计你的第一张报表的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Jaspersoft Studio 与 UCanAccess 一起使用?

PDF报表Jasperreports+jaspersoft studio快速入门

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

Jaspersoft Studio(报表设计器)中文乱码问题的解决方法

jaspersoft studio6.x 设计医院超声检查报告单

谁会用Jaspersoft Studio