一、前言
在工作中,尤其是传统企业中,面不了会用到报表(包含图表,子报表,交叉表等的复杂布局)展示数据。学习JasperReport,是因为经历了GRID++报表开发的痛苦(尤其是IE兼容性问题极其严重)、不顺手。
二、eclipse集成
TIBCO Jaspersoft Studio是JasperReports库和JasperReports服务器的基于Eclipse的报表设计器;虽然,它挺好的;只是,开发人员已经习惯了现有电脑的eclipse(或idea),为了开发效率,它可以作为Eclipse插件使用(主要原因是我喜欢eclipse DevStyle主题 ^_^)。
eclipse > Help > Eclipse Marketplace
三、主界面和报表设计视图
学习参考:https://blog.csdn.net/deniro_li/article/details/73610105
- 编辑器
页签 | 说明 |
Design | 可视化的报表设计区域。 |
Source | 报表对应的 JRXML 源代码。 |
Preview | 预览报表设计的效果。 |
- 辅助视图
视图 | 说明 |
Repository Explorer | 维护报表的数据来源。 |
Project Explorer | 维护项目目录(当前的 workspace 下)。 |
Outline | 本张报表的结构,在预览模式下,为空。 |
Properties | 查看或者编辑某个报表元素的属性,可以打开多个元素的属性视图。 |
Problems | 展示问题或者错误。 |
Report state summary | 报表执行控制台、错误日志、统计信息。 |
- Design
我们一般在 Design 页签中设计报表。报表分为几个不同的水平分割部分,它们都被叫做栏(Band),可以把这些报表元素放在这些栏中。每一个栏根据它们的特性,可能会被重复多次。比如 页头(page header)在每一页都会被重复一次,而 detail band 中的内容,在每一条记录中都会被重复一次。
因为布局是可视化的,所以几乎可以忽略它们底层的源代码(JRXML)。
Design 页签预先定义了 9 个栏。一个栏的宽度与页面的宽度相同(不包括左右外边距)。一般来说,栏 的高度会自动适配实际内容,但有的栏是固定的,比如 Column footer、page footer 以及最后一页的 last page footer 的栏。
下面是栏的类型:
Band 名称 | 说明 |
Title | 标题。它只会出现一次,可以被打印在一个独立的页中做封面(这种情况下,这个栏的高度不会被计算到所有栏的总高度中)。 |
Page Header | 页头。它会出现在所有的被打印的页面中(如果 Tile 和 Summary 被打印在独立页中的话,那么就不会打印页头)。 |
Column Header | 每一页的数据顶部栏。一般放数据表中的列名。 |
Group Header | 分组的顶部栏。可选或者可以有多个。一般与 Group footer 配合使用。可以设置它的最小高度,但如果它的实际高度超过了这个最小值,那么它就会被打印到新页上,这一点一定要注意! |
Group Footer | 分组的底部栏。 |
Column Footer | 每一页的数据底部栏。 |
Page Footer | 页尾。 |
Last Page Footer | 最后一页的页尾。可以通过它设计一个与其他页的页尾与众不同的效果。如果它的高度被设置为 0,那么它将被完全忽略。 |
Summary | 摘要栏。一般放置汇总的统计数据。 |
Background | 背景。可以在这里加水印。它可以被设置的最大高度是页面的高度。 |
Detail | 显示数据,如:Fields变量 |
- JasperReport列出以下可选的尺寸格式:
页面格式 | 尺寸(像素) | 页面格式 | 尺寸(像素) |
Letter | 612x792 | B0 | 2836x4008 |
Note | 540x720 | B1 | 2004x2836 |
Legal | 612x1008 | B2 | 1418x2004 |
A0 | 2380x3368 | B3 | 1002x1418 |
A1 | 1684x3368 | B4 | 709x1002 |
A2 | 1190x1684 | B5 | 501x709 |
A3 | 842x1190 | ARCH_E | 2592x3456 |
A4 | 595x842 | ARCH_D | 1728x2593 |
A5 | 421x595 | ARCH_C | 1296x1728 |
A6 | 297x421 | ARCH_B | 864x1296 |
A7 | 210x297 | ARCH_A | 648x864 |
A8 | 148x210 | FLSA | 612x936 |
A9 | 105X148 | FLSE | 612x936 |
A10 | 74X105 | HALFLETTER | 396x612 |
11X17 | 792x1224 | LEDGER | 1224x792 |
四、报表元素
学习参考:https://blog.csdn.net/deniro_li/article/details/77850188
- 基础元素
五、spring boot 集成
采用 spring-boot 1.5.14.RELEASE
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.5.13</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.9.0</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-fonts</artifactId>
<version>6.9.0</version>
</dependency>
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-functions</artifactId>
<version>6.9.0</version>
</dependency>
六、解决中文显示
网上有替换字体的、有更换 jar 包的,一一使用都不完美。后来发现了此文章(感谢他):http://www.itclj.com/blog/5a0b079d81c06e4103ef5129 ,使用之后真不错!终于,解决了中文显示的难题。
jasperreport 源码
我使用的是:华文宋体;fonts.xml
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
<fontFamily name="华文宋体">
<normal>fonts/STSONG.TTF</normal>
<bold>fonts/STSONG.TTF</bold>
<italic>fonts/STSONG.TTF</italic>
<boldItalic>fonts/STSONG.TTF</boldItalic>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
<exportFonts>
<export key="net.sf.jasperreports.html">'华文宋体', Arial, Helvetica, sans-serif</export>
<export key="net.sf.jasperreports.xhtml">'华文宋体', Arial, Helvetica, sans-serif</export>
</exportFonts>
</fontFamily>
</fontFamilies>
jasperreports_extension.properties
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.lobstertwo=fonts/fonts.xml
STSONG.TTF 字体下载,可以去 WIN10 控制面板 COPY。
预览效果:
七、参考文献
- http://www.itclj.com/blog/5a0b079d81c06e4103ef5129
- https://blog.csdn.net/SHIYUN123zw/column/info/31009
- https://community.jaspersoft.com/documentation/tibco-jaspersoft-studio-user-guide/v750/getting-started-jaspersoft-studio
- http://www.bubuko.com/infodetail-2492974.html
八、下期预告
- map填充报表;javaBean填充报表
- 展示分组报表