配置Jaspersoft studio工具(报告生成工具)开发PDF
设置JasperReport导出PDF
JasperReport生命周期:
在JasperReports中生成PDF报告需要三个阶段,称为JasperReport生命周期。 这些阶段如下。
设计(Design )阶段、模板定义(在工具Jaspersoft studio中定义模板) ) ) ) )。
执行阶段,模板数据(填充) )。
输出阶段,展示。 把模板和数据一起展示
JasperReport执行流程:
java集成jasper模板文件
jasper的PDF模板由Jaspersoft studio工具生成,但需要注意。
1 .记住保存模板(ctrl s )
2 .修改模板字体和idea支持的字体,以便可以显示中文
要将配置导入idea项目的资源目录中,请将文件导入到D:Astudy软件语言Javajava的项目 13.saax-expources-export
步骤
1 .在工具中生成并编译PDF模板,并将编译的. jsaper文件复制到idea项目中
2 .编写代码,实现数据填充
注:有三种输入数据的方法
方式一、参数映射填充
//*
演示地图参数的输入
* @param id
* @throws Exception
*/
@requestmapping(/exportpdf ) )。
publicvoidexportpdf(stringid ) throws Exception {
//1 .读取模板文件(.jasper )
inputstream inputstream=session.getservletcontext ().getresourceasstream ('/jasper/test 02 _ map.jasper ' );
//2 .用数据填充模板
//*
*参数1 :需要输入的模板文件输入流程
*参数2 :地图参数
*参数Jasper数据源
*/
进行//map参数的嵌入
HashMap map=new HashMap (;
//模板的参数名称和Map的密钥一致
map.put('username ','小苍');
map.put(email,) xc@itcast.cn );
map.put('companyname ','字节行驶');
map.put (深度,“视频组”);
jasperprintprint=jasperfillmanager.fill report (inputstream,map,new JREmptyDataSource () );
//3 .导出pdf文件
//*
*参数1 :封装了模板数据的JasperPrint对象
*参数2 :输出位置,response.getOutputStream ()//输出显示在页面上
*/
jasperexportmanager.exportreporttopdfstream (print,response.getOutputStream );
}
方法2、输入JDBC数据源
@Autowired
私有数据源数据源;
//*
演示输入JDBC数据源参数
* @param id
* @throws Exception
*/
@requestmapping(/exportpdf ) )。
publicvoidexportpdf(stringid ) throws Exception {
//1 .读取模板文件(.jasper )
inputstream inputstream=session.getservletcontext ().getresourceasstream ('/jasper/test 03 _ JDBC.jasper ' );
//2 .用数据填充模板
jasperprintprint=jasperfillmanager.fill report (inputstream,new HashMap ),dataSource.getConnection );
>//3.导出PDF文件/**
* 参数一:封装好模板好数据的JasperPrint对象
* 参数二:输出的位置
*/
JasperExportManager.exportReportToPdfStream(print,response.getOutputStream());
}
方式三,JavaBean数据源填充
/**
* 演示List集合(JavaBean)数据源导出
* @param id
* @throws Exception
*/
@RequestMapping("/exportPdf")
public void exportPdf(String id) throws Exception {
//1.读取模板文件(.jasper)
InputStream inputStream = session.getServletContext().getResourceAsStream("/jasper/test04_list.jasper");
//2.把数据填充到模板
List list = new ArrayList();
//注意: 必须遵守的规则:List的JavaBean的每个属性名称 和 模板的Filed名称 一致
for(int i=0;i<10;i++){
User user = new User();
user.setUserName("小苍"+i);
user.setEmail("xc+"+i+"@itcast.cn");
user.setCompanyName("字节跑动");
user.setDeptName("视频组"+i);
list.add(user);
}
//从而得到数据源
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(list);
JasperPrint print = JasperFillManager.fillReport(inputStream, new HashMap<>() ,dataSource);
//3.导出PDF文件
/**
* 参数一:封装好模板好数据的JasperPrint对象
* 参数二:输出的位置
*/
JasperExportManager.exportReportToPdfStream(print,response.getOutputStream());
}
Map 参数填充一般用在非表格(table)数据填充(关键是:只有一条数据)
数据源 参数填充一般用在表格(table)数据填充(关键是:n行数据)
数据源 填充数据分为:JDBC数据源填充数据(数据库连接)、JavaBean填充数据(list集合
对于JDBC数据源,是在做PDF模板的时候就链接了数据库获取数据,再在代码里通过数据源创建连接对象从而填充
对于JaveBean数据源(又称为List集合填充),只是在PDF模板中填充空的数据,真正的数据还是在代码中填充
其实在java代码中无非就是三步
1.读取模板文件(.jasper) InputStream inputStream = session.getServletContext().getResourceAsStream(“/jasper/test04_list.jasper(webapp下面的文件地址)”);
2.把数据填充到模板
JasperPrint print = JasperFillManager.fillReport (inputStream, Map集合 , dataSource数据源);
填充就是在用数据源还是map集合的不同而分出的3中方法
如果是用了map集合,那数据源就得为空,JasperPrint print = JasperFillManager.fillReport (inputStream, Map集合 , new JREmptyDataSource());
如果用了数据源,那map集合就得为空,JasperPrint print = JasperFillManager.fillReport (inputStream, new HashMap<>() , 数据源);
在区分,①用JDBC数据源,那就是JasperPrint print = JasperFillManager.fillReport(inputStream, new HashMap<>() ,dataSource.getConnection());
记得在外面写上 @Autowired
private DataSource dataSource;
②用JavaBean数据源,那就是
//从而得到数据源
JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(list);
JasperPrint print = JasperFillManager.fillReport (inputStream, new HashMap<>() , dataSource);
3.pdf文件的显示或导出
①在浏览器显示
/** * 参数一:封装好模板好数据的JasperPrint对象 * 参数二:输出的位置 */
JasperExportManager.exportReportToPdfStream( print, response.getOutputStream());
②下载
* 参数:封装好模板好数据的JasperPrint对象
* 参数二:输出的位置
//设置下载框响应头
response.setHeader(“Content-Disposition”,”attachment;filename=export.pdf”); /参数一是响应头,参数而,是附件和下载后的文件名
JasperExportManager.exportReportToPdfStream( print, response.getOutputStream()); //这一步同上