JasperReports入门教程(一):快速入门
JasperReports入门教程(一):快速入门
背景
现在公司的项目需要实现一个可以配置的报表,以便快速的适应客户的需求变化。后来在网上查资料发现可以使用JasperReports + Jaspersoft Studio工具来实现可配置的报表。在使用过程中也积累了一些经验,就想分享出来给大家,作为一个入门的指引,让大家可以更快速的上手。下面大家跟着我一起来实现第一个JasperReports的报表应用。
JasperReports基本介绍
JasperReports是一个非常强大,易用的开源报表引擎,它是用Java编写的。它可以通过各种各样的数据源来生成像素级的文档,这些文档都可以查看,打印以及导出(文档格式包括HTML、PDF、Excel、Word等等)。下面我们先尝试通过一个简单的demo进行上手。
Jaspersoft Studio
Jaspersoft Studio是一个设计报表模板的工具,我们通过它来设计需要使用报表的模板。
1.下载Jaspersoft Studio工具,选择下载Jaspersoft Studio CE 下载地址

2.安装Jaspersoft Studio,安装过程略过,默认安装即可
3.开始我们的第一个报表模板
3.1.打开Jaspersoft Studio工具,点击File->New->Project先创建一个项目

然后填写项目名字为demo,创建一个名叫demo的项目

3.2.点击File->New->Jasper Report(也可以直接在demo项目上右键New->Jasper Report),选择一个竖向A4纸大小的模板

Data Adapter可以选择 One Empty Record 选项,即空数据源,完成后就创建好了第一个模板

4.模板设计界面的区域说明如下。中间的模板设计区域分别多个band,这些band都可以右键删除
- Title:标题区,如果数据有多页只会在第一页打印
- Page Header:页头区,多页的情况下每页都会打印
- Column Header:列头区,配合下面的Detail区打印列表数据,多页的情况下每页都会打印
- Detail:可以新增多个Detail区,可以组合打印出多个列表数据,多页的情况下每页都会打印
- Column Footer:列表底部区,多页的情况下每页都会打印
- Page Footer:页底部区,多页的情况下每页都会打印
- Summary:合计区,只会在最后一页打印

5.添加报表元素
5.1.先从右侧Basic Elements区域拖拽一个Static Text元素到Title区,可以任意调整元素的大小和位置,双击可以修改元素要显示的内容,
选中元素后,可以在右侧设置元素的边框,字体和大小,文本的对齐方式等等。

5.2.在左侧Outline区域Paramters上右键Create Paramter创建一个新的属性,命名为name,类型java.lang.String

5.3.拖拽name属性到Page Header区域,同样可以在右侧设置它的属性

5.4.在左侧Outline区域Fields上右键 Create Field创建两个字段Field1,Field2,类型java.lang.String

5.5.然后拖拽Field1,Field2字段到Detail1区域,会自动带出两个值为Field1,Field2的Static Text元素在Column Header区域,调整位置对齐

5.6.预览可以看看样式,因为此时我们未给Field1,Field2的数据集赋值,所以预览的为null

6.编译报表模板
6.1.在左侧的Project Explorer框文件Blank_A4.jrxml上右键Compile Report可以生成编译好的文件Blank_A4.jasper

7.在java中调用模板并输出到pdf/html
上面我们在设计器中设计好了报表的模板,下面我们需要在java中通过代码把数据填充到模板中,并展示出来。
7.1.首先需要在maven中引用jasperreports的jar包依赖
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.9.0</version>
</dependency>
7.2.然后把6.1步骤中编译好的文件Blank_A4.jasper放入资源文件中
7.3.然后调用代码把数据填充到模板中,为了方便后续使用,我把JasperReport常用的方法封装到了JasperReportUtil类中
@GetMapping("/jasper")
public void getReport(@RequestParam("type") String reportType, HttpServletResponse response)
throws Exception {
HashMap<String, Object> parameters = new HashMap<String, Object>();
parameters.put("name", "xiao ming");
List<HashMap> list = new ArrayList<>();
for (int i = 0; i < 100; i++) {
HashMap<String, String> item = new HashMap<String, String>();
item.put("Field1", "Field1-" + i);
item.put("Field2", "Field2-" + i);
list.add(item);
}
String jasperPath = JasperReportUtil.getJasperFileDir("chapter1");
if (reportType.equals("pdf")) {
JasperReportUtil.exportToPdf(jasperPath, parameters, list, response);
} else if (reportType.equals("html")) {
JasperReportUtil.exportToHtml(jasperPath, parameters, list, response);
}
}
7.4.把项目运行起来,在浏览器中访问 http://localhost:8080/test/jasper?type=html 或者 http://localhost:8080/test/jasper?type=pdf 就可以在浏览器中看到html或者pdf格式的报表了


JasperReports入门教程(一):快速入门的更多相关文章
- 前端组件化Polymer入门教程(3)——快速入门
本系列主要翻译官方的教程,因为国内目前这方面的资料太少了,但也不一定和官网的一样,反正就是自己想到哪就写到哪. 如果我没有说明,默认情况下index.html始终包含这段代码,后面将不会再贴上来. & ...
- Spring_MVC_教程_快速入门_深入分析
Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门 资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf Spring ...
- Spring Boot 2.x基础教程:快速入门
简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot ...
- Quartz教程:快速入门
原文链接 | 译文链接 | 翻译:nkcoder | 校对:方腾飞 本系列教程由quartz-2.2.x官方文档翻译.整理而来,希望给同样对quartz感兴趣的朋友一些参考和帮助,有任何不当或错误之处 ...
- EFK教程 - EFK快速入门指南
通过部署elasticsearch(三节点)+filebeat+kibana快速入门EFK,并搭建起可用的demo环境测试效果 作者:"发颠的小狼",欢迎转载与投稿 目录 ▪ 用途 ...
- Nginx 极简教程(快速入门)
作者:dunwu github.com/dunwu/nginx-tutorial 推荐阅读(点击即可跳转阅读) 1. SpringBoot内容聚合 2. 面试题内容聚合 3. 设计模式内容聚合 4. ...
- MyBatis入门学习教程-MyBatis快速入门
一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
- [转]ASP.NET MVC 5 学习教程:快速入门
本教程将使用Visual Studio 2013手把手教你构建一个入门的ASP.NET MVC5 Web应用程序.本教程配套的C#源码工程可通过如下网址下载:C#版本源码链接.同时,请查阅 Build ...
- 极简python教程:快速入门好方法
大家好,我是测试奇谭的作者风风. 其实很久之前,就有身边的同事或者网友让我分享一些关于python编程语言的快速教程,他们的痛点同大多数自学编程语言的人一样,遇到了这些问题: 网络上的信息太多,良莠不 ...
随机推荐
- springboot集成通用mapper详细配置
通常,我们利用mybatis写持久层方法.要么按照传统定义mapper方法,定义xml文件的方式,全部手写.要么需要通过mybatis-generator逆向工程插件生成大量的xxxExample文件 ...
- 关于swift使用CocoaPods倒入三方库的framework后父类倒入子类无法继承的问题
今天开发项目的时候遇到这么一个问题在使用cocoapods倒入了三方库后我在BaseController中倒入三方库,其余controller继承自basecontroller,然而在继承的子类中无法 ...
- Three.js 中的参数调试控制插件dat.GUI.JS - [Three.js] - [dat.GUI]
不论是处于特殊功能的需要,还是处于效果调试方便,我们可能都需要修改模型中的参数值.在Three.js中,谷歌提供了一个js库,即dat.GUI.js用于处理这种需求. 通过该库,我们就不需要通过手动修 ...
- ERROR:TypeError: Cannot read property 'upgrade' of undefined
- Appium自动化(1) - 环境准备详细教程
Appium需要用到的工具 链接:https://pan.baidu.com/s/1od9x-1l0ALGRT5T6QFDHWg 提取码:bnhq 安装Appium Pyhton client包 1. ...
- Shell:Day02.笔记
重定向和管道符:1.重定向 程序 = 指令 + 数据 命令 变量 在程序中,数据如何输入?有如何输出? 数据输入:键盘 -- 标准输入,但是并不是唯一输入方式: --std ...
- spring官方为什么放弃spring social项目及替代方案
spring social 1.6之后官方不在维护该项目, spring boot 2.x之后也不在提供spring social的 Autoconfiguration. 原因: https://sp ...
- go 锁和sync包
一.什么是锁? sync.Mutex 是一个互斥锁,它的作用是守护在临界区入口来确保同一时间只能有一个线程进入临界区 在 sync 包中还有一个 RWMutex 锁:他能通过 RLock() 来允许同 ...
- Java第六天,API中常用的类,StringBuffer、StringBuilder、包装类、System类的使用
System (1)这个类中有很多可以获取系统信息的类. public class SystemLearn { public static void main(String[] args) { lon ...
- 切片-list、字符串
切片-list.字符串 1.字符串,切片顾头不顾尾 s="123455" print(s[0:3]) 结果:123 2.list d=[12,34,45] print(d[: ...