我必须在我的应用程序中使用Noto Sans CJK字体。 但是,当我调用下面的方法时,初始化需要10秒钟。
Font font = //Noto Sans CJK font
JComponent.getFontMetrics(An instance of Noto Sans CJK font);
我可以解决此延迟问题吗?如果该方法可以解决此问题,则代码可能会很复杂(就像实现FontMetrics一样,我不知道如何)。
请不要建议我将otf字体转换为ttf字体。我无法转换它,因为字体工具说它是字母字体,甚至无法加载unicode字形。另外,我必须在应用程序中使用另一种otf字体。而且我不会使用已经转换的版本。
如果您可以使用Java代码解决此问题,我想使用此方法。
如果任何Unicode otf字体都可以转换为ttf,我将使用该工具(但必须免费,不得试用。完全免费)。请告诉我如何将otf转换为ttf。我尝试了网站和fontforge。即使此字体为7MB,两者都返回7KB字体。
我英语不好。抱歉。
答案 0 :(得分:0)
也许您应该提供逐步说明来重现您的问题。
我在系统上进行了跟踪。
NotoSansCJKjp-Regular.otf
编译示例代码
$ javac NotoFont.java
运行已编译的代码
$ time java NotoFont
在我的系统上执行时间不到一秒钟。
以上运行的输出
java.awt.Font[family=Noto Sans CJK JP Regular,name=Noto Sans CJK JP Regular,style=plain,size=10]
real 0m0.522s
user 0m0.565s
sys 0m0.056s
NotoFont.java
import java.awt.Font;
class NotoFont {
public static void main(String[] args) {
Font noto = new Font("Noto Sans CJK JP Regular", Font.PLAIN, 10);
System.out.println(noto);
}
}
编辑一个示例,可以从Jar中读取字体文件。该字体未安装在系统上。
假设以下结构。
build/fonts/NotoSansCJKjp-Regular.otf
dist/
NotoFont.java
NotoFont.java
import java.awt.*;
import java.io.*;
import java.swing.*;
class NotoFont {
private void run() throws FontFormatException, IOException {
try (InputStream is = this.getClass().getResourceAsStream("/fonts/NotoSansCJKjp-Regular.otf")) {
Font baseFont = Font.createFont(Font.TRUETYPE_FONT, is);
Font noto = baseFont.deriveFont(Font.PLAIN, 10);
System.out.println(noto);
FontMetrics metrics = new JPanel().getFontMetrics(noto);
System.out.println(metrics);
}
}
public static void main(String[] args) throws FontFormatException, IOException {
new NotoFont().run();
}
}
编译代码
$ javac -d build/ NotoFont.java
创建罐子
$ jar cf dist/notofont.jar -C build/ .
检查Jar内容
$ cd dist/
$ jar tf notofont.jar
META-INF/
META-INF/MANIFEST.MF
NotoFont.class
fonts/
fonts/NotoSansCJKjp-Regular.otf
运行代码
$ time java -cp notofont.jar NotoFont
以上运行的输出
java.awt.Font[family=Noto Sans CJK JP Regular,name=Noto Sans CJK JP Regular,style=plain,size=10]
sun.font.FontDesignMetrics[font=java.awt.Font[family=Noto Sans CJK JP Regular,name=Noto Sans CJK JP Regular,style=plain,size=10]ascent=9, descent=3, height=12]
real 3.02
user 2.11
sys 0.84