BufferedImage生成条形码,中文乱码问题排查解决

使用 BufferedImage 生成条形码时,需要将中文备注信息画在条形码图片上,本地测试查看条形码图片生成正常,中文信息可以正常展示。但是发布到linux服务器后,图片中的中文始终乱码。遂开始排查问题:
Graphics2D 画布写入文字代码如下:

BufferedImage image;
Graphics2D  g2d = image.createGraphics();
        // 设置文字颜色
        g2d.setColor(Color.BLACK);
        // 字体、字型、字号
        // g2d.setFont(new Font("微软雅黑", Font.PLAIN, fontSize));
        g2d.setFont(new Font("宋体", Font.BOLD, fontSize));

此处设置了字体,而中文乱码原因也在此处。如果设置的字体不支持中文,或者设置的字体在部署的服务器上没有,那么在生成图片时,中文就会乱码展示小方框


image.png

此时,需要去服务器查看:

// 查看服务器中文字体列表
fc-list :lang-zh
如果 fc-list 命令无法识别,则需先安装fontConfig
离线安装步骤:
1.下载安装包 地址
fontconfig-2.13.0-4.3.el7.x86_64.rpm
ttmkfdir-3.0.9-42.el7.x86_64.rpm
搜索对应的安装包,选择合适的版本下载

image.png

image.png

下载后上传到服务器准备安装

2.安装:
进入服务器上安装包所在目录,执行安装命令
rpm -ivh fontconfig-2.13.0-4.3.el7.x86_64.rpm --nodeps --force
rpm -ivh ttmkfdir-3.0.9-42.el7.x86_64.rpm --nodeps --force

3.创建字体目录,上传字体文件
cd /usr/share
mkdir fonts
chmod -R 755 /usr/share/fonts
// /usr/share/fonts 是安装fontconfig后配置文件中字体文件的默认目录,也可以自定义修改
// 修改字体配置文件中的文件目录
vim /etc/fonts/fonts.conf


image.png

上传windows本地的字体文件到服务器上的字体目录
把C:\Windows\Fonts下的字体库打包上传到fonts目录

4.刷新缓存让字体生效(不需要重启服务器)

 fc-cache 
  1. 验证字体是否生效
// 查看全部字体
fc-list
// 查看中文字体
fc-list :lang-zh
// 查看 宋体
fc-list :lang-zh |grep 宋体

5.此时去查看条形码生成功能是否正常,如果不正常,重启条形码对应的服务即可。

image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容