java jaspersoft,Jaspersoft studio工具(报表生成工具)之 设置PDF 的开发

Jaspersoft studio工具(报表生成工具)之 设置PDF 的开发

JasperReport 导出 PDF 的设置

JasperReport生命周期(重点):

通过JasperReports生成PDF报表一共要经过三个阶段,我们称之为 JasperReport的生命周期,这三个阶段为:

设计(Design)阶段、定义模板(用工具 Jaspersoft studio来定义模板)

执行(Execution)阶段,模板 + 数据(填充)

输出(Export)阶段,展示。 将模板和数据一起展示

JasperReport执行流程(重点):

20200711092012-5f09844ca9968.png

java整合jasper模板文件

jasper的PDF模板由Jaspersoft studio工具生成,但是得注意:

1.记得保存(ctrl+s)模板

2.修改模板字体和idea中支持的字体要吻合,这样才能显示中文

20200711092015-5f09844f9be3e.png

在idea中项目的resources目录下要导入配置,文件在:D:\Astudy\软件语言\Java\java就\项目一\13.saax-export_day13\03.资料和工具\03 中文字体

20200711092017-5f098451c2f30.png

步骤

1.在工具里面生成PDF模板并且编译,把编译后的.jsaper文件拷贝进idea项目中

2.编写代码,实现数据填充

注意:数据填充 由三种方式

方式一,参数map填充

/**

* 演示Map参数填充

* @param id

* @throws Exception

*/

@RequestMapping("/exportPdf")

public void exportPdf(String id) throws Exception {

//1.读取模板文件(.jasper)

InputStream inputStream = session.getServletContext().getResourceAsStream("/jasper/test02_map.jasper");

//2.把数据填充到模板

/**

* 参数一:需要填充的模板文件输入流

* 参数二:Map参数

* 参数三:Jasper的数据源

*/

//进行Map参数填充

HashMap map = new HashMap<>();

//模板的参数名称和Map的key一致的

map.put("userName","小苍");

map.put("email","xc@itcast.cn");

map.put("companyName","字节跑动");

map.put("deptName","视频组");

JasperPrint print = JasperFillManager.fillReport(inputStream, map , new JREmptyDataSource());

//3.导出PDF文件

/**

* 参数一:封装好模板数据的JasperPrint对象

* 参数二:输出的位置,response.getOutputStream() //输出在页面显示

*/

JasperExportManager.exportReportToPdfStream(print,response.getOutputStream());

}

方式二,JDBC数据源填充

@Autowired

private DataSource dataSource;

/**

* 演示JDBC数据源参数填充

* @param id

* @throws Exception

*/

@RequestMapping("/exportPdf")

public void exportPdf(String id) throws Exception {

//1.读取模板文件(.jasper)

InputStream inputStream = session.getServletContext().getResourceAsStream("/jasper/test03_jdbc.jasper");

//2.把数据填充到模板

JasperPrint print = JasperFillManager.fillReport(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());  //这一步同上