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入门教程(一):快速入门的更多相关文章

  1. 前端组件化Polymer入门教程(3)——快速入门

    本系列主要翻译官方的教程,因为国内目前这方面的资料太少了,但也不一定和官网的一样,反正就是自己想到哪就写到哪. 如果我没有说明,默认情况下index.html始终包含这段代码,后面将不会再贴上来. & ...

  2. Spring_MVC_教程_快速入门_深入分析

    Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门  资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf Spring ...

  3. Spring Boot 2.x基础教程:快速入门

    简介 在您第1次接触和学习Spring框架的时候,是否因为其繁杂的配置而退却了?在你第n次使用Spring框架的时候,是否觉得一堆反复黏贴的配置有一些厌烦?那么您就不妨来试试使用Spring Boot ...

  4. Quartz教程:快速入门

    原文链接 | 译文链接 | 翻译:nkcoder | 校对:方腾飞 本系列教程由quartz-2.2.x官方文档翻译.整理而来,希望给同样对quartz感兴趣的朋友一些参考和帮助,有任何不当或错误之处 ...

  5. EFK教程 - EFK快速入门指南

    通过部署elasticsearch(三节点)+filebeat+kibana快速入门EFK,并搭建起可用的demo环境测试效果 作者:"发颠的小狼",欢迎转载与投稿 目录 ▪ 用途 ...

  6. Nginx 极简教程(快速入门)

    作者:dunwu github.com/dunwu/nginx-tutorial 推荐阅读(点击即可跳转阅读) 1. SpringBoot内容聚合 2. 面试题内容聚合 3. 设计模式内容聚合 4.  ...

  7. MyBatis入门学习教程-MyBatis快速入门

    一.Mybatis介绍 MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以 ...

  8. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  9. [转]ASP.NET MVC 5 学习教程:快速入门

    本教程将使用Visual Studio 2013手把手教你构建一个入门的ASP.NET MVC5 Web应用程序.本教程配套的C#源码工程可通过如下网址下载:C#版本源码链接.同时,请查阅 Build ...

  10. 极简python教程:快速入门好方法

    大家好,我是测试奇谭的作者风风. 其实很久之前,就有身边的同事或者网友让我分享一些关于python编程语言的快速教程,他们的痛点同大多数自学编程语言的人一样,遇到了这些问题: 网络上的信息太多,良莠不 ...

随机推荐

  1. swagger2 接口文档

    1,maven: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www. ...

  2. Thread wait notify sleep

    wait: 必须暂定当前正在执行的线程,并释放资源锁,让其他线程可以有机会运行 notify/notifyall: 唤醒因锁池中的线程,使之运行 wait与sleep区别 对于sleep()方法,我们 ...

  3. 《 OO第一作业周期(前四周)总结 》

    作为一名软件工程的大学生,很高兴能够以这样一种方式,实现对博客编写零的突破.专业课老师也介绍了编写博客给我们带来的帮助,听了以后,我感觉到了培养出写博客的习惯,是一件多么有意义的事! 话不多说,让我们 ...

  4. 使用 Visual Studio 开发、测试和部署 Azure Functions(一)开发

    1,什么是Azure functions Azure Functions 是 Microsoft Azure 提供的完全托管的 PaaS 服务,用于实现无服务器体系结构. Azure Function ...

  5. ANTLR随笔(一)

    学习背景 最近做项目需要开发一个类似Graphql的简单版的自定义查询功能. 功能主要是通过前端自定义的复查询条件来控制后端的查询字段以及最终返回的JSON格式. 最初准备直接使用Graphql实现但 ...

  6. Debug 是门艺术

    最近想结合发生在身边码农身上的一些小故事,尝试表达一个观点“Coding 是门技术,Debug 是门艺术”. 上期的分享<Coding 是门技术>主要通过引入身边 Code farmer ...

  7. SaaS架构(一) 弱后端强前端的尝试和问题

    最近在公司项目组内部沙龙的时候,提出一个"弱后端强前端"的概念,其实已经在项目内部新的服务有做试点,我们整个SaaS系统,后端主要是JAVA构建,前端是Angular构建.&quo ...

  8. 在操作Git Bash时出现的问题

    参考博客:https://blog.csdn.net/weixin_44394753/article/details/91410463 1.问题1 $ git remote add origin gi ...

  9. 是什么是递归?-[all]-[编程理论]

    递归是所有编程语言中,都会讨论到的一个问题. Content Of Table 递归的通俗认识 编程领域的抽象 一个最简单的示例 一点总结 栈溢出问题 本示例的一点拓展说明 ### 递归的通俗认识 编 ...

  10. 使用appium框架测试安卓app时,获取toast弹框文字时,前一步千万不要加time.sleep等等待时间。

    使用appium框架测试安卓app时,如果需要获取toast弹框的文案内容,那么再点击弹框按钮之前,一定记得千万不要加time.sleep()等待时间,否则有延迟,一直获取不到: 获取弹框的代码: m ...