【问题标题】:physical fonts java?物理字体java?
【发布时间】:2012-05-03 09:52:00
【问题描述】:

我将 ttf 文件捆绑在一个 jar 文件中,并打算将它们用作渲染文本的物理字体。

我在网上看到的所有示例代码如下:

InputStream is=Essai.class.getResourceAsStream(resourcePath);
Font f=Font.createFont(fontFormat, is);

我对这段代码有两个问题:

  • 首先,一种字体,比如 DejaVu,包含 4 个不同的 ttf 文件,每种样式 1 个(常规、粗体、斜体和粗斜体);从一个 ttf(4 个中的任何一个)创建字体就足够了吗?

  • 其次,我见过的代码在创建字体后都没有关闭流,这让我想知道这是故意的吗?也许创建的字体(稍后将在本地 GraphicsEnvironment 中注册)需要流保持打开状态?

    createFont() 方法的 javadoc 说:“这个方法不会关闭 InputStream。”

    所以我的第二个问题是我应该在创建字体后关闭流,还是保持打开状态?

【问题讨论】:

  • 感谢您花时间回答。我不同意您的编辑,我需要将第二个问题标记在列表的第二个元素下,因为......这是第二个问题:-)

标签: java fonts truetype embedded-fonts


【解决方案1】:
  1. 我不相信加载一个变体会加载所有变体。但是,这没关系。 Java 可以使用粗体+斜体的任意组合创建Font 变体。首先,我只会将标准 Font 放在 Jar 中。
  2. 关闭流。为了简洁起见,许多示例偷工减料(尽管这通常是个坏主意)。

【讨论】:

  • 好的,没问题,我会记住这一点的 :) “我不相信加载一个变体会加载所有变体。”这是真的,我刚刚测试过。我还测试了 java 创建的变体是否与 ttf 文件中定义的变体相同,并发现它们不一样。从相应的 ttfs 加载的变体看起来更“性感”! :P。现在的问题是它们在 GraphicsEnvironment 中以相同的名称注册,这意味着我只能通过 Font 构造函数正确使用其中一个。但无论如何,我都会找到管理它的方法。再次感谢您的回答:) 我会标记它已解决
猜你喜欢
  • 1970-01-01
  • 2019-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多