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

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")


   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值