目录
2.在outline面板中找到Parameters,右键 -> Create Parameter,新建一个Parameter(生成一个Paramerter1)
4 .将设置好的参数拖至指定的位置(拖拽之后设置参数的字体)
1.创建模板(使用Create Field创建字段),将创建的字段拖至指定位置
上一篇文档讲完了Jasper的入门,开始来对Jasper进行数据的填充操作.
参数Map填充数据
1. 新建一个模板
2.在outline面板中找到Parameters,右键 -> Create Parameter,新建一个Parameter(生成一个Paramerter1)
3. 设置参数信息:
点击新创建的参数,在右侧找到下面设置框,设置参数的名称(小编设置的是username,company,mobile,dept).
4 .将设置好的参数拖至指定的位置(拖拽之后设置参数的字体)
5.保存新建好的模板,生成Jasper文件,
6. 编写java代码
package com.james;
import net.sf.jasperreports.engine.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
public class Demo {
public static void main(String[] args) throws Exception {
//Jasper的路径名
String filePath = "Jasper的路径名";
// 文件的输入流
InputStream inputStream = new FileInputStream(filePath);
//2.创建JasperPrint,向jasper文件中填充数据
FileOutputStream os = new FileOutputStream("d:\\demo2.pdf");
try {
Map parameters = new HashMap();
//设置参数 参数的key = 模板中使用的parameters参数的name
parameters.put("username", "张三");
parameters.put("mobile", "120");
parameters.put("dept", "讲师");
parameters.put("company", "传智播客");
//3.将JasperPrint已PDF的形式输出
JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream, parameters, new JREmptyDataSource());
//导出
JasperExportManager.exportReportToPdfStream(jasperPrint, os);
} catch (JRException e) {
e.printStackTrace();
} finally {
os.flush();
}
}
}
打印结果:
数据源填充数据
JDBC数据源
1. 配置数据连接
2. 配置数据库信息
(mysql连接:https://pan.baidu.com/s/1ekAD6cvmrWSCJiBGAPMGHg 提取码:mfbw )
3. 制作模板
(1)制作空白模板
创建空白模板,并将不需要的Band
(2)将数据库用户字段配置到模块中
为了方便的进行模板制作,可以将需要数据库表中的字段添加到Studio中。在outline中右键模板,选择datasetand query
用户可以在 SQL 查询语句输入窗口中,输入需要查询数据的查询语句,点击右上角的“ReadFields”按钮,界面下方的字段列表中,就会显示此查询语句中所涵盖的所有字段的列表。在后面的报表设计中,我们就可以直接使用这些字段了。
在“Fields”列表中,只保留报表中使用的字段,其他用不到的字段最好用“Delete”删掉,防止由于数据表变化,导致报表模板中的字段设置与数据表对应不上,导致报表报错。输入完毕后,点击“OK”按钮,系统即会把查询语句保存在报表模板中。
(3)填充Filed
将Field字段拖入到 Detail Band中设计模板如下:
Java代码:
package com.james;
import net.sf.jasperreports.engine.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;
import java.util.Map;
public class Demo {
public static void main(String[] args) throws Exception {
String filePath = "模板地址";
FileInputStream inputStream = new FileInputStream(filePath);
Map<String, Object> parameters = new HashMap<String, Object>(); //准备的数据 放到map中
try {
JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream, parameters, getConnection());
// 3、导出
JasperExportManager.exportReportToPdfStream(jasperPrint, new FileOutputStream("d://demo3.pdf"));
} catch (Exception e) {
e.printStackTrace();
}
}
//数据库连接
public static Connection getConnection() throws Exception {
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/saas-export-two", "root", "root");
return conn;
}
}
使用JavaBean数据源
1.创建模板(使用Create Field创建字段),将创建的字段拖至指定位置
2.配置实体类
public class User {
//PDF的Field名称和属性名称相同
private String id;
private String username;
private String company;
private String dept;
private String mobile;
public User(String id,String username,String company,String dept,String mobile) {
this.id = id;
this.username = username;
this.company = company;
this.dept = dept;
this.mobile = mobile;
}
setter...getter....
}
3.java代码:
/**
* 基于javaBean的形式填充数据
*/
public static void main(String[] args) throws Exception {
String filePath = "模板地址";
// 文件的输入流
InputStream inputStream = new FileInputStream(filePath);
//2.创建JasperPrint,向jasper文件中填充数据
FileOutputStream os = new FileOutputStream("d:\\demo4.pdf");
try {
Map parameters = new HashMap<>();
//构建javaBean的数据源
//1.获取到对象的list集合
List<User> userList = getUserList();
//2.通过list集合创建javaBean的数据源对象
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(userList);
JasperPrint print = JasperFillManager.fillReport(fis,parameters,ds);
JasperExportManager.exportReportToPdfStream(print,os);
} catch (JRException e) {
e.printStackTrace();
}finally {
os.flush();
}
}
public List<User> getUserList() {
List<User> list = new ArrayList<>();
for(int i=0;i<10;i++) {
User user = new User(i+"", "用户"+i, "老师","James", "1380000000"+i);
list.add(user);
}
return list;
}