Java中的字形下降

3

有没有现成的解决方案可以在Java中处理字形漏洞问题?例如,我们的设计师决定Calibri是最符合我们需求的字体,但如果我指定Calibri,它自然无法渲染那些在该字体中没有匹配字形的字符。这种情况下,我需要它转而使用第二个指定的字体,如果所有都不行,再使用Java的逻辑字体。

是否有人想出了解决方法,可以将其插入到现有的Swing组件中,而不必为整个项目编写自定义Swing组件?

这是一个非常旧的项目,构建自定义图形组件不是可行的解决方案。

1个回答

1
这不是一个基于代码的解决方案,可能帮助不大,因为它需要每个用户在本地安装一个文件,但以防万一...您可以在JRE安装的特殊目录中添加备用字体。来自Java文档

用户可以将物理字体作为回退字体添加到Java 2D渲染中使用的逻辑字体中,方法是将其安装在JRE的lib/fonts/fallback目录中。


这更多是针对逻辑的后备,但如果我选择的字体缺少字符,有没有办法使后备转向逻辑? - melladh
我明白你的意思。回退目录仅适用于逻辑字体,这限制了其实用性。那么使用HTML来强制指定不寻常字符的字体如何?例如,您可以使用new JLabel("<html>Testing: <font face='Dialog'>\u2588 \u2592 \u259a \u259e</font></html>")代替new JLabel("Testing: \u2588 \u2592 \u259a \u259e") - VGR
不幸的是,我需要一个几乎隐形的解决方案来插入更多内容 - 字符并不真正事先知道,而更改每个单独的Swing组件将需要很长时间,并且会导致脆弱的解决方案,因为未来的程序员模仿它不如正常制作标签。 - melladh
我能想到的唯一解决方案就是创建一个自定义的Swing外观。但愿我能想到一些不会带来太多麻烦的解决方案。我不认为你能告诉你的设计师,除了美学之外,Calibri并不实用,因为它不支持应用程序所需的所有字符。 - VGR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接