gpt4 book ai didi

java - Java 中的字体指标不正确/缺失?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:14:46 29 4
gpt4 key购买 nike

使用某种字体,我使用Java的FontLayout来确定它的上升、下降和行距。 (参见 Java 的 FontLayout 教程 here)

在我的具体案例中,我使用的是 Arial Unicode MS,字体大小为 8。使用以下代码:

    Font font = new Font("Arial Unicode MS", 0, 8);
TextLayout layout = new TextLayout("Pp", font,
new FontRenderContext(null, true, true));
System.out.println( "Ascent: "+layout.getAscent());
System.out.println( "Descent: "+layout.getDescent());
System.out.println( "Leading: "+layout.getLeading());

Java 为我提供了以下值:

    Ascent: 8.550781
Descent: 2.1679688
Leading: 0.0

到目前为止一切顺利。但是,如果我使用这些值的总和作为各行文本的行间距,这与 OpenOffice、Microsoft Word 等中使用的行间距有很大不同:它更小。使用默认单行间距时,Word 和 OO 的行间距似乎约为 13.7pt(而不是像我使用上述 Java 字体指标计算的那样10.7pt)。

任何想法

  1. 这是为什么?
  2. 我是否可以通过某种方式访问​​ Word 和 OpenOffice 似乎正在访问的字体信息,从而导致这种不同的行间距?

到目前为止我尝试过的事情:

  • 使用 font.getNumGlyphs() 等将所有字形添加到字形 vector - 仍然获得相同的字体规范值
  • 按照描述使用多行 here - 我得到的每一行都具有与上述相同的字体指标。
  • 使用 FontMetrics 的方法,例如 getLeading()

最佳答案

Zarkonnen 不应该投反对票,因为他的路线是正确的。许多 Java 字体似乎返回零作为它们的前导,而它们也许不应该返回。也许是下降到this bug : 我不知道。把这个空格放回去似乎取决于你。

排版行高通常定义为上升+下降+行距。 ascent 和 descent 是从角色所在的基线向上和向下测量的,leading 是一条线的下降线和下面的线的上升线之间的空间。

alt text

但是领先不是固定的。您可以在大多数文字处理和排版软件中设置行距。 Word 将此称为行间距。最初的问题可能是询问 Microsoft Word 如何计算其单行间距。微软的recommendations for OpenType fonts似乎表明不同平台上的软件计算方式不同。 (也许这就是 Java 现在返回零的原因?)

快速谷歌搜索似乎表明领导的经验法则是 120% of ascent+descent for single-line spacing , 或固定点间距;说所有行之间领先 2pts。在我找不到任何硬性或快速规则的情况下,我会说这归结为您所呈现的文本的易读性,您应该只使用您认为最好的内容。

关于java - Java 中的字体指标不正确/缺失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/925147/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com