同事报怨,泰山OFFICE可用字体太少。吾当时就奇怪了:就那么几个字体,让吾给汝变出来?同事说,别的软件字体多啊。吾视之……吾错了。
于是了解了一下,原来字体文件(TrueType)有两种:一种是单一的字体(TTF),还有一种是多种字体(TTC)。Java允许从文件中产生字体:
Font.createFont(Font.TRUETYPE_FONT, new File("D:\\simsun.ttc"));
使用FontForge可知其中有两个字体,参数中无法指定。这怎么办?于是搜索了一番,得到这样的信息:
Java支持TTC字体格式,但使用Font.createFont()只能获取TTC文件中定义的第一种字体。目前,无法指定字体索引。
sun.font.SunFontManager.createFont2D(),调用时new TrueTypeFont()(大约是2486),fontIndex始终为零。即:font2D = new TrueTypeFont(fontFilePath, null, 0, true);
那么,是不是改了就对了呢?咱有泰山JDK8,想改还不容易?随口一句:有自己的基础软件,真的好方便啊。先改成1试试。
产生字体代码
testFonts[0] = new Font("宋体", 0, 16); testFonts[1] = Font.createFont(Font.TRUETYPE_FONT, new File(FONT_DIR+"\\"+FONT_FILES[0])); // 指定大小 testFonts[1] = testFonts[1].deriveFont(Font.PLAIN, 16);
绘制结果
从绘制效果来看,完全一样。这个结果是不是对的呢?目前无法确认。
字体名的变化
System.out.println(f.getFamily()+", "+f.getName()+", "+f.getFontName());
得到的结果都是:新宋体。这说明JDK确实是能处理TTC。