文章目录

  • 一、数据填充
    • 1.1 参数 Map 填充数据
    • 1.2 数据源填充数据
      • 1.2.1 JDBC数据源
      • 1.2.2 JavaBean数据源
  • 二、分组报表
  • 三、chart 图表
  • 四、父子报表

一、数据填充


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

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

1.1 参数 Map 填充数据

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

模板制作:

创建新模板,删除不需要的Band。在outline面板中找到Parameters,右键 -> Create Parameter,新建一个名为titleParameter,并在properties面板中设置类型为java.lang.String。将设置好的参数直接拖入表格中对应的位置,并设置好大小、字体等。制作好的模板图如下:

代码:

 /*** 元素填充*/
@RequestMapping("/test2")public void paramsTest(HttpServletResponse response, HttpServletRequest request) throws Exception {// 引入jasper文件,由jrxml模板编译生成的二进制文件,用于代码填充数据Resource resource = new ClassPathResource("templates/paramsTest.jasper");FileInputStream is = new FileInputStream(resource.getFile());ServletOutputStream os = response.getOutputStream();try {// 创建JasperPrint对象/*** parameters集合中传递的key需要和设计模板中使用的name一致*/Map<String, Object> params = new HashMap<>();params.put("title", "用户详情");JasperPrint jasperPrint = JasperFillManager.fillReport(is, params, new JREmptyDataSource());// 写入pdf数据JasperExportManager.exportReportToPdfStream(jasperPrint, os);} finally {os.flush();os.close();}}

测试:

1.2 数据源填充数据

1.2.1 JDBC数据源

模板制作:

切换到Repository面板,创建新的Jdbc数据连接:

Outline视图选中文件名后Create DataSet

配置DataSet,右侧面板中填写对应的sql语句,在下方可以进行对字段的删减:

配置完毕后可以看到字段在Fields栏已经可以看到:

移动field至设计图中,jrxml设计图如下:

代码:

/*** 数据源填充*/@RequestMapping("/test3")public void createHtml3(HttpServletResponse response, HttpServletRequest request) throws Exception {// 引入jasper文件,由jrxml模板编译生成的二进制文件,用于代码填充数据Resource resource = new ClassPathResource("templates/databaseTest.jasper");FileInputStream is = new FileInputStream(resource.getFile());ServletOutputStream os = response.getOutputStream();try {// 创建JasperPrint对象JasperPrint jasperPrint = JasperFillManager.fillReport(is, new HashMap<>(), getConnection());// 写入pdf数据JasperExportManager.exportReportToPdfStream(jasperPrint, os);} finally {os.flush();os.close();}}

测试:

1.2.2 JavaBean数据源

右键创建field,创建完之后,需要在properties设置field的类型:


移动field至设计图中,jrxml设计图如下:

代码:

/*** javaBean填充*/
@RequestMapping("/test4")
public void createHtml4(HttpServletResponse response, HttpServletRequest request) throws Exception {// 引入jasper文件,由jrxml模板编译生成的二进制文件,用于代码填充数据Resource resource = new ClassPathResource("templates/javabean.jasper");FileInputStream is = new FileInputStream(resource.getFile());ServletOutputStream os = response.getOutputStream();try {// 创建JasperPrint对象// 构建javabean数据源JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(getDeptList());JasperPrint jasperPrint = JasperFillManager.fillReport(is, new HashMap<>(), ds);// 写入pdf数据JasperExportManager.exportReportToPdfStream(jasperPrint, os);response.setContentType(MediaType.APPLICATION_PDF_VALUE);} finally {os.flush();os.close();}
}

测试:

二、分组报表

有两种情况会使用分组报表:

  1. 美观和好看的显示
  2. 当数据分为两层表时,经常需要批量打印子表的数据。打印时,常常需要按照父表的外键或关联值进行自动

分组,即每一条父表记录所属的子表记录打印到一组报表中,每组报表都单独计数及计算页数。在应用中,可以通过选择需要打印的父表记录,将父表记录的 ID 传入,由报表自动进行分组。

①新建报表群组:

②将需要根据分组的field:location拖入到group header
③添加计算分组内计数变量:Create Variable->variable的属性如下:

④使用内置的变量:PAGE_NUMBER计算当前页
模板完成后效果:

代码:

@GetMapping("/test5")public void createPdf(HttpServletRequest request, HttpServletResponse response)
throws Exception {Resource resource = new ClassPathResource("templates/group.jasper");FileInputStream fis = new FileInputStream(resource.getFile());ServletOutputStream os = response.getOutputStream();try {//构造数据源JRBeanCollectionDataSource ds = new
JRBeanCollectionDataSource(getUserList());JasperPrint print = JasperFillManager.fillReport(fis,new HashMap(),ds);//输出JasperExportManager.exportReportToPdfStream(print,os);response.setContentType(MediaType.APPLICATION_PDF_VALUE);} catch (JRException e) {e.printStackTrace();}finally {os.flush();}
}

测试效果:

三、chart 图表

  1. 创建报表,并创建变量field:companycount
  2. 拖入chart图表至detail中,并对chart进行设置:
  3. 代码和前面类似,略

效果:

四、父子报表

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

① 制作父报表

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

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

② 拖动Subreport模块到父报表中,如果是使用已存在的模板作为子报表,需要选中的是jasper文件而不是jrxml文件,设置子报表的属性如下:

③ 最终模板设计如下:

④ 代码:

/*** 父子报表测试*/
@RequestMapping("/test7")
public void createHtml7(HttpServletResponse response, HttpServletRequest request) throws Exception {Resource resource = new ClassPathResource("templates/father.jasper");FileInputStream is = new FileInputStream(resource.getFile());ServletOutputStream os = response.getOutputStream();try {Map<String, Object> parameters = new HashMap<>();Resource subResource = new ClassPathResource("templates/son.jasper");parameters.put("subpath", subResource.getFile().getPath());parameters.put("sublist", getUserList());JasperPrint jasperPrint = JasperFillManager.fillReport(is, parameters, new JREmptyDataSource());// 写入pdf数据JasperExportManager.exportReportToPdfStream(jasperPrint, os);} finally {os.flush();os.close();}
}

测试效果:

JasperReport:数据填充和多种类别报表相关推荐

  1. pdf数据填充,JaspersoftStudio,JasperReport

    pdf数据填充 填充动态数据到PDF报表中 /** *填充数据构造JasperPrint *is: 文件输入流 *parameters:参数 *dataSource:数据源 */ public sta ...

  2. 多种主流报表功能分析对比

    多种主流报表功能分析对比 经过这段时间对现行开发中主流报表的分析.综合评定,以下选择了五种主流web报表进行对比: 五种主流web报表:a) ireportb) finereportc) 水晶报表d) ...

  3. 记录java使用POI实现word模板数据填充

    一.前言 最近项目遇到个需求,在模板中填充数据,刚开始是用smartBi报表进行填充,输出参数都是必录,无法满足需求.在网上查了很多资料,有些需要把文档转成xml格式修改里面内容,IDEA里面修改要替 ...

  4. 巧用Excel 2010数据透视表制作销售报表

    小刘需要根据2010-2011两年间的订单记录创建季度报表,以便分析各类图书的销售情况.面对如此庞大的订单记录,该从何下手呢? 其实最快捷的办法是使用Excel 2010创建数据透视表,以快速合并和比 ...

  5. R语言ggplot2可视化:使用pracma包的interp1函数对缺失值进行线性插值后进行可视化分析、用虚线标记进行数据填充的区域

    R语言ggplot2可视化:使用pracma包的interp1函数对缺失值进行线性插值后进行可视化分析.用虚线标记进行数据填充的区域 目录

  6. pandas使用pct_change函数计算数据列的百分比变化:计算当前元素和前一个元素之间的百分比变化(包含NaN值的情况以及数据填充方法)

    pandas使用pct_change函数计算当前元素和前一个元素之间的百分比变化:默认情况下pct_change函数计算与紧邻前一行相比的百分比变化.计算当前元素和前一个元素之间的百分比变化(包含Na ...

  7. C# - list数据填充到Dataset里

    C# - list<>数据填充到Dataset里 publicstatic DataSet ConvertToDataSet<T>(IList<T> list) { ...

  8. laravel的工厂模式数据填充:

    数据表post中的字段结构. database\factory\UserFactory.php $factory->define(App\Post::class,function (Faker ...

  9. Laravel 实践之路: 数据库迁移与数据填充

    数据库迁移实际上就是对数据库库表的结构变化做版本控制,之前对数据库库表结构做修改的方式比较原始,比如说对某张库表新增了一个字段,都是直接在库表中执行alter table xxx add .. 的方式 ...

  10. .net dataGridView当鼠标经过时当前行背景色变色;然后【给GridView增加单击行事件,并获取单击行的数据填充到页面中的控件中】...

    1.首先在前台dataGridview属性中增加onRowDataBound属性事件 2.然后在后台Observing_RowDataBound事件中增加代码 protected void Obser ...

最新文章

  1. 纯JS实现省市县三级下拉联动
  2. 面试官:Spring事务的传播行为有几种?
  3. Linux DNS服务配置与管理详解
  4. 国内数十位NLP大佬合作,综述预训练模型的过去、现在与未来
  5. 针对【H-2017年信息基础班(周一班)】某些同学恶意使用lyl洛谷的谴责
  6. 解决ImportError: cannot import name ‘imread‘ from ‘scipy.misc‘
  7. 0-1语言建模当中会遇到的问题
  8. LeetCode MySQL 608. 树节点
  9. 解决IDEA每次打开新的maven项目都需要重新配置maven home的问题
  10. [python] linspace():获取等间隔数组
  11. 明解c语言练习答案,《明解C语言》练习题4-2的实现
  12. php 触屏手写,MyTouch易维触摸屏手写输入法
  13. 解决Page index must not be less than zero问题
  14. 启动MyEclipse时报错,An error has occurred see the log file 出现此类错误提示
  15. 水面渲染-浮力的一种实现
  16. 微生物16S测序数据的正确打开方式
  17. 五百年春光明媚之重建亚历山大图书馆谭
  18. 2022年度全球职场女性境况排名:瑞典最好,韩国连续十年垫底 | 美通社头条
  19. 将下列计算机中文翻译成英文,急...将计算机类英文翻译成中文
  20. Oracle 数据库安装规范--database所在路径和归档目录所在路径必须分开

热门文章

  1. [多媒体] 10大开源视频剪辑软件
  2. vs2019配置glfw、glad等环境
  3. 全自动IC半导体MCU芯片烧录flash大批量生产出货的解决方案分析
  4. win10重置网络命令_WIN10重置网络的操作方法
  5. java表格边框问题_Java 设置Word表格边框
  6. Python学习第2天:入门必备(基础篇)
  7. 当tomcat启动遇到(你的项目名字) is required and cannot be removed from the server(不能部署到server上)
  8. 100个精彩的开源游戏
  9. 关于IRR的一些总结
  10. HashData:守护数据安全 筑牢数字经济底座