Java 中哪个 API 返回正确的字体宽度?
Java 的哪个 Font API 返回正确的宽度?我们当前使用
font.getStringBounds( "the string", frc ).getWidth();
这会在图像和显示上返回正确的值。但是用 Java SE 6 打印是错误的。用 Java 7 一切都是正确的。差异非常小。但是我们在一行的末尾丢失了一个“i”。我们在打印时收到完全相同的值。但文本在打印图形上需要更多空间。
我们使用抗锯齿和分数指标。
我知道有不同的API。但推荐的 API 是什么?
Which Font API of Java returns the right width? We use currently
font.getStringBounds( "the string", frc ).getWidth();
This return the right values on images and display. But it is wrong on printing with Java SE 6. With Java 7 all is correct. The difference is very small. But we lost one "i" at end of a line. We receive on printing exact the same values. But the text need more space on a printing graphics.
We use anti alias and fractional metrics.
I know there are different API. But what is the recommended API?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您有打印机的 Graphics 对象吗?如果您测试这段代码,在这种情况下会发生什么?这就是我用来测量宽度的东西:
Do you have a Graphics object to the printer? What does in that case happen if you test this code? It's what I'm using to measure width:
TextLayout
可能是最通用的方法。一些相关的示例可以在此处的问题和答案中找到:Java2D Graphics anti-别名。
如何计算文本在 JTextArea 中所占的行数(以及每行中的列数)?
用省略号截断字符串的理想方法。
TextLayout
is probably the most versatile approach. Some related examples may be found among the questions and answers here:Java2D Graphics anti-aliased.
How to calculate the number of rows (and columns in each row) a text takes in a JTextArea?
Ideal method to truncate a string with ellipsis.
Java 默认舍入所有字体规格,因为它假设您正在尝试渲染到屏幕,您需要扩展 FontRenderContext 并打开 FractionalMetricsHint,如下所示。然后,使用它来传递字体渲染上下文。
Java rounds all font metrics by default, because it assumes you are attempting to render to a screen, what you need to extend FontRenderContext and turn on FractionalMetricsHint as shown below. Then, use that to pass in a font render context.