java是门跨平台的语音,众所周知,但是使用java底层画图的API,比如jfreechart,Graphics等,会发现使用中文的字体出现如下类似的情况:


此问题原因归咎于:系统本身不支持中文的字体。

检测系统平台的两个工具类:

import java.awt.*; 
  
/** 
 * Created by fengch on 2018/1/24. 
 */ 
public class FontTest { 
    public static void main(String[] args) { 
        Font[] fonts = GraphicsEnvironment 
                .getLocalGraphicsEnvironment().getAllFonts(); 
        for (Font f : fonts) { 
            System.out.println("Name:" + f.getFontName()); 
        } 
    } 
}

编译,执行,查看系统所以得font字体有哪些。

import javax.imageio.ImageIO; 
import java.awt.*; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.FileOutputStream; 
  
/** 
 * Created by fengch on 2018/1/24. 
 */ 
public class ImageTester { 
    public static void generate(String fileName) throws Exception { 
        BufferedImage image = new BufferedImage(300, 200, BufferedImage.TYPE_INT_RGB); 
        Graphics g = image.getGraphics(); 
        String fontType = "宋体"; 
        g.setFont(new Font(fontType , Font.BOLD, 22)); 
        g.drawString("你好我好", 30, 30); 
        g.drawString("\u5b8b\u4f53", 30, 80); 
        ImageIO.write(image, "JPEG", new FileOutputStream(new File(fileName))); 
    } 
  
    /** 
     * @param args 
     */ 
    public static void main(String[] args) throws Exception { 
        generate(args[0]); 
    } 
}

已中文宋体为例子,检测生成的图片看字体是否出现异常。

若出现已上问题,说明系统没有对应的字体格式,以centos系统为例子,解决方式如下:

一、复制字体
在“C:\Windows\Fonts”目录下找到所要安装字体,这里以“simsun.ttf”为例。如果安装的字体找不到,就去网上下载。

二、上传字体至CentOS系统
在/usr/share/fonts目录下建立一个子目录,比如/winFonts。上传“simsun.ttf”字体至此目录。

三、进入此目录安装
# cd /usr/share/fonts/winFonts

运行以下命令建立字体索引信息,更新字体缓存::

# sudo mkfontscale
# sudo mkfontdir
# sudo fc-cache -fv
执行以下命令让字体生效

# source /etc/profile
问题:
1.若提示 “ mkfontscale: command not found”,用yum安装:
# yum install mkfontscale
1
1
2.提示 “ fc-cache: command not found”

# yum install fontconfig


 

原文地址:CSDN


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

spring boot + freemarker 静态化以及遇到的坑