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

本文分享了使用itext生成PDF并转换为图片时遇到的中文字体乱码问题及解决办法。通过调整字体配置,并将字体文件放置于项目的classpath下,成功解决了不同操作系统上的字体显示问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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下,

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

     

  2. 在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值