文章目录
一、报表概述
在企业级应用开发中,报表生成、报表打印下载是其重要的一个环节。除了
Excel
报表之外,
目前世面上比较流行的制作PDF
报表的工具如下:
名称 | 介绍 |
---|---|
iText PDF | iText是著名的开放项目,是用于生成PDF文档的一个java类库。通过iText不仅可以生成PDF或rtf的文档,而且可以将XML、Html文件转化为PDF文件。 |
Openoffice | openoffice是开源软件且能在windows和linux平台下运行,可以灵活的将word或者Excel转化为PDF文档。 |
Jasper Report | 是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF |
二、JasperReport
2.1 框架介绍
JasperReport
是一个强大、灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF
,HTML
,或者XML
格式。该库完全由Java
写成,可以用于在各种Java
应用程序,包括J2EE
,Web
应用程序中生成动态内容。只需要将JasperReport
引入工程中即可完成PDF
报表的编译、显示、输出等工作。
在开源的JAVA
报表工具中,JASPER Report
发展是比较好的,比一些商业的报表引擎做得还好,如支持了十字交叉报表、统计报表、图形报表,支持多种报表格式的输出,如PDF
、RTF
、XML
、CSV
、XHTML
、TEXT
、DOCX
以OpenOffice
。
数据源支持更多,常用 JDBC SQL
查询、XML
文件、CSV
文件 、HQL(Hibernate查询)
,HBase
,JAVA
集合等。还允许你义自己的数据源,通过JASPER
文件及数据源,JASPER
就能生成最终用户想要的文档格式。
2.2 相关文件介绍
- JRXML:报表填充模板,本质是一个
XML
.JasperReport
已经封装了一个dtd
,只要按照规定的格式写这个xml
文件,那么jasperReport
就可以将其解析最终生成报表,但是jasperReport
所解析的不是我们常见的.xml
文件,而是.jrxml
文件,其实跟xml是一样的,只是后缀不一样。 - Jasper:由
JRXML
模板编译生成的二进制文件,用于代码填充数据。解析完成后JasperReport
就开始编译.jrxml
文件,将其编译成.jasper
文件,因为JasperReport
只可以对.jasper
文件进行填充数据和转换,这步操作就跟我们java
中将java文件编译成class
文件是一样的 - Jrprint:当用数据填充完
Jasper
后生成的文件,用于输出报表。这一步才是JasperReport
的核心所在,它会根据你在xml
里面写好的查询语句来查询指定是数据库,也可以控制在后台编写查询语句,参数,数据库。在报表填充完后,会再生成一个.jrprint
格式的文件(读取jasper
文件进行填充,然后生成一个jrprint
文件) - Exporter:决定要输出的报表为何种格式,报表输出的管理类。
2.3 开发流程概述
三、模板工具Jaspersoft Studio
Jaspersoft Studio
是JasperReports
库和JasperReports
服务器的基于Eclipse
的报告设计器; 它可以作为Eclipse
插件或作为独立的应用程序使用。Jaspersoft Studio
允许您创建包含图表,图像,子报表,交叉表等的复杂布局。您可以通过JDBC
,TableModels
,JavaBeans
,XML
,Hibernate
,大数据(如Hive)
,CSV
,XML / A
以及自定义来源等各种来源访问数据,然后将报告发布为PDF
,RTF
,XML
,XLS
,CSV
,HTML
,XHTML
,文本,DOCX
或OpenOffice
。
Jaspersoft Studio
是一个可视化的报表设计工具,使用该软件可以方便地对报表进行可视化的设计,设计结果为格式.jrxml
的XML
文件,并且可以把.jrxml
文件编译成.jasper
格式文件方便JasperReport
报表引擎解析、显示。
3.1 Jaspersoft Studio 安装
STS
中Marketplace
搜索Jaspersoft Studio
安装即可。
3.2 面板介绍
左侧切换outline
视图,调整视图的位置
主面板介绍:
区域 | 简介 |
---|---|
Report editing area(主编辑区域) | 通过拖动,定位,对齐和通过 Designer palette(设计器调色板)对报表元素调整大小 |
Editor Area | Design tab: 当你打开一个报告文件,它允许您以图形方式创建报表选中 Source tab: 包含用于报表的 JRXML 源代码。 Preview tab: 允许在选择数据源和输出格式后,运行报表预览。 |
Repository Explorer view | 包含 JasperServer 生成的连接和可用的数据适配器列表 |
Outline view | 在大纲视图中显示了一个树的形式的方式报告的完整结构 |
Properties view | 控件属性设置 |
Design tab | 以图形方式创建报表中的控件 |
Report Editor Area介绍
区域 | 简介 |
---|---|
Title | 标题:只在整个报表的第一页的最上端显示。只在第一页显示,其他页面均不显示 |
Page Header | 页头:在整个报表中每一页都会显示。在第一页中,出现的位置在 Title Band的下面。在除了第一页的其他页面中Page Header 的内容均在页面的最上端显示。 |
Page Footer | 页脚: 在整个报表中每一页都会显示。显示在页面的最下端。一般用来显示页码。 |
Detail 1 | 详细 : 报表内容,每一页都会显示。 |
Column Header | 列头: Detail中打印的是一张表的话,这Column Header就是表中列的列头。 |
Column Footer | 列脚 :Detail中打印的是一张表的话,这Column Footer就是表中列的列脚。 |
Summary | 统计: 表格的合计段,出现在整个报表的最后一页中,在Detail 1 Band后面。主要是用来做报表的合计显示。 |
四、第一个 JasperReport 案例
① 引入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.13.RELEASE</version>
<relativePath />
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Jasper所需jar -->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.5.0</version>
</dependency>
<dependency>
<groupId>org.olap4j</groupId>
<artifactId>olap4j</artifactId>
<version>1.2.0</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
<!-- 根据情况添加数据库驱动 -->
</dependencies>
② 引入配置文件
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521/oracle
spring.datasource.username=scott
spring.datasource.password=1234
③ 模板制作
- 创建
jasper
文件:File
->New
->Jasper Report
- 删除不需要的
band
,添加两个Static Text
到Column Header
,命名为ID
和用户名
,用户名
这个Static Text
需设置为中文字体,否则无法显示,最后设置Border
- 点击
Compile Repot
生成Jasper
文件
- 创建测试
controller
/**
* JasperReport的简单使用
*/
@RequestMapping("/test1")
public void createHtml(HttpServletResponse response, HttpServletRequest request) throws Exception {
Resource resource = new ClassPathResource("templates/demo.jasper");
FileInputStream is = new FileInputStream(resource.getFile());
ServletOutputStream os = response.getOutputStream();
try {
/**
* 创建JasperPrint对象
* 数据填充
* is:inputstream params:参数填充 DataSource:数据源填充
*/
JasperPrint jasperPrint = JasperFillManager.fillReport(is, new HashMap<>(), new JREmptyDataSource());
// 写入pdf数据
JasperExportManager.exportReportToPdfStream(jasperPrint, os);
} finally {
os.flush();
os.close();
}
}
- 访问
http://localhost:8080/test1
,效果: