您的位置:首页 > 编程语言 > Java开发

Java字體相关知识点(等宽字体)

2017-12-12 17:06 316 查看

1.字體格式ttc和ttf

     两者的不同处是 TTC 档会含超过一种字型,例如繁体 Windows 的 Ming.ttc 就包含细明体及新细明体两种字型 (两款字型不同处只是英文固定间距),而 TTF 就只会含一种字型.

    TTC是几个TTF合成的字库,安装后字体列表中会看到两个以上的字体。两个字体中大部分字都一样时,可以将两种字体做成一个TTC文件,现在常见的TTC中的不同字体
  ,汉字一般没有差别,只是英文符号的宽度不一样,以便适应不同的版面要求。

   在window中,打開字體,ttc的字體,在界面上可看到“下一個“”來查看包含的不同字型。

2.Java中判斷字體是否等寬:

      主要知識點:輸入一段英文字母"abcdefghijklmnopkrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" ,來判斷其中的每個字型的寬度是否相同

      Font.createGlyphVector  -> GlyphVector 字符串的字形

     GlyphVector.getGlyphMetrics  ->GlyphMetrics 單個字符的字形

     GlyphMetrics.getAdvance ->int :

          从该字形原点沿基线(可以是垂直的,也可以是水平的)到下一个字形原点的距离

         根據每個字符的這個值是否相同來判斷是否等寬。

    參考Java代碼:

        public static boolean isSameCharSize(Font font,String checkString){
if(checkString.length()<=1){
return true;
}

boolean isSameCharSize = true; 
BufferedImage bi = new BufferedImage(500,600,BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bi.createGraphics();
g2.setFont(font);

FontRenderContext frc = g2.getFontRenderContext();
 
StringCharacterIterator sci = new StringCharacterIterator(checkString);
GlyphVector gv = font.createGlyphVector(frc, sci);

int beginIndex = sci.getBeginIndex();
int endIndex = sci.getEndIndex();
 
GlyphMetrics metrics = gv.getGlyphMetrics(beginIndex);

float baseAdvance = metrics.getAdvance();
TestLog.nlog("baseAdvance="+baseAdvance);
for(int glyph_i = 1; glyph_i < endIndex; glyph_i++){
metrics = gv.getGlyphMetrics(glyph_i);
float cmpAdvance = metrics.getAdvance();
if(cmpAdvance != baseAdvance){
isSameCharSize = false;
break;
}
}
return isSameCharSize;
}

3.如何從ttc字體文件中獲取具體ttc字體名稱:

     使用itext開源包:

     String[] ttcNames = BaseFont.enumerateTTCNames("c:\window\font\mingliu.ttc")

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  itext 字体