1. 报表的制作过程为

  ① 制作.jrxml报表模板文件,并编译成.jasper

  ② 代码处理.jasper文件并填充数据进行输出

2. 一开始是打算使用iReport作为模板制作工具的,但是有以下局限

  • iReport的最高版本是2014年的5.6版,因此它最多支持JDK7以下版本
  • 现在项目起码用的JDK8,所以需要安装两个以上的JDK
  • 可能是高版本编译出来的JavaBean,所以无法使用iReport进行JavaBean数据源的操作,查找不出属性

3. 使用Eclipse安装JasperStudio插件

  • 安装完之后不管是打开Eclipse还是打开插件,都会报错,因此卸载掉了

4. 直接下载JasperStudio

  • 使用了一下,发现配置了classpath到我得项目classes下,还是会报找不到class的错
  • 使用JasperStudio导入项目可以直接跟开发工具新建类时选择接口的方式查找到JavaBean
  • 因此目前的方案是:当增加报表.jasper时,使用JasperStudio导入项目处理,生成后回到开发环境刷新资源同步得到

5. Spring Boot简单集成(为简化直接先在controller层写代码)

  ① 引入依赖

    <dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.8.0</version>
</dependency>

  ② 写请求代码(在线查看pdf)

   @RequestMapping("/c02v01/report")
public void getReport(HttpServletRequest request, HttpServletResponse response) throws Exception {
Map<String, Object> parameters = new HashMap<String, Object>(16); // 由jrxml文件编译后生产jasper文件的路径
String jasperPath = ResourceUtils.getURL("classpath:jasper/report2.jasper").getPath();
FileInputStream isRef = null;
ServletOutputStream sosRef = null; try { isRef = new FileInputStream(new File(jasperPath));
sosRef = response.getOutputStream();
// 组装list数据源
List<Teacher> list = teacherMaper.selectAll(); JasperRunManager.runReportToPdfStream(isRef, sosRef, parameters, new JRBeanCollectionDataSource(list)); response.setContentType("application/pdf"); } catch (JRException e) { e.printStackTrace();
} finally {
sosRef.flush();
sosRef.close();
} }

6. JasperReport请求到的PDF中文不显示问题

  • 解决过程1:引入依赖itext-asian 测试结果:无效
  • 解决过程2:引入依赖jasperreports-fonts 测试结果:无效
  • 解决过程3:引入依赖cn.lesper:iTextAsian 测试结果:使用宋体有效

最终解决:出现这问题的原因是JasperreportStudio里面包含了字体font,但是jasperreports的依赖包并不包含font文件,为了让项目能获得font包,可以增加font配置

  ① 暂时引入jasperreports-fonts 依赖

  ② 把依赖内的jasperreports_extension.properties放入到resource根目录(第二个属性指向自己的配置xml)

net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.dejavu=net/sf/jasperreports/fonts/fonts.xml

  ③ 在上述第二个属性路径下取出xml文件,把它放入自己的配置路径下

<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies> <fontFamily name="宋体">
<normal>net/sf/jasperreports/fonts/dejavu/simsun.ttf</normal>
<bold>net/sf/jasperreports/fonts/dejavu/simsun.ttf</bold>
<italic>net/sf/jasperreports/fonts/dejavu/simsun.ttf</italic>
<boldItalic>net/sf/jasperreports/fonts/dejavu/simsun.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> <!-- fontFamily节点可以配置多个,可以根据studio对应的font-type配置不同的 -->
<!-- simsun.ttf为对应的font库,可以从window系统下C:\Windows\Fonts取到放入项目中 -->
</fontFamilies>

  ④ 可以把以上的打包进jar包中(依赖cn.lesper:iTextAsian就是这样把以上步骤打包成jar的,使用自己的配置记得把该依赖去掉),如果不打包,可以直接跳过这步

  ⑤ 重新启动SpringBoot即可

  ⑥ 去除jasperreports-fonts、cn.lesper:iTextAsian等同结构的依赖(主要是去除多个jasperreports_extension.properties,保留自己要的那个)

  这图就是导入字体库的几个必须文件,分别为指向模板文件与字体库映射的映射文件的配置文件jasperreports_extension.properties、模板文件与字体库映射的映射文件fonts.xml 、字体库文件

2019-04-10 集成JasperReport的更多相关文章

  1. 2019.04.10打卡(HTML)

    代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.o ...

  2. PowerBI更新2019/04 - 解决方案架构 - PowerBI Solution Architecture(一图胜万字!)

    Power BI 架构图 (2019/04) 1) Power BI Desktop 是一个免费的工具.它可以用来准备和管理数据模型:包括链接各种数据:做数据清洗:定义关系:定义度量值和层级关系:应用 ...

  3. Gitbook环境搭建及制作——2019年10月24日

    1.gitbook介绍 GitBook 是一个基于 Node.js 的命令行工具,支持 Markdown 和 AsciiDoc 两种语法格式,可以输出 HTML.PDF.eBook 等格式的电子书.可 ...

  4. Visual Studio 2019 v16.10 和 v16.11 Preview 1 现已推出!

    Visual Studio 2019 v16.10有什么新功能? 我们很高兴地宣布Visual Studio 2019 v16.10 GA 和 v16.11 preview 1发布.此版本使我们的主题 ...

  5. 开机时自动启动的AutoHotkey脚本 2019年10月09日

    ;;; 开机时自动启动的AutoHotkey脚本 2019年10月09日;; http://www.autoahk.com/archives/16600; https://www.cnblogs.co ...

  6. ;~ 小部分AutoHotkey源代码片段测试模板2019年10月9日.ahk

    ;~ 小部分AutoHotkey源代码片段测试模板2019年10月9日.ahk ;~ 此脚本用于测试执行一行或多行AHK脚本源代码的效果;~ 此脚本最后修改于2019年9月22日20时03分;~ 把此 ...

  7. Ubuntu LTS 系统学习使用体会和实用工具软件汇总 6.04 8.04 10.04 12.04 14.04 16.04

    Ubuntu LTS 系统学习体会和工具软件汇总 6.04 8.04 10.04 12.04 14.04 16.04 ubuntu入门必备pdf:http://download.csdn.net/de ...

  8. 每日一练ACM 2019.04.13

    2019.04.13 第1002题:A+B Proble Ⅱ Problem DescriptionI have a very simple problem for you. Given two in ...

  9. Java学习之JDBC 2019/3/10

    Java学习之JDBC 大部分的程序都是用来通过处理数据来达到人们预期的效果,数据是粮食,没有数据操作的程序就像helloworld程序一样没有用处.因此数据库操作是重中之重,是程序发挥功能的基石,j ...

  10. SPSS 2019年10月24日 今日学习总结

    2019年10月24日今日课上内容1.SPSS掌握基于键值的一对多合并2.掌握重构数据3.掌握汇总功能 内容: 1.基于键值的一对多合并 合并文件 添加变量 合并方法:基于键值的一对多合并 变量 2. ...

随机推荐

  1. 不使用 webpack,vuejs 异步加载模板

    webpack 打包不会玩,整了这么个小玩具 一段 vue 绑定代码,关键点在 gmallComponent 1.异步加载外部 vue 文件(非 .vue) 2.按一定规则拆分 template.sc ...

  2. SLAM+语音机器人DIY系列:(二)ROS入门——7.理解tf的原理

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  3. 与其想当然的 overdesign,不如自己动手做个试验

    Conmajia Jan. 29th, 2019 早在2012年,我曾经针对 C# System.Random 不同的初始化方案专门做过一次试验,得出了单次默认初始化即可获得质量很好的随机数的结论.可 ...

  4. [Vue] vue中setInterval的问题

    vue中使用setInterval this.chatTimer = setInterval(() => { console.log(this.chatTimer); this.chatMsg( ...

  5. (转载)JSON.stringfy()和JSON.parse()的作用

    原文链接:https://www.cnblogs.com/shytong/p/4960418.html 一篇详细的介绍和对比,转载自 博客园 “很好玩的博客” 的一片博文,非常感谢他贡献优质文章.

  6. 系统设计Design For Failure思想

    系统设计Design For Failure思想 Complex systems fail in spectacular ways. Failure isn't a question of if, b ...

  7. c# Lambda操作类封装

    using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...

  8. vue 使用定时器setInterval

    来自:https://www.jianshu.com/p/180957762852 侵删 beforeMount() { //车辆进出设置定时器,每3秒刷新一次 var self = this; cl ...

  9. C#实现多级子目录Zip压缩解压实例

          参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩,类似winrar,可以选择 ...

  10. 我带着小程序和Springboot后端终于战胜了WebSocket!!!胜利( •̀ ω •́ )y

    WebSocket项目笔记 1. What is WebSocket? (以下内容来源于百度百科) WebSocket是一种在单个TCP连接上进行全双工通信的协议 WebSocket使得客户端和服务器 ...