页面树结构

版本比较

标识

  • 该行被添加。
  • 该行被删除。
  • 格式已经改变。

(本文档仅供参考)

1、问题现象

对于电子表格报表,如下两种情形时,可能会出现中文变为乱码的情况。1)电子表格报表浏览时正常,但在打印报表、或将报表导出为 PDF 文件时,中文内容变成了方框(乱码字符)。2)电子表格中添加图形时,图形上的图例、或者坐标轴上的中文,也可能会显示为乱码。3)所有电子表格打开或者导出都报错

分析报告中因为是需要通过导入引入其他报表资源,也同样可能会出现这样的情况。


i

面板
borderColor#BBBBBB
bgColor#F0F0F0
borderWidth1
borderStylesolid
文档目录:

目录


  • 正常浏览:

  • 导出到 PDF 时出现异常(字符乱码):

2、问题原因

1)电子表格报表设置了某种字体,但服务器所在的操作系统上缺少对应的字体文件。尤其是当 Smartbi 部署到 Unix/Linux 等系统上时,最有可能出现该问题。原因是通过客户端访问smartbi资源,表格的展现是由浏览器解析的,使用的是客户端操作系统的字体文件,但是图形的展现以及报表的打印、导出PDF是由服务器生成的,使用的是服务器操作系统的字体文件,当服务器操作系统缺少对应字体则可能出现乱码或者字体不正确的现象。

2)通过IE浏览器查看分析报告报表使用的是HTML格式,分析报告报表资源是由浏览器解析的,使用的是客户端操作系统的字体文件;而通过谷歌等其它浏览器查看分析报告会使用pdf格式展示,此时报表页面会通过服务器先生成PDF格式,因此使用的是服务器的字体文件,当服务器缺少对应字体时则可能出现乱码或者字体不正确的现象。

页面快捷入口:系统监控->所有字体

注意:Java不支持.fon格式的字体,请上传字体时只上传.ttf和.ttc格式的字体文件!!!

         上传的字体建议是上传项目有版权的字体或者免费字体!!!


3、解决办法 (上传的字体建议是上传项目有版权的字体或者免费字体!!!)

通常在 Windows 系统的 Fonts 目录下可以找到对应的字体文件,将其中的字体文件拷贝到服务器上(一般很难知道具体缺少什么字体,将其中的所有字体拷贝上去比较省事),放到上图中“External Font Dir”目录下,如Font-smartbi文件夹中,并重启应用服务器即可。重启后再次使用 listFont.jsp 确认可以看到该字体,然后再打印或者导出到 PDF 就正常了。

4、docker环境字体加载

         在docker环境部署smartbi后,访问报表导出的时候图形出现字体乱码问题,具体可参考wiki文档添加字体:高性能版本(docker)字体乱码处理

5、特殊情况

特殊情况1:

如果按照上述步骤操作后,仍然有中文乱码问题,可能是因为应用服务器所用的 JDK 没能正确地从上述“External Font Dir”目录下加载那些字体文件。将字体文件拷贝到 JDK 自己的 fonts 目录下。JDK 对应的字体文件路径是:/jdk/jre/lib/fonts ,参见下图,然后重启应用服务器。

(注意:有些情况加到jdk也无法读取,这时候还是需要尝试在 Font-smartbi文件夹中添加window系统所有字体,然后重启smartbi服务,看是否能解决)

特殊情况2:

通常情况下,进行了“特殊情况1”的解决方案后,都是可以成功解决的,但有时候存在Linux系统就是无法读取到某些字体,并又没有办法自动在读取不到对应字体的情况下,换成另外的字体,这时候可以通过如下方式解决:

1)在服务器上的jdk路径上新建一个fallback目录,如:\usr\java\jdk1.8.0_91\jre\lib\fonts建立一个fallback目录;

2)复制一个字体文件(simsun字体进去\usr\java\jdk1.8.0_91\jre\lib\fonts\fallback\simsun.ttc,然后重启smartbi服务器。

注:只能是添加一种字体到fallback文件夹,不能添加多种。

注:

1、关于服务器所对应jdk安装路径的查找,可以网上搜索相关方法,如weblogic的服务器,可以使用ps -ef|grep weblogic命令获取(如下图):

2、在服务器上的jdk路径上新建一个fallbak目录添加字体后没有生效,此原因可能是由于服务器的jdk使用的是操作系统默认的jdk,这时候就需要将服务器的JVM参数中的jdk路径指向添加了字体的jdk路径。