- 首先感谢搜索时给予启发的朋友
在前面博文中有说明。
- 字体介绍
batang.ttc中,共有4个字体:Batang, BatangChe, Gungsuh, GungsuhChe
- 渲染效果图
由图中可以看到,4行文字的英文各不相同。
- 非渲染效果图
- 测试代码
package taishan;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.io.File;
import sun.font.TrueTypeFont;
@SuppressWarnings("serial")
public class TTCFontFileTestFrame extends TFrame
{
private final static String FONT_DIR = "D:\\test-fonts";
private final static String[] FONT_FILES =
{
//"simsun.ttc",
"batang.ttc",
};
private final static int POS_OFFSET = 100;
private final static char[] TAISHAN = "泰山Office".toCharArray();
private Font[] mTestFonts;
public TTCFontFileTestFrame()
{
try
{
TrueTypeFont ttf = new TrueTypeFont(FONT_DIR+"\\"+FONT_FILES[0]);
mTestFonts = new Font[ttf.getFontCount()];
String[] names = ttf.getFullNames();
for (int i=0; i<names.length; i++)
{
Font font = Font.createFont(Font.TRUETYPE_FONT, new File(FONT_DIR+"\\"+FONT_FILES[0]), names[i]);
font = font.deriveFont(Font.PLAIN, 30);
System.out.println(font.getFamily()+", "+font.getName()+", "+font.getFontName());
mTestFonts[i] = font;
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
private void drawBoldFonts(Graphics2D g)
{
//int xunit = 20;
int yunit = 40;
for (int i=0; i<mTestFonts.length; i++)
{
if (mTestFonts[i] == null)
{
continue;
}
g.setFont(mTestFonts[i]);
int y = POS_OFFSET+i*yunit;
g.drawChars(TAISHAN, 0, TAISHAN.length, POS_OFFSET, y);
}
}
@Override
public void paint(Graphics g)
{
super.paint(g);
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
drawBoldFonts(g2d);
}
public static void main(String[] args)
{
TTCFontFileTestFrame frame = new TTCFontFileTestFrame();
frame.startTest();
}
}