jasper综合使用-javabean结合实际业务-解决PDF中文
2017-10-26 17:50
495 查看
前言:
之前写了2篇关于JasperSoft的文章,当时调通了,以为万事大吉了就放了一段时间。
结果等到现在用的时候重新捡起来发现问题是真的多,下面就一一罗列一下。
前2篇文章传送门:jasperreport JAVA API集成到spring boot中
jasperreport+jaspersoft生成报表并集成到spring boot中
一 PDF中文问题
之前的技术是Jasper 5.6.0版本,解决中文用了itext-2.1.7.js2.jar和
itextasian-2.1.7.js2.jar两个文件,而且需要自己手动maven安装也很麻烦。但是
这次我按照这个方法配置的时候竟然死活出不来中文,只好放弃,另寻办法。
参考Jasperreports6.3.1+Jaspersoft
studio6.3.1进行报表开发实战教程(七)-PDF中文显示
Jasperreports6.4.1+Jaspersoft studio6.4.1进行报表开发实战教程-PDF中文显示
这2篇干货之后发现了一个比较好的办法。懒的话,可以直接看我下面总结的办法。
1.1 给jaspersoft studio添加中文字体。
核心:安装jaspersoft studio,然后手动添加中文字体,比如微软雅黑,然后给模板中涉及到
中文的地方设定字体为新增加的字体。
首先搞到自己想要的字体,网上下载或者windows系统里复制也行,我用的是ttf格式,ttc的没试
过,估计也能用。
如下图打开jaspersoft studio的设置
点击add,找到准备好的字体。
给编辑器增加好自己的字体后,中文显示的时候选择刚添加的字体即可
这样一来在studio里面预览的时候就能展示中文了。
1.2 java API 使用中文字体
如下图在resources或classes下增加一些文件。
1.2.1 jasperreports_extension.properties
net.sf.jasperreports.extension.simple.font.families. 是关键字,后面的内容随便写都行,建议和字体名称一样。
后面的value指向fonts.xml文件,使用相对路径即可。
1.2.2 fonts.xml
大小写区别。使用TTF的配置在macos和windows均测试通过,但是部署到远端centos时会报
net.sf.jasperreports.engine.util.JRFontNotFoundException:
Font ‘msyh‘ is not available to the JVM. See the Javadoc for more details.
遍寻网上解决办法,花了2天没一个能解决问题。后来改了小写与文件名匹配后就能展示了。
如果不信的可以自己改了试试。
1.2.3 放入之前下好的ttf文件即可
以上3步即可解决中文字体问题。如果是添加多个字体也是一样的操作。
二 使用javabean作为数据源
我前面2篇文章提到了2种连接数据的方式,
1 使用报表模板自身配置好的sql语句
2 在java中创建DataSource dbSource并执行代码写好的sql语句
但是实际业务中会复杂的多,需要考虑到权限等等。
我目前的业务需求是在列表页查询数据并勾选某几条进行打印。
核心是调用已经写好的查询数据接口返回data数据,将其塞到JRBeanCollectionDataSource
中作为数据源即可。这样就能很好的与现有的业务逻辑相结合。
需要注意的是:比如PurchaseOrderData里定义了
String a;
Integer b;
....
等属性,那么在设计报表的时候每一个field和类型都需要一一对应。
这两个地方对应上之后,设计报表就可以无需写任何sql,只要你的bean有数据就可以直接展示。
------------------------------------------------------------------------------------------------------------------------------
个人记录一下方便以后自己查看。
如果有做复杂点的报表比如子报表等可以看我的下一篇文章。
之前写了2篇关于JasperSoft的文章,当时调通了,以为万事大吉了就放了一段时间。
结果等到现在用的时候重新捡起来发现问题是真的多,下面就一一罗列一下。
前2篇文章传送门:jasperreport JAVA API集成到spring boot中
jasperreport+jaspersoft生成报表并集成到spring boot中
一 PDF中文问题
之前的技术是Jasper 5.6.0版本,解决中文用了itext-2.1.7.js2.jar和
itextasian-2.1.7.js2.jar两个文件,而且需要自己手动maven安装也很麻烦。但是
这次我按照这个方法配置的时候竟然死活出不来中文,只好放弃,另寻办法。
参考Jasperreports6.3.1+Jaspersoft
studio6.3.1进行报表开发实战教程(七)-PDF中文显示
Jasperreports6.4.1+Jaspersoft studio6.4.1进行报表开发实战教程-PDF中文显示
这2篇干货之后发现了一个比较好的办法。懒的话,可以直接看我下面总结的办法。
1.1 给jaspersoft studio添加中文字体。
核心:安装jaspersoft studio,然后手动添加中文字体,比如微软雅黑,然后给模板中涉及到
中文的地方设定字体为新增加的字体。
首先搞到自己想要的字体,网上下载或者windows系统里复制也行,我用的是ttf格式,ttc的没试
过,估计也能用。
如下图打开jaspersoft studio的设置
点击add,找到准备好的字体。
给编辑器增加好自己的字体后,中文显示的时候选择刚添加的字体即可
这样一来在studio里面预览的时候就能展示中文了。
1.2 java API 使用中文字体
如下图在resources或classes下增加一些文件。
1.2.1 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=jaspertemplate/fonts/fonts.xml第一行不用改,打开SimpleFontExtensionsRegistryFactory可以看到定义了这2个配置。
net.sf.jasperreports.extension.simple.font.families. 是关键字,后面的内容随便写都行,建议和字体名称一样。
后面的value指向fonts.xml文件,使用相对路径即可。
1.2.2 fonts.xml
<?xml version="1.0" encoding="UTF-8"?> <fontFamilies> <fontFamily name="msyh"><!--字体名称--> <normal>jaspertemplate/fonts/msyh.ttf</normal><!--字体文件的路径--> <bold>jaspertemplate/fonts/msyh.ttf</bold> <italic>jaspertemplate/fonts/msyh.ttf</italic> <boldItalic>jaspertemplate/fonts/msyh.ttf</boldItalic> <pdfEncoding>Identity-H</pdfEncoding><!--这里的定义就与上面1.1的图设置相匹配了--> <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.ttf,上面配置的时候用的是msyh.TTF,注意这里的
大小写区别。使用TTF的配置在macos和windows均测试通过,但是部署到远端centos时会报
net.sf.jasperreports.engine.util.JRFontNotFoundException:
Font ‘msyh‘ is not available to the JVM. See the Javadoc for more details.
遍寻网上解决办法,花了2天没一个能解决问题。后来改了小写与文件名匹配后就能展示了。
如果不信的可以自己改了试试。
1.2.3 放入之前下好的ttf文件即可
以上3步即可解决中文字体问题。如果是添加多个字体也是一样的操作。
二 使用javabean作为数据源
我前面2篇文章提到了2种连接数据的方式,
1 使用报表模板自身配置好的sql语句
2 在java中创建DataSource dbSource并执行代码写好的sql语句
但是实际业务中会复杂的多,需要考虑到权限等等。
我目前的业务需求是在列表页查询数据并勾选某几条进行打印。
核心是调用已经写好的查询数据接口返回data数据,将其塞到JRBeanCollectionDataSource
中作为数据源即可。这样就能很好的与现有的业务逻辑相结合。
@GetMapping("/order") public ModelAndView getOrderReport(final ModelMap modelMap, @RequestParam("reportName") final String reportName, @RequestParam("format") final String format, @RequestParam("code") final List<String> codeList) { List<PurchaseOrderData> list = new ArrayList<>(); if (CollectionUtils.isNotEmpty(codeList)) { for (String code : codeList) {//根据订单号查询订单信息,可改成自己的业务逻辑 PurchaseOrderData orderData = purchaseOrderFacade.getPurchaseOrderByCode(code); list.add(orderData); } JRDataSource jrDataSource = new JRBeanCollectionDataSource(list); modelMap.put("datasource", jrDataSource); modelMap.put("format", format); return new ModelAndView(reportName, modelMap); } return null; }上面的逻辑是根据传过来的订单号获取订单信息,并打印到报表,仅供参考。
需要注意的是:比如PurchaseOrderData里定义了
String a;
Integer b;
....
等属性,那么在设计报表的时候每一个field和类型都需要一一对应。
这两个地方对应上之后,设计报表就可以无需写任何sql,只要你的bean有数据就可以直接展示。
------------------------------------------------------------------------------------------------------------------------------
个人记录一下方便以后自己查看。
如果有做复杂点的报表比如子报表等可以看我的下一篇文章。
相关文章推荐
- java使用iText生成pdf:解决中文
- Ubuntu下使用Java调用IKAnalyzer中文分词程序失效的解决方法
- 使用commons-fileupload实现文件(doc、pdf)上传,提取表单参数并解决中文乱码
- 使用iTextSharp 解析html生成pdf,xmlworker不支持中文的解决办法
- 使用Eclipse运行Java代码调用JDBC读写MySQL中文变成问号的终极解决办法
- java中调用Js的方法 & java.net.Url的使用 & Url中文乱码的解决 & Map 排序
- java---javadoc---Eclipse中javadoc的使用以及中文乱码的解决
- iReport与JasperReport PDF中文解决
- [ASP.net MVC] 将HTML转成PDF档案,使用iTextSharp套件的XMLWorkerHelper (附上解决显示中文问题)
- ssh三大框架简单整合,struts2整合JasperReport报表、图表,解决HTML显示图片不出来,PDF中文不显示的问题
- 用Jsp+Servlet+JavaBean写的注册登陆界面,解决中文乱码
- 非java.util.zip,使用ant.jar制作zip压缩文件,以及相关中文解决方法
- jsp 结合使用jstl 和 javabean
- JAVA ,SSH中文及其乱码问题的解决 6大配置点 使用UTF-8编码
- 滴水穿石--Java 生成PDF文件--iText使用之插入图片和中文乱码
- 使用Eclipse运行Java代码调用JDBC读写MySQL中文变成问号的终极解决办法
- JAVA使用 java-unrar-0.3.jar 解压rar,并且解决中文乱码
- 解决Java读取properties文件的中文问题的新办法(不使用native2ascii.exe及其他工具)
- JAVA ,SSH中文及其乱码问题的解决 6大配置点 使用UTF-8编码
- 解决针对ubuntu11.04安装中文包后不能正常查看或使用pdf和Archiver的问题