如何从java系统字体中获取ttf字体数据
我在系统上安装了一些ttf字体。如何从java系统字体中获取ttf字体数据
我得到使用
GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames()
该列表这不仅ttf字体,但我想所有字体。 最终如果我使用:
Font.decode(fontName)
我可以得到awt.Font实例。
据我所知字体没有连接到实际的PhysicalFont,所以 我该如何检索ttf字体文件,或从该ttf文件的字节数据从该列表中的字体或从awt.Font?我试图检索一个物理字体数据或类似的东西。这些数据应该是正确的?
的原因,我需要它是为了产生BitmapFont
这有可能在Windows,OSX和Linux工作与libGDX FreeTypeFontGenerator最终使用。
这是不可能的。您可以做的最好的是using reflection,但它只能与Oracle JRE一起使用并访问私有API,因此可能会破坏任何新的Oracle版本。
你也许可以写一个native lib枚举的字体和他们的文件。
谢谢你回答Nate!我想是的,这是困扰。我目前的解决方案是在第一次运行时“预先缓存”字体名称映射 - >文件名,然后只更新该数据。它很慢,也许以后我可以回到这个,并且做一个本地库来做到这一点。但是,我的意思是。奇怪的是,它是这样的。 –
正如@NateS指出的那样,我想要达到的目标不是完全可能的。
所以我只是分享我在我的情况下使用,现在的解决方案:
这是本类: FontManager.java
这使得现有的ttf文件,在已知的系统中的位置预缓存根据您的系统,然后为fontName-> fontFile类型的连接创建一个Map。然后进入首选项,并在下次运行时加载。
已知问题
- awt.Font有一个已知的bug,是不是能够读取OSX系统的一些TTF字库系列名称(主要是一些阿拉伯和中国的字体)
- 没有在Linux上测试,可能会失败。
- 如果您有许多字体,则第一次运行可能会很慢。
这将是理想的写一个本地库,但时间的本质......
如果还有人对[FontManager.java]感兴趣(https://github.com/UnderwaterApps/overlap2d/blob/master/overlap2d/src/com/uwsoft/editor/proxy/FontManager.java) – Metaphore
这类似于http://*.com/questions/5652344/how-can-i-使用-a-custom-font-in-java – John
是不是他试图做相反的事情? (他有ttf,并试图把它放到系统中,而我需要一个系统字体并从中生成ttf)? –
你只是想从文件中加载一个字体吗? – John