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. python使用魔法函数创建可切片类型

    #!/usr/bin/env python # -*- coding: utf-8 -*- """ 可切片的对象 """ import nu ...

  2. ASP.NET Core 2.2 十八.各种Filter的内部处理机制及执行顺序

    ASP.NET core 的Filter是系统中经常用到的,本文详细分享一下各种Filter定义.执行的内部机制以及执行顺序.(ASP.NET Core 系列目录) 一. 概述 ASP.NET Cor ...

  3. 【设计模式+原型理解】第一章:使用Javascript来巧妙实现经典的设计模式

    刚开始学习设计模式之前,我是没想说要学习设计模式的,我只是因为想学习JS中的原型prototype知识,一开始我想JS中为什么要存在原型这个东西?于是慢慢通过原型而接触到设计模式,后来发现我这个过程是 ...

  4. 痞子衡嵌入式:高性能MCU之Media应用开发那些事 - 索引

    大家好,我是痞子衡,是正经搞技术的痞子.本系列痞子衡给大家介绍的是高性能MCU之Media应用开发相关知识. 飞思卡尔半导体(现恩智浦半导体)2017年推出的i.MX RT系列第一款芯片i.MXRT1 ...

  5. SpringBoot系列——jar包与war包的部署

    前言 Spring Boot支持传统部署和更现代的部署形式.jar跟war都支持,这里参考springboot参考手册学习记录 两种方式 jar springboot项目支持创建可执行Jar,参考手册 ...

  6. 第一册:lesson 115.

    原文:Knock,Knock! question:What does Jim have to drink? Isn't there anyone at home? I'll knock again , ...

  7. Vue + WebApi 小项目:构造自己的在线 Markdown 笔记本应用

    Vue + WebApi 小项目:构造自己的在线 Markdown 笔记本应用 目录 概要 知识点 完整示例图 代码与资源文件 流程步骤 概要 基于 MVP 最小可行性产品设计理念,我们先完成一个可以 ...

  8. 《全栈营销之如何制作个人博客》之二:php环境安装及个人博客后台搭建 让你的博客跑起来

    上一节我们讲了个人博客用什么开发语言,用什么CMS系统,从这一节我们就开始真正的干货,这一节我们讨论一下PHP环境的安装,及个人博客后台的搭建,让你的博客在正常的PHP环境中运行起来,你就可以进行后台 ...

  9. PHP制作个人博客-广告位添加与调用 推荐文章数据调取

    上一节博客的导航我们已经动态调取,这一节我们主讲一下如何根据页面布局,后台添加广告位,及模板上动态调取广告.博客推荐文章的数据调用. 首先我们在云码博客的后台添加10条左右的测试数据,thinkcmf ...

  10. vue中的tab栏切换内容变换

    <!DOCTYPE html> <html lang="cn-zh"> <head> <meta charset="UTF-8& ...