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")
相关文章推荐
- java的一些相关知识点(1)
- [置顶] Java知识点相关文章收集(持续更新)
- Java同步、异步相关知识点
- Java相关知识点(三)---java基础类库
- java中内部类的相关知识点总结
- Java线程进程相关知识点
- java中string的相关知识点
- java基本的程序设计结构之printf,NumberFormat,java.util.Scanner相关的知识点与实例
- Java同步、异步相关知识点
- 关于java的一些相关知识点
- java--异常,泛型相关知识点
- java基础71 XML解析中的【DOM和SAX解析工具】相关知识点(网页知识)
- java知识点——数据库JDBC相关
- Ubuntu 9.10 下OpenJDK、SUN JAVA环境及中文字体相关问题
- java线程相关知识点整理
- Java知识点<15> 线程并发相关 - 全面整理
- java--流程控制、数组、面向对象相关备忘知识点
- JAVA基础知识点梳理六:static相关
- [转载]Java同步、异步相关知识点
- Java同步、异步相关知识点