JasperReport介绍
JasperReport是一个非常强大,易用的开源报表引擎,用Java语言编写。可以导出各种格式的文档,如HTML,PDF,Execel,Word等)
一、安装Jaspersoft Sutdio
Jaspersoft Sutdio是一个设计报表的模板工具
下载Jaspersoft Sutdio CE 下载地址
二、使用Saspersoft Studio创建模板
1、创建工程New->Project
选择JasperReports Project
命名为ReportFirst
2、创建模板
New-> Jasper Report->
选择Blank A4,点击Next
命名为template1.jrxml
Data Adapter选择One Empty Record,即空数据源。
3、模板设计界面的区域说明
Title: 标题区,如果数据有多页只会在第一页打印
Page Header: 页头区,多页的情况下每页都会打印
Column Header:列头区,配合下面的Detail区打印列表数据,多页的情况下每页都会打印
Detail:可以新增多个Detail区,可以组合打印出多个列表数据,多页的情况下每页都会打印
Column Footer:列表底部区,多页的情况下每页都会打印
Page Footer:页底部区,多页的情况下每页都会打印
Summary:合计区,只会在最后一页打印
4、添加元素
1) 在右侧Basic Elements区域拖拽一个Static Text, 文字为: This is title head。
2) 在左侧Outline区域Parameters上右键-> Creat Parameter.
命名为name, Class为java.lang.String
3)拖拽那么属性到Page Header
4) 在左侧Outline区域Fields右键创建两个字段 name,age
然后将name和age拖拽到Detail区域。
选择预览,name输入zhangsan,效果如下图所示
5、编译模板
生成了template1.jasper文件
三、在Java中使用模板
1)引入依赖
<dependency> <groupId>net.sf.jasperreports</groupId> <artifactId>jasperreports</artifactId> <version>6.12.1</version> </dependency>
2) 把template1.jasper放入资源文件夹中
3) 编写生成pdf代码
@GetMapping("/testJasper") public void createPdf(HttpServletRequest request, HttpServletResponse response) throws Exception { HashMap<String,Object> params = new HashMap<>(); params.put("name","title name"); List<HashMap> list = new ArrayList<>(); for(int i = 0; i < 20; i++){ HashMap<String,String> item = new HashMap<>(2); item.put("name","zhangsan-" + i); item.put("age",String.valueOf(i + 10)); list.add(item); } String templatePath = "templates/template1.jasper"; JasperReportUtil.exportToPdf(templatePath,params,list, response); }
exportToPdf方法:
public static void exportToPdf(String jasperPath, Map parameters, List<?> list, HttpServletResponse response) throws Exception { OutputStream outputStream = response.getOutputStream(); try { ClassPathResource resource = new ClassPathResource(jasperPath); response.setContentType(getContentType(ReportType.PDF)); InputStream jasperStream = resource.getInputStream(); JasperPrint jasperPrint = getJasperPrint(jasperStream, parameters, list); JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream); } catch (Exception e) { //log.error("读取报表异常", e); outputStream.write("读取报表异常".getBytes()); } finally { outputStream.flush(); outputStream.close(); } }
http://127.0.0.1:8080/testJasper
效果如下图所示:
参考: JasperReports入门教程