使用某种字体,我使用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.7 pt(而非 10.7 pt,就像我使用上面的Java字体指标计算的那样)。
任何想法
到目前为止我尝试过的事情:
font.getNumGlyphs()
的字形矢量等 - 仍然获得相同的字体指标值FontMetrics
getLeading()
'方法
答案 0 :(得分:10)
Zarkonnen并不值得他的赞成,因为他在正确的路线上。许多Java字体似乎在他们的领导时返回零,也许他们不应该。也许它低至this bug:我不知道。将这个空格重新放入其中似乎取决于你。
印刷线高度通常定义为上升+下降+前导。上升和下降是从角色所在的基线向上和向下测量的,而前导是一条线的下降和下面一条线的上升之间的空间。
但领先并不固定。您可以在大多数Word处理和印刷软件中设置领先地位。 Word称之为行间距。最初的问题可能是询问Microsoft Word如何计算其单行间距。微软的recommendations for OpenType fonts似乎暗示不同平台上的软件以不同的方式计算它。 (也许这就是Java现在返回零的原因?)
谷歌搜索的一小部分似乎表明,领先的经验法则是120% of ascent+descent for single-line spacing,或固定点间距;说所有线之间领先2分。在没有任何硬性或快速规则的情况下,我会发现,我会说这可归结为您所呈现的文本的易读性,您应该选择您认为最佳的文本。
答案 1 :(得分:3)
Word和OO是否包括行之间的空格,而Java不是?
所以在Word / OO中,你的数字是Ascent + Descent + Whitespace,而在Java中你只有Ascent + Descent?