贝贝爸爸的程序人生

关注Seam、BPM
posts - 23, comments - 10, trackbacks - 0, articles - 32
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

关于Graphics2D输出图片中文字符乱码的问题

Posted on 2011-08-17 15:00 贝贝爸爸 阅读(8997) 评论(0)  编辑  收藏 所属分类: BPM
这几天调试Activiti引擎的过程中,Activiti引擎会自动生成图片,可如果遇到中文的节点时,图片的中文字符将变成乱码,搜索了下相关的文章,最终为字体原因造成具体看测试代码:
 1 package org.activiti.examples.processdefinitions;
 2 
 3 import java.awt.Font;
 4 import java.awt.FontMetrics;
 5 import java.awt.Graphics2D;
 6 import java.awt.image.BufferedImage;
 7 import java.io.File;
 8 import java.io.IOException;
 9 
10 import javax.imageio.ImageIO;
11 
12 public class Test {
13 
14     /**
15      * @param args
16      */
17     public static void main(String[] args) {
18         int width = 100;
19         int height = 100;
20         String text = "爱我中华";
21         int x = 0;
22         int y = 0;
23         BufferedImage processDiagram = new BufferedImage(100100,
24                 BufferedImage.TYPE_INT_ARGB);
25         Graphics2D g = (Graphics2D) processDiagram.createGraphics();
26         Font font = new Font("宋体", Font.BOLD, 12);
27         g.setFont(font);
28         FontMetrics fontMetrics = g.getFontMetrics();
29         int textX = x + ((width - fontMetrics.stringWidth(text)) / 2);
30         int textY = y + ((height - fontMetrics.getHeight()) / 2)
31                 + fontMetrics.getHeight();
32         g.drawString(text, textX, textY);
33         File outFile = new File("d:/newfile.png");
34         try {
35             ImageIO.write(processDiagram, "png", outFile);
36         } catch (IOException e) {
37             // TODO Auto-generated catch block
38             e.printStackTrace();
39         }// 写图片
40     }
41 
42 }
43 
搞定,呵呵。
如果要部署到linux环境的话,需要将相关的字体文件传到服务器的jdk下即可。
我的本地字体文件地址是“C:\WINDOWS\Fonts\simsun.ttc”,
上传到服务器地址是:“/usr/jdk/instances/jdk1.5.0/jre/lib/fonts/simsun.ttc”

刚才试了一下,可以不用指定字体,就能解决乱码的问题,当然,我觉得应该自动和操作系统的字体相关吧。如果操作系统jdk不支持中文,也应该乱码。

只有注册用户登录后才能发表评论。


网站导航: