情况说明:

java代码完全一致,本地(windows),测试环境(linux)都ok,到生产(linux)就出现autoSizeColumn之后列宽混乱的情况。

代码:

			cell.setCellValue("XXX");
        	sheet.autoSizeColumn(i);
        	int colWidth = sheet.getColumnWidth(i) * 2;
        	sheet.setColumnWidth(i, colWidth < 3000 ? 3000 : colWidth);

问题分析:

首先代码是在cell.setCellValue(“XXX”)之后sheet.autoSizeColumn(i),所以排除autoSizeColumn之后setCellValue的的情况。
其次有2个环境是ok的,所以不是代码问题,应该是环境问题。
查到资料说字体不存在会报错,我这边没有报错异常,但可能是字体问题。
之后网上查到:这是一个字体问题。原作者找到的唯一字体是Serif。我这边也没具体测试过,无法做结论。
然后去比对了发现生产环境字体库的确缺失。我这边设置的字体是Arial,但是本地、测试、生产都没有该字体,我就只能把字体全部复制过去。

处理过程

首先查询安装字体

[root@XXX ~]# fc-list
/usr/share/fonts/ucs-miscfixed/6x12.bdf: Fixed:style=SemiCondensed
..
..
..
/usr/share/fonts/lohit-bengali/Lohit-Bengali.ttf: Lohit Bengali:style=Regular

把测试环境/usr/share/fonts/这部分字体拷贝到生产环境上

PS:
查看字体配置文件有没有对应文件的路径,没有自行修改下即可

[root@XXX ~]# cat /etc/fonts/fonts.conf
...
<!-- Font directory list -->
        <dir>/usr/share/fonts</dir>
...        

查看中文字体

[root@XXX ~]# fc-list :lang=zh

然后复制文件到目标

将/root/fonts/下的所有文件复制到/usr/share/fonts下面
接着查看了下,的确进去了

[root@XXX ~]# cp -r /root/fonts/* /usr/share/fonts
[root@XXX ~]# fc-list

PS:
如果改过fonts.conf文件记得刷新下缓存

[root@XXX ~]# fc-cache fv

最后java应用需要重启

ok,搞定了。

性能优化

autoSizeColumn数据量大存在性能问题,可以参考下面的文章优化。
https://blog.csdn.net/Demo_Liu/article/details/97375317

Logo

更多推荐