[英]How to import a custom java.awt.Font from a Font family with multiple TTF files? (An example is included)
我知道您可以使用以下内容导入Java中的Font:
File file = new File(fontPath);
Font font = Font.createFont(Font.TRUETYPE_FONT, file);
// alternative:
// Font font = Font.createFont(Font.TRUETYPE_FONT, new FileInputStream(file));
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(font);
然后你会使用例如font.deriveFont(Font.PLAIN, 20);
获得所需的风格和大小。
例
但现在让我们看一下Consolas
字体的例子,那里有四个TTF文件:
consola.ttf
(Plain) consolab.ttf
(Bold) consolai.ttf
(Italic) consolaz.ttf
(Bold&Italic) 当然你可以用上面consola.ttf
的方法导入consola.ttf
,然后使用font.deriveFont(Font.BOLD, 20);
是不一样的使用consolab.ttf
因为普通的字体简单地转化为看起来像一个大胆的字体。
示例图片
new Font("Consolas", Font.PLAIN, 20);
安装了new Font("Consolas", Font.PLAIN, 20);
和new Font("Consolas", Font.BOLD, 20);
(作为旁注,如果您在系统上安装了字体,那么如果使用deriveFont(Font.BOLD);
您也会获得正确的粗体字体deriveFont(Font.BOLD);
): consola.ttf
,使用createFont
和派生的粗体字体导入(两者的大小均为20,如上例所示): 好吧,安装时没问题,但我不希望别人有自定义字体,所以我想把TTF放到jar文件中,以便我可以在初始化期间通过getResourceAsStream(path)
导入它们。
有没有办法导入所有相关的TTF,然后只需调用new Font("Custom Font Name", fontStyle, fontSize);
所以它像安装的字体一样使用(图1),它看起来不像派生的'假'粗体字(图2)?
我不确定究竟是什么问题。 你得到了所有的TTF文件,你必须导入并注册它们。 以下测试使用未安装在我的系统上的DejaVu Sans字体。
Font f = Font.createFont(Font.TRUETYPE_FONT, new File("dvs.ttf"));
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(f);
Font dvs = new Font("DejaVu Sans", Font.PLAIN, 20);
这是一个带有plain( dvs
)和派生粗体 ( dvs.deriveFont(Font.BOLD)
)字体的图像。
Font f = Font.createFont(Font.TRUETYPE_FONT, new File("dvs.ttf"));
Font fb = Font.createFont(Font.TRUETYPE_FONT, new File("dvsb.ttf"));
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(f);
ge.registerFont(fb);
Font dvs = new Font("DejaVu Sans", Font.PLAIN, 20);
Font dvsb = new Font("DejaVu Sans", Font.BOLD, 20);
这是一个普通( dvs
)和真正粗体 ( dvsb
)字体的图像。
您可以通过查看font2DHandle
来确认使用了正确的文件。
我还测试了斜体和粗体斜体 ,并且与Font#createFont(int, InputStream)
方法一样有效。
上面的方法是有效的,因为字体是按其全名映射的(例如Arial,Arial Bold等),因此只要您的字体名称正确,您就可以注册一个系列的多个成员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.