使用JasperReports导出PDF报表

使用JasperReports导出PDF报表

原理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cUmTGTzx-1597717458320)(C:\Users\gwx\AppData\Roaming\Typora\typora-user-images\image-20200817184055310.png)]

模板设计器Jaspersoft Studio

下载地址:https://community.jaspersoft.com/community-download

image-20200818091759525

创建工程和模板文件,首先需要创建一个工程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0waH8q86-1597717458323)(C:\Users\gwx\AppData\Roaming\Typora\typora-user-images\image-20200818092031785.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AznBbuLg-1597717458326)(C:\Users\gwx\AppData\Roaming\Typora\typora-user-images\image-20200818092045824.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sBzoftUD-1597717458330)(C:\Users\gwx\AppData\Roaming\Typora\typora-user-images\image-20200818092112722.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g1UtNo9s-1597717458335)(C:\Users\gwx\AppData\Roaming\Typora\typora-user-images\image-20200818092208572.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fo9lbKB7-1597717458338)(C:\Users\gwx\AppData\Roaming\Typora\typora-user-images\image-20200818092219745.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-351zdwnO-1597717458340)(C:\Users\gwx\AppData\Roaming\Typora\typora-user-images\image-20200818092237256.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5XeNknxO-1597717458343)(C:\Users\gwx\AppData\Roaming\Typora\typora-user-images\image-20200818092258868.png)]

创建处理的模板文件后缀为jrxml

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bPR4LCfQ-1597717458347)(C:\Users\gwx\AppData\Roaming\Typora\typora-user-images\image-20200818092330190.png)]

其实我们上面创建的demo1.jrxml模板文件,本质上就是一个xml文件,只不过我们不需要自己编写

xml文件的内容,而是通过Jaspersoft Studio这个设计器软件进行可视化设计即可。

jdbc数据源数据填充

第一步:在Repository Explorer面板中,在Data Adapters点击右键,创建一个数据适配器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zrtOS4ar-1597717458350)(C:\Users\gwx\AppData\Roaming\Typora\typora-user-images\image-20200818092621638.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aPLd8S3O-1597717458353)(C:\Users\gwx\AppData\Roaming\Typora\typora-user-images\image-20200818092639913.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-o3kdLza8-1597717458355)(C:\Users\gwx\AppData\Roaming\Typora\typora-user-images\image-20200818092649848.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NaZQQzF4-1597717458358)(C:\Users\gwx\AppData\Roaming\Typora\typora-user-images\image-20200818092700700.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tQpDE8ZP-1597717458360)(C:\Users\gwx\AppData\Roaming\Typora\typora-user-images\image-20200818092714226.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6dgM5FcO-1597717458363)(C:\Users\gwx\AppData\Roaming\Typora\typora-user-images\image-20200818092723655.png)]

第六步:在弹出对话框中Language选择sql,在右侧区域输入SQL语句并点击Read Fields按钮

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uSryUlJZ-1597717458364)(C:\Users\gwx\AppData\Roaming\Typora\typora-user-images\image-20200818092741912.png)]

第七步:在Outline视图中的Fields下可以看到t_setmeal表中相关字段信息,拖动某个字段到设计区的

Detail区域并调整位置,可以看到,在拖动Fields到设计区时,同时会产生两个元素,一个是静态文本,一个是动态元素。静态

文本相当于表格的表头,可以根据需要修改文本内容。最终设计完的效果如下:

JasperReports导出pdf报表,开发流程如下:

  1. 制作报表模板

使用模板设计器Jaspersoft Studio来进行模板设计,Jaspersoft Studio是一个图形化的报表设计工具,可以非常方便的设计出PDF报表模板文件(其实就是一个xml文件),再结合JasperReports使用,就可以渲染出PDF文件。

  1. 模板编译

  2. 构造数据

  3. 填充数据

  4. 输出文件

导包

<dependency>
	<groupId>net.sf.jasperreports</groupId> 					<artifactId>jasperreports</artifactId> 
	<version>6.8.0</version>
</dependency>
<dependency>
	<groupId>junit</groupId> 
	<artifactId>junit</artifactId>
	<version>4.12</version>
</dependency>

代码,javaBean数据源datasource

//定义模板文件jrxml在项目中的位置
String jrxmlPath = request.getSession().getServletContext().getRealPath("template"+File.separator+"health_business3.jrxml");
//定义模板(jrxml)编译后的jasper文件的地址
String jasperPath = request.getSession().getServletContext().getRealPath("template"+File.separator+"health_business3.jasper");
//模板编译
JasperCompileManager.compileReportToFile(jrxmlPath,jasperPath);
//构造数据,一个Map,一个List
Map<String, Object> result = reportService.getBusinessReportData();
List<Map> list = (List<Map>) result.get("hotSetmeal");
//填充数据
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperPath, result, new JRBeanCollectionDataSource(list));
//为相应头加上对应的文件下载属性
ServletOutputStream outputStream = response.getOutputStream();
response.setContentType("application/pdf");
response.setHeader("content-Disposition", "attachment;filename=report.pdf");
//将jasper在内存中生成的PDF文件放在响应流中
JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);
return null;
nt;filename=report.pdf");
//将jasper在内存中生成的PDF文件放在响应流中
JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);
return null;
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页