浮动字体大小在 OpenJDK 中不起作用

Posted

技术标签:

【中文标题】浮动字体大小在 OpenJDK 中不起作用【英文标题】:Float font size is not working in OpenJDK 【发布时间】:2018-11-26 12:34:46 【问题描述】:

。 似乎在计算字符串边界时字体大小被四舍五入 例如11.4 -> 11 & 11.5 -> 12 但是在 oracle jdk 中它的工作完美。

知道如何在 OpenJDK 8 中解决这个问题吗?

计划:

    import java.awt.Font;
    import java.awt.font.FontRenderContext;
    import java.awt.geom.Rectangle2D;

    public class TestFont 
        public static void main(String  []args)
            FontRenderContext frc = new FontRenderContext(null, true, true);
            Font font = new Font("Courier New",0,(int)11.5);
            font = font.deriveFont(11.5f);
            Rectangle2D bound = font.getStringBounds("PAGE",0,4, frc);
            System.out.println("Char width:"+ bound.getWidth() / 4);
            Font2D font2D = FontUtilities.getFont2D(font);
            System.out.println("Font2D:" + font2D.toString());
        
    

结果:

OpenJDK 7,8,9:
Char width:7.201171875
Font2D:** TrueType Font: Family=Courier New Name=Courier New style=0 fileName=C:\windows\Fonts\cour.ttf

Oracle JDK 8:
Char width:6.901123046875
Font2D:** TrueType Font: Family=Courier New Name=Courier New style=0 fileName=C:\windows\Fonts\cour.ttf

【问题讨论】:

您能否在每种情况下显示完整的字体定义:打开 jdk 和 oracle 没有可用的相同字体,因此如果找不到您的字体 jdk 将使用可以完全使用的默认字体不同。 我在结果中添加了字体信息。两者都使用相同的字体文件。在调试时我注意到两个 jdk 都使用不同的字体缩放器 Oracle JDK:T2KFontScaler Open JDK:FreetypeFontScaler 我不确定这是否会影响 Fonts slightly wider in OpenJDK vs OracleJDK的可能重复 不幸的是,我也用 Oracle JDK(jdk-8, jdk-8u5, jdk-8u102, jdk-8u201) 做了很多测试,同样,浮动大小没有考虑。每个小于 11.5 的值都舍入为 11,大于 11.5 的值舍入为 12。我以前用 Graphics2D 编写文本。有人找到解决方案了吗? 【参考方案1】:

我就是这么想的^^。这是与您的问题相关的主题:

Fonts slightly wider in OpenJDK vs OracleJDK

【讨论】:

以上是关于浮动字体大小在 OpenJDK 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

浮动在弹性容器中不起作用

可扩展的浮动操作按钮(使用堆栈)在颤动中不起作用

自定义字体在 Firefox 中不起作用。

自定义字体在 React Native 中不起作用

Google 字体 - 可变字体在 Windows 浏览器中不起作用

系统字体在 iOS 模拟器中不起作用