前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速学习JasperReport-数据填充

快速学习JasperReport-数据填充

作者头像
cwl_java
发布2020-02-11 13:28:28
2.2K0
发布2020-02-11 13:28:28
举报
文章被收录于专栏:cwl_Javacwl_Java

1 数据填充

我们介绍了如何使用JasperReport来生成简单的文本报表,正式企业开发中动态数据展示也是报表中最重要的一环,接下来我们共同研究的就是填充动态数据到PDF报表中。

代码语言:javascript
复制
/**
* 填充数据构造JasperPrint
* is: 文件输入流
* parameters:参数
* dataSource:数据源
*/
public static JasperPrint fillReport(InputStream is, Map<String, Object> parameters, JRDataSource dataSource) throws JRException {

通过这段填充数据的源代码得知,JasperReport对报表模板中的数据填充有很多中方式,最典型的有以下两种:

  1. Parameters(参数)填充
  2. DataSource(数据源)填充

1.1 参数Map填充数据

Parameters通常是用来在打印的时候从程序里传值到报表里。也就是说parameters通常的是起参数传递的作用。他们可以被用在一些特定的场合(比如应用中SQL 查询的条件),如report中任何一个需要从外部传入的变量等(如一个Image对象所包括的char或报表title的字符串)。parameters也需要在创建的时候定义它的数据类型。parameters的数据类型是标准的java的Object。

1.1.1 模板制作

(1) 创建新模板,删除不需要的Band

在这里插入图片描述
在这里插入图片描述

(2)创建Parameter 在outline面板中找到Parameters,右键 -> Create Parameter,新建一个Parameter(生成一个Paramerter1)

在这里插入图片描述
在这里插入图片描述

右键 Paramete1 -> Show Properties. 设置Name为title、Class为java.lang.String.这里要注意名字要认真取不能重复,因为传入的参数的key就是这个参数名,以此来进行一一对应

在这里插入图片描述
在这里插入图片描述

(3)模板参数设置 将设置好的参数直接拖入表格中对应的位置,并设置好大小与对齐方式。

在这里插入图片描述
在这里插入图片描述

1.1.2 PDF输出

代码语言:javascript
复制
@GetMapping("/testJasper02")
    public void createPdf(HttpServletRequest request, HttpServletResponse response) 
throws IOException {
        //1.引入jasper文件
        Resource resource = new ClassPathResource("templates/parametersTest.jasper");
        FileInputStream fis = new FileInputStream(resource.getFile());
        //2.创建JasperPrint,向jasper文件中填充数据
        ServletOutputStream os = response.getOutputStream();
        try {
            /**
             * parameters集合中传递的key需要和设计模板中使用的name一致
             */
            HashMap parameters = new HashMap();
            parameters.put("title","用户详情");
            parameters.put("username","李四");
            parameters.put("companyName","传智播客");
            parameters.put("mobile","120");
            parameters.put("departmentName","讲师");
            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();
       }
   }

1.2 数据源填充数据

1.2.1 JDBC数据源

1.2.1.1 配置数据连接

使用JDBC数据源填充数据:使用Jaspersoft Studio 先要配置一个数据库连接

填写数据源的类型,选择“Database JDBC Connection”

在这里插入图片描述
在这里插入图片描述

配置数据库信息

在这里插入图片描述
在这里插入图片描述

这一步,需要: (1)给创建的这个数据连接起个名字; (2)根据数据库选择驱动类型; Jaspersoft Studio 已经

内置了很多常用数据库的驱动,使用的时候直接选就可以了。当然,如果这还满足不了你的话,你还可以添加你指定的 JDBC 驱动 jar 包。

1.2.1.2 模板制作

(1)制作空白模板 创建空白模板,并将不需要的Band

(2)将数据库用户字段配置到模块中 为了方便的进行模板制作,可以将需要数据库表中的字段添加到Studio中。在outline中右键模板,选择data set and query

在这里插入图片描述
在这里插入图片描述

用户可以在 SQL 查询语句输入窗口中,输入需要查询数据的查询语句,点击右上角的“Read Fields”按钮,界面下方的字段列表中,就会显示此查询语句中所涵盖的所有字段的列表。在后面的报表设计中,我们就可以直接使用这些字段了。

在这里插入图片描述
在这里插入图片描述

在“Fields”列表中,只保留报表中使用的字段,其他用不到的字段最好用“Delete”删掉,防止由于数据表变化,导致报表模板中的字段设置与数据表对应不上,导致报表报错。输入完毕后,点击“OK”按钮,系统即会把查询语句保存在报表模板中。

在这里插入图片描述
在这里插入图片描述

(3)填充Filed 将id,mobile,username等拖入到 Detail Band中设计模板如下:

在这里插入图片描述
在这里插入图片描述
1.2.1.3 PDF输出
代码语言:javascript
复制
//测试JDBC连接数据源
    @GetMapping("/testJasper03")
    public void createPdf(HttpServletRequest request, HttpServletResponse response) 
throws Exception {
        //1.引入jasper文件
        Resource resource = new ClassPathResource("templates/testConn.jasper");
        FileInputStream fis = new FileInputStream(resource.getFile());
        //2.创建JasperPrint,向jasper文件中填充数据
        ServletOutputStream os = response.getOutputStream();
        try {
            /**
             * 1.jasper文件流
             * 2.参数列表
             * 3.数据库连接
             */
            HashMap parameters = new HashMap();
            JasperPrint print = JasperFillManager.fillReport(fis, parameters,getConnection());
            //3.将JasperPrint已PDF的形式输出
            JasperExportManager.exportReportToPdfStream(print,os);
            response.setContentType("application/pdf");
       } catch (JRException e) {
            e.printStackTrace();
       }finally {
            os.flush();
       }
   }
    //创建数据库Connection
    public Connection getConnection() throws Exception {
        String url = "jdbc:mysql://localhost/ihrm";
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection(url, "root", "111111");
        return conn;
   }

1.2.2 JavaBean数据源

1.2.2.1 创建Filed

(1)创建Filed

在这里插入图片描述
在这里插入图片描述

(2)构造模板

在这里插入图片描述
在这里插入图片描述
1.2.2.2 PDF输出

(1)配置实体类

代码语言:javascript
复制
public class User {
    private String id;
    private String username;
    private String mobile;
    private String companyName;
    private String departmentName;
    public User(String id, String username, String mobile, String companyName, String
departmentName) {
        this.id = id;
        this.username = username;
        this.mobile = mobile;
        this.companyName = companyName;
        this.departmentName = departmentName;
   }
    public String getId() {
        return id;
   }
    public void setId(String id) {
        this.id = id;
   }
    public String getUsername() {
        return username;
   }
   public void setUsername(String username) {
        this.username = username;
   }
    public String getMobile() {
        return mobile;
   }
    public void setMobile(String mobile) {
        this.mobile = mobile;
   }
    public String getCompanyName() {
        return companyName;
   }
    public void setCompanyName(String companyName) {
        this.companyName = companyName;
   }
    public String getDepartmentName() {
        return departmentName;
   }
    public void setDepartmentName(String departmentName) {
        this.departmentName = departmentName;
   }
}

(2)使用javaBean数据源

代码语言:javascript
复制
//测试javaBean数据源
    @GetMapping("/testJasper04")
    public void createPdf(HttpServletRequest request, HttpServletResponse response) 
throws Exception {
        //1.引入jasper文件
        Resource resource = new ClassPathResource("templates/testJavaBean.jasper");
        FileInputStream fis = new FileInputStream(resource.getFile());
        //2.创建JasperPrint,向jasper文件中填充数据
        ServletOutputStream os = response.getOutputStream();
        try {
            HashMap parameters = new HashMap();
            //构造javaBean数据源
            JRBeanCollectionDataSource ds = new
JRBeanCollectionDataSource(getUserList());
            /**
             * 1.jasper文件流
             * 2.参数列表
             * 3.JRBeanCollectionDataSource
             */
            JasperPrint print = JasperFillManager.fillReport(fis, parameters,ds);
            //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<=5;i++) {
            User user = new User(i+"", "testName"+i, "10"+i, "企业"+i, "部门"+i);
            list.add(user);
       }
        return list;
   }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 数据填充
    • 1.1 参数Map填充数据
      • 1.1.1 模板制作
      • 1.1.2 PDF输出
    • 1.2 数据源填充数据
      • 1.2.1 JDBC数据源
      • 1.2.2 JavaBean数据源
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档