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
(2)创建Parameter
在outline面板中找到Parameters,右键 -> Create Parameter,新建一个Parameter(生成一个Paramerter1)
右键 Paramete1 -> Show Properties. 设置Name为title、Class为java.lang.String.这里要注意名字要认真取不能重复,因为传入的参数的key就是这个参数名,以此来进行一一对应
(3)模板参数设置
将设置好的参数直接拖入表格中对应的位置,并设置好大小与对齐方式。
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(