Linux字体缺失导致EasyExcel报错

环境:centos7(华为云服务器),jdk17,springboot3

        线下测试表格下载没有问题,一放到线上,下载下来都是空白,查看日志报错如下:

dispatcherServlet] in context with path [] threw exception [Request processing failed: java.lang.RuntimeException: com.alibaba.excel.exception.ExcelGenerateException: java.lang.InternalError: java.lang.reflect.InvocationTargetException] with root cause

java.lang.RuntimeException: Fontconfig head is null, check your fonts or fonts configuration
	at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1269) ~[na:na]
	at java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:224) ~[na:na]
	at java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:106) ~[na:na]

        系统字体缺失

        系统联网:比较简单直接下载安装就行

sudo yum install fontconfig
sudo yum install dejavu-sans-fonts

         系统未联网:最烦的就是版本问题,直接从官网下载版本一直冲突,于是我用另一个同样centos7系统下载下来包然后移到问题服务器;

        yumdownloader下载的包会下在当前目录

yumdownloader dejavu-fonts-common
yumdownloader dejavu-sans-fonts fontpackages-filesystem

yumdownloader fontconfig

yumdownloader ttmkfdir

        安装所需依赖

sudo rpm -ivh dejavu-fonts-common*.rpm dejavu-sans-fonts*.rpm fontpackages-filesystem*.rpm  

        安装fontconfig

sudo rpm -ivh fontconfig-2.13.0-4.3.el7.x86_64.rpm

        安装ttmkfdir,当你在 Linux 系统中加了新的字体,可以使用 ttmkfdir 生成相关的字体配置文件,使得字体能被 X11 系统识别和使用;

 sudo rpm -ivh ttmkfdir 

        回到windows系统找要用的字体

C:\Windows\Fonts

        在问题服务器中创建文件夹,然后将字体文件移过来

cd /usr/share/fontconfig/

mkdir fonts 

chmod -R 755 /usr/share/fontconfig/fonts/

         生成字体目录文件

ttmkfdir -e /usr/share/X11/fonts/encodings/encodings.dir

        修改系统字体配置 

vi /etc/fonts/fonts.conf

        在 Font directory list 下添加你的文件夹

<dir>/usr/share/fontconfig/fonts</dir>

        保存,然后刷新字体缓存

fc-cache 

        然后查看是否生效

fc-list :lang=zh 

        easyExcel的配置中别忘了设置字体

public class ExcelFillCellMergeStrategy implements CellWriteHandler {

    @Override
    public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
                                 List<WriteCellData<?>> cellDataList, Cell cell, Head head, Integer integer, Boolean aBoolean) {
        Workbook workbook = writeSheetHolder.getSheet().getWorkbook();
        Font font = workbook.createFont();
        font.setFontName("SimHei");
        font.setFontHeightInPoints((short) 14);
        font.setBold(true);
    }
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值