itext 生成pdf 并转图片,出现中文字体乱码,并classpath下设置中文字体

it2025-02-10  8

itext 生成pdf 并转图片,出现中文字体乱码

case1. 使用 STSong-Light 字体,在window 和Linux 中 ,转图片时,出现小方块。

BaseFont bf = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);

看了好多资料都未解决,大多数都说是没有对应的字体,从csdn下载,安装到window中,坑得一逼,还要那么高的下载分数。

就算能够解决,那么上线后每台linux机器上都得安装,如果docker还得去挂载,反正就一堆堆的事。

case2.  使用  simsun.ttc 字体,在window中,转图片正常,在linux中异常。

BaseFont bf = BaseFont.createFont("simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

linux错误提示:/simsun.ttc is not a valid TTF or OTF file   不是一个合法的文件,反正就是不符合 opentype格式吧

还是未解决

case3. simsun.ttc 字体 提示不合法文件后,就换了simfang.ttf 字体。

BaseFont bf = BaseFont.createFont("/simfang.ttf ", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

    linux错误提示: Table 'name' does not exist in /simfang.ttf  未找到simfang.ttf文件,肯定是路径问题

 

case2和case3 都是使用了window的字体,在 C:\Windows\Fonts 中 复制  宋体常规( simsun.ttc )和仿宋常规(simfang.ttf)

到maven项目classpath下

 

解决方案:

使用 simfang.ttf 放在classpath下,

在window下, 从 C:\Windows\Fonts 文件夹中,复制仿宋字体(simfang.ttf)到maven 项目中 src/main/resources/fonts/simfang.ttf

 

在pom.xml中添加

    3. 设置字体

BaseFont bf = BaseFont.createFont("/fonts/simfang.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

 

设置其他字体也是一样的

//设置中文字体,解决中文不能显示问题(加载classpath下字体, 名字后面要加上type索引 0/1,不能大于1,看源码就知道) BaseFont bf = BaseFont.createFont("/fonts/simsun.ttc,1", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);

将字体放在classpath下,目前是最省事的方式。

自定义的字体,建议可以看看博客

https://cloud.tencent.com/developer/article/1472801

最新回复(0)