首页 > 编程语言 >快速学习JasperReport-数据填充

快速学习JasperReport-数据填充

时间:2022-09-20 14:24:08浏览次数:74  
标签:String parameters 数据源 学习 JasperReport 填充 public 模板

1 数据填充

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

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

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

Parameters(参数)填充
DataSource(数据源)填充

1.1 参数Map填充数据

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

1.1.1 模板制作

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

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

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

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

1.1.2 PDF输出

@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”

image

配置数据库信息
image

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

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

1.2.1.2 模板制作

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

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

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

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

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

1.2.1.3 PDF输出
//测试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
image

(2)构造模板
image

1.2.2.2 PDF输出

(1)配置实体类

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数据源

//测试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;
 }

标签:String,parameters,数据源,学习,JasperReport,填充,public,模板
From: https://www.cnblogs.com/leepandar/p/16710858.html

相关文章

  • 机器学习——聚类(K-Means)
    机器学习——聚类(K-Means)那是什么无监督学习——聚类聚类是基于相似对象将一组对象分组为类/类别的过程。聚类是一部分无监督学习.这种方法通常用于确定业务决策,特......
  • python机器学习(第一章 Python机器学习基础)
    第一章Python机器学习基础基础:Python官网:https://www.python.org/doc/;历史版本下载与维护信息:https://www.python.org/downloads/Anaconda官网:https://www.anacond......
  • 学习 Linux 并没有你想象的那么难。
    学习Linux并没有你想象的那么难。PhotobyGabrielHeinzeronUnsplash我离开Windows并切换到Linux作为我的主要操作系统已经1年了。一个充满问题的更改,并且担......
  • 网络芯片CH395Q学习开发-补充-和电脑网线直连程序配置方式
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/LearnCH395Q"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 说明......
  • typora学习笔记
    markdown学习二级标题三级标题几级标题就是几个#+空格+标题内容字体hello,world!两边+俩*是粗体hello,world!两边+一*是斜体hello,world!......
  • 软件项目管理学习笔记2 项目范围管理
    项目范围管理(projectscopemanagement)1.什么是项目范围管理范围(scope)是指开发项目产品所涉及的所有工作和用来开展工作的所有过程可交付成果(deliverable)是指作......
  • 学习1
    目前对于未来的工作没有明确的目标。但我对于unity3d的游戏开发比较感兴趣,反正不知道学什么,索性学自己感兴趣的。不管未来能不能用于工作,只是为了让时间不那么无聊的度过。......
  • Vue面试题19:在实际开发过程中,你知道的Vue最佳实践有哪些?(总结自B站up主‘前端杨村长’
    思路:查看vue官方文档:风格指南(重点关注AB级)、最佳实践(生产部署、性能、访问、安全)回答范例从编码风格、性能、安全等方面说几条:1.编码风格方面:命名组件时使用“多词"......
  • 学习-数组相关算法-两数之和
    obj[1]=111letobj={"5":222}console.log(obj[5])////222console.log(obj['5'])//222//console.log(obj.5)这样写会报错obj[1]=111console.log(JSO......
  • 学习vue3-先抄写文档
      当style标签带有scopedattribute的时候,它的css只会影响当前组件的元素。它的实现方式是通过PostCSS将当前组件添加属性,css选择器都添加对应属性选择器。子组......