现在的位置: 首页 > 综合 > 正文

JAVA下取得字符串像素宽度例子(再探讨)

2014年01月30日 ⁄ 综合 ⁄ 共 1196字 ⁄ 字号 评论关闭

我在《JAVA下取得字符串像素宽度例子》中大体介绍了判断和截取字符串的像素宽度,在使用的过程中发现了以下问题:

在windows下和在Linux下同样的条件下取得的字串宽度不同(主要是针对半角),查了N多资料也没有找到比较好的解决办法。后来灵光一闪,是不是可以找一对字体使得在windows和linux下取得的像素宽度大致相同。经测试发现windows(XP)下使用Arial,Linux下使用Luxi Sans,绝大部分字符的宽度是相同的,只有下面几个稍有差异。

○ AMVXYvxyz^    windows = linux - 1

○ ms                       windows = linux + 1

 

因此,如果server运行在Linux环境下,可以这样解决之。

原来source中

       private static Font f = new Font("Arial", Font.PLAIN, 12);

 

               // 判断是否是全角字符,半角使用英文字体,全角使用日文字体进行计算宽度
                if (tmpChar.getBytes().length == 1) {
                    chr_width = fm.stringWidth(tmpChar);
                } else {
                    chr_width = jpfm.stringWidth(tmpChar);
                }

 

⇒            private static Font f = new Font("Luxi Sans", Font.PLAIN, 12);

 

          // 判断是否是全角字符,半角使用英文字体,全角使用日文字体进行计算宽度
        if (tmpChar.getBytes().length == 1) {
                    chr_width = fm.stringWidth(tmpChar);

          if("AMVXYvxyz^".indexOf(tmpChar) > 0) {
                        chr_width -= 1;
                    } else if("ms".indexOf(tmpChar) > 0) {
                        chr_width += 1;
                    }
                } else {
                    chr_width = jpfm.stringWidth(tmpChar);
                }

 

这样Windows下和Linux下的差异就可解决了,虽然方法有点笨,但问题还是解决了。

如果有更好的方法,希望不吝赐教,共同进步。

抱歉!评论已关闭.