ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# JasperResport 报表系统 ## JasperReport 基础概念: 1. jrxml文件: 该文件定义了一个报表的基础布局,布局预览如下: ![](https://img.kancloud.cn/9b/e3/9be3fc6a1d9fe7bceffe975931bc9d17_598x490.png) **报表标题区**:相当于整个报告的标题,在整个文档中只出现一次 **当前页头/脚**:相当于word中的页头页脚 **列头/脚**:表格中的列头和列脚 **汇总区**: 出现在整个文档的结尾,用于汇总合计 **Background**: 用于设置报表水印 **Detail区**: Japser 会遍历设置的数据源中的每条数据,显示相应字段的值。 不同的区域对应xml源文件中的不同节点,默认报表中有如下节点: ![](https://img.kancloud.cn/58/59/5859aa13a346a4f8126d3dcd8bc7304d_256x366.png) 每一个报表都有一个默认的主数据源和多个子数据源、多个参数、 多个变量: 2. 报表组件: Jasper提供了许多有用的组件来包裹不同的内容: ![](https://img.kancloud.cn/0b/32/0b32a538d2587000ecf8cea5c5ccc448_359x333.png) 3. Springboot集成Jasper: a. 添加依赖 解决中文字体问题 ![](https://img.kancloud.cn/1e/10/1e1004d64e40b27941b48ecfdfdc6286_696x261.png) 第二个依赖是Japser要使用的字体。由于字体版权问题,这个包中包含的字体有限, 如果使用中文,就会出错,这时候就需要通过接口添加字体文件。 首先在 C://windows/font 文件夹里找到相关的字体文件 (*.ttf格式) 放到 resources下面新建文件夹 jasper/font 中(可以自定义),再添加font.xml 内容如下: ``` ~~~ <?xml version="1.0" encoding="UTF-8"?> <fontFamilies> <fontFamily name="msyh"> <normal>jasper/font/msyh.ttf</normal> <bold>jasper/font/msyh.ttf</bold> <italic>jasper/font/msyh.ttf</italic> <boldItalic>jasper/font/msyh.ttf</boldItalic> <pdfEncoding>Identity-H</pdfEncoding> <pdfEmbedded>true</pdfEmbedded> <exportFonts> <export key="net.sf.jasperreports.html">'msyh', Arial, Helvetica, sans-serif</export> <export key="net.sf.jasperreports.xhtml">'msyh', Arial, Helvetica, sans-serif</export> </exportFonts> </fontFamily> </fontFamilies> ~~~ ``` 注意这里给字体命名为 msyh ,这个命名要跟 jasper studio中的字体名字一样。 然后新建配置文件`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.msyh=jasper/font/fonts.xml ~~~ ``` 项目代码里配置完成后,需要在jasper studio中也安装相关的字体,定义要注意这里的字体名字要去上面的一致! 点击 windonws-> prefrence 搜索font即可。如下图 ![](https://img.kancloud.cn/06/18/0618cafc2d7a4f95d26c9289b3687179_730x393.png) b. 向报表模板传递值: 这里的操作跟MVC非常相似! 但是也非常简单:关键代码如下 ![](https://img.kancloud.cn/0b/3d/0b3d3a036dc12460b667e976a81e96df_1049x560.png) 两个关键函数:一个重要概念: ~~~ JasperCompileManager.compileReport () 用于编译Jrxml模板 ~~~ ~~~ JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params, new JRBeanCollectionDataSource(tableMergeCols)); 用于向模板传递参数和数据源! 一个模板只能有一个主数据源,但是可以有多个参数:子报表也是一种参数,子数据源也是一种参数 ~~~ 最终报表效果如下: ![](https://img.kancloud.cn/c3/0c/c30cc95014c5349bbe561ecab4dd3464_794x691.png)