如何从包含多个TTF文件的字体系列中导入自定义java.awt.Font?(包括一个示例)
我知道您可以使用如下方式在Java中导入字体:如何从包含多个TTF文件的字体系列中导入自定义java.awt.Font?(包括一个示例),java,fonts,import,awt,Java,Fonts,Import,Awt,我知道您可以使用如下方式在Java中导入字体: 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
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)
以获得所需的样式和大小
示例 但现在让我们以font
Consolas
为例,这里有四个TTF文件:
(普通)consola.ttf
(粗体)consolab.ttf
(斜体)consolai.ttf
(粗体和斜体)consolaz.ttf
consola.ttf
,然后使用font.deriveFont(font.BOLD,20)
与使用consolab.ttf
不同,因为普通字体被简单地转换为粗体字体
示例图片
新字体(“Consolas”,Font.BOLD,20)
(作为旁注,如果系统上安装了字体,如果使用deriveFont(font.bold);
,也会得到正确的粗体字体):consola.ttf
,与createFont
和派生的粗体字体一起导入(两种字体的大小均为20,如上例所示):当安装时,这不是一个问题,但我不希望其他人有自定义字体,所以我想将TTF放入jar文件中,以便在初始化期间通过
getResourceAsStream(path)
导入它们
是否有办法导入所有相关的TTF,然后只需调用
新字体(“自定义字体名称”、字体样式、字体大小)编码>以便它像已安装的字体一样使用(图1),并且看起来不像派生的“假”粗体字体(图2)?我不确定到底是什么问题。你有你所有的TTF文件,你必须导入和注册它们。以下测试使用的是我的系统上未安装的DejaVu SAN字体
测试1
这是一张带有普通(dvs
)和派生的bold(dvs.deriveFont(Font.bold)
)字体的图像
测试2
这是一张带有普通(dvs
)和真正的粗体(dvsb
)字体的图像
您可以通过查看font2DHandle
确认使用了正确的文件
我还测试了italic和粗体italic,这两种方法与Font#createFont(int,InputStream)
方法一样有效
上述方法之所以有效,是因为字体是按其全名映射的(例如,Arial、Arial粗体等),所以只要您的字体名称正确,您就可以注册一个家族的多个成员。超过2周,但仍然没有答案:(好问题,我正在寻找这个问题的答案。是的,遇到了类似的问题。我知道有点晚了,但ConsoleAS中的字体系列名称不同,对吗?
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);
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);