Jaspersoft IReport生成报表因字体导致的排版问题

740 阅读3分钟

One of the most common and least emotional tasks in any enterprise software is to produce reports. However after many years today I got my first "serious bug" in Jasper Reports.
以上是对@tuxtorFixing missing data on Jasper Reports with community Linux distros引用,本人对iReport生产报表了解不多,也是遇到问题解决问题,在此记录是为了备忘,同时也给在和bug斗争的同学一点思路。

一、问题背景

公司项目用到Jaspersoft IReport Designer3.7.6 绘制业务报表,某次测试小伙伴反馈测试环境下载的pdf报表,其中单元格中的文本没有自动换行展示导致展示有问题。

大致效果如图:

image.png

经过排查本次此功能无代码调整,而且本地开发环境下载的pdf报表又是没问题的。

image.png

二、过程&原因

过程:

  • 首先根据下载环境服务器上的代码包反编译比对本地代码,排除非代码不一致、代码未正常发布的问题。
  • 根据Designer工具将“产品名称”单元格长度适当调长调高,本地问题得到解决,发布到环境上还是不行。
  • 勾选使用Designer工具的“Stretch with overflow”属性依然解决不了问题。参考《iReport常见和注意的问题

但从Jaspersoft 官网的一篇博文中看到这一句话:

image.png

所以可能是字体影响到样式的,以下是表格中的字体设置信息:

image.png 这里有两个字体设置信息:

1、Font name :选择在ireport里面显示的字体
我的理解是此字体是在ireport中调试/预览时展示的字体,但是会参与最终pdf文本的排版展示,在单元格中没有换行完全展示也可能是这个问题。

2、Pdf font name :选择在pdf里面显示的字体
最终打印pdf展示的字体,因为项目中集成了ITextAsian.jar等相关字体Jar包,包含了图中的STSong-Light字体。

接下来就是验证测试环境有没有SansSerif字体了, 登录环境服务器执行: fc-list|grep 'Sans' 发现结果为空,
最后将Sans相关字体安装到环境后下载pdf报表也成功解决问题了。

三、解决方案

问题找到了,解决方案就好办了。
普通Linux系统参考《Linux怎样安装字体
国产麒麟参考《银河麒麟桌面操作系统V10 SP1 如何安装字体

当然字体安装应该是系统或运维初始化的工作内容,按照规范应该交给他们统一完善打包、更新。 在当前大环境下仍然需要注意字体版权问题。

四、延伸&总结

  1. iReport 为了保证通过不同平台服务器用iReport生成的pdf展示效效果都一致,可以使用Jaspersoft IReport Designer 或 Jaspersoft Studio 将字体生成相关jar包,放到项目的classpath路径,参考官网。还有网上的类似问题1类似问题2

  2. JDK本身也可能内置字体,和一些java和字体使用的规则,参考官网