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