快速学习JasperReport-父子报表

4 父子报表

4.1 概述

复杂报表或数据内容较多的时候,可以使用子报表解决。

4.2 制作父报表

首先制作父报表,就是调用子报表的一个基础报表。主报表的作用有如下两种:

  1. 父报表中需要显示数据,使用子报表弥补studio设计的不足
  2. 父报表不需要显示任何数据,只是作为子报表的载体。适用于复杂报表的设计

4.3 制作子报表

点击组件面板上的“Subreport”按钮,拖动到报表工作区上。
快速学习JasperReport-父子报表_第1张图片
系统会自动弹出子报表选择窗口。可以选择创建一个新报表,还是使用一个已有的报表作为子报表。
快速学习JasperReport-父子报表_第2张图片
选择“Create a new report”,可以立即制作新的子报表;如果选择“Select an existing report”,则可以调用已经有的报表作为子报表;如果选择“Just create the subreport element”,系统会生成一个子报表区,可以在之后挂接需要的子报表。

4.4 参数传递

快速学习JasperReport-父子报表_第3张图片

 	//测试父子模板
    @GetMapping("/testJasper07")
    public void createPdf(HttpServletRequest request, HttpServletResponse response) 
throws Exception {
        //1.引入jasper文件
        Resource resource = new ClassPathResource("templates/main.jasper");
        FileInputStream fis = new FileInputStream(resource.getFile());
        //2.创建JasperPrint,向jasper文件中填充数据
        ServletOutputStream os = response.getOutputStream();
        try {
            HashMap parameters = new HashMap();
            Resource subResource = new ClassPathResource("templates/sub-group.jasper");
            parameters.put("subpath",subResource.getFile().getPath());
            parameters.put("sublist",getUserList());
            parameters.put("sublist",getUserList());
            JRBeanCollectionDataSource ds = new
JRBeanCollectionDataSource(getUserList());
            JasperPrint print = JasperFillManager.fillReport(fis, parameters,new
JREmptyDataSource());
            //3.将JasperPrint已PDF的形式输出
            JasperExportManager.exportReportToPdfStream(print,os);
            response.setContentType("application/pdf");
       } catch (JRException e) {
            e.printStackTrace();
       }finally {
            os.flush();
       }
   }
    //创建数据库Connection
    public List<User> getUserList() throws Exception {
        List<User> list = new ArrayList<>();
        for(int i=1;i<=3;i++) {
            User user = new User("it00"+i, "itcast"+i, "1380000000"+i, "传智播客", "讲 师");
            list.add(user);
       }
        for(int i=1;i<=3;i++) {
            User user = new User("hm00"+i, "itheima"+i, "1880000000"+i, "黑马程序员", "讲 师");
            list.add(user);
       }
        return list;
   }

你可能感兴趣的:(快速学习)