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