Linux下让JDK支持中文

王朝java/jsp·作者佚名  2006-01-09
宽屏版  字体: |||超大  

1. 原因

JDK需要从字体配置文件中读取字体列表,而默认的字体列表并无中文字体。

2. 解决方法

为JDK的字体配置文件添加中文字体

3. 操作步骤

3.1. 复制字体文件到jdk的字体目录

cd /usr/local/java/jre/lib/fonts

cp /usr/share/fonts/zh_CN/TrueType/gbsn00l.ttf .

3.2. 生成字体列表文件

ttmkfdir -o fonts.dir

3.3. 查看新生成的fonts.dir文件,查看有关gbsn00l.ttf的部分

vi fonts.dir

3.4. 应该在文件的最后一行

-Arphic Technology Co.-AR PL SungtiL GB-medium-r-normal--0-0-0-0-p-0-ascii-0

3.5. 回到上一层目录,将gbsn00lp.ttf加入font.properties

cd ..

vi font.properties

3.6. 添加方法:

3.6.1 首先将3.4中看到的那一行文字复制出来,将其中的

0-0-0-0-p-0 改为 *-%d-*-*-p-*

目的是让字体能够按比例缩放,现在成为:

-Arphic Technology Co.-AR PL SungtiL GB-medium-r-normal--*-%d-*-*-p-*-ascii-0

3.6.2 font.properties文件中,已经含有0和1字体,比如第一行是serif.0,第二行是serif.1,那么需要添加

serif.2=-Arphic Technology Co.-AR PL SungtiL GB-medium-r-normal--*-%d-*-*-p-*-ascii-0

3.6.3 以此类推,在每个xxxx.1下面添加xxxx.2,直到文件的# Missing Glyph Character之前。

3.6.4 添加完成,存盘退出。

3.7. 添加环境变量JAVA_FONTS

vi /etc/profile

JAVA_FONTS=$JAVA_HOME/jre/lib/fonts

3.8. 重新登陆以使环境变量生效

4. 测试

TestCHSGraphic.java(jdk1.3)

import java.awt.*;

import java.awt.image.*;

import java.io.*;

import java.util.*;

import com.sun.image.codec.jpeg.*;

public class TestCHSGraphic

{

public static void main(String[] args) throws Exception

{

System.setProperty("java.awt.headless", "true");

BufferedImage bi = new BufferedImage(200, 100, BufferedImage.TYPE_INT_RGB);

Graphics g = bi.getGraphics();

String s = "中文测试";

// 注意!具体转码可能有所不同!

g.drawString(new String(s.getBytes(), "GB2312"), 50, 50);

bi.flush();

FileOutputStream fos = new FileOutputStream("test.jpg");

JPEGImageEncoder jpegie = JPEGCodec.createJPEGEncoder(fos);

jpegie.encode(bi);

fos.close();

}

}

TestCHSGraphic.java(jdk1.4)

import java.awt.Graphics;

import java.awt.BufferedImage;

import javax.imageio.ImageIO;

import java.io.*;

public class TestCHSGraphic

{

public static void main(String[] args) throws Exception

{

System.setProperty("java.awt.headless", "true");

BufferedImage bi = new BufferedImage(200, 100, BufferedImage.TYPE_INT_RGB);

Graphics g = bi.getGraphics();

String s = "中文测试";

// 注意!具体转码可能有所不同!

g.drawString(new String(s.getBytes(), "GB2312"), 50, 50);

ImageIO.write(bi, "jpeg", new File("test.jpg"));

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
© 2005- 王朝网络 版权所有