java.awt.Font.getStringBounds在openJdk11和openJdk8上给出了不同的结果
我需要以编程方式呈现PDF文档。我使用的是java.awt.Font.getStringBounds在openJdk11和openJdk8上给出了不同的结果,java,openjdk-11,Java,Openjdk 11,我需要以编程方式呈现PDF文档。我使用的是itext7library和openJdk8。所有操作都很好,但我决定在openJdk11上更改openJdk8,并使用移动的y坐标位置渲染我的文档。 结果是在openJdk8上获得的,结果是在openJdk11上获得的 这是我的代码: public void renderText(Font font, String text, double x, double y, FontRendererContext ctx) { Rectangle2D
itext7
library和openJdk8。所有操作都很好,但我决定在openJdk11
上更改openJdk8
,并使用移动的y坐标位置渲染我的文档。
结果是在openJdk8
上获得的,结果是在openJdk11
上获得的这是我的代码:
public void renderText(Font font, String text, double x, double y, FontRendererContext ctx) {
Rectangle2D rect = font.getStringBounds(text, ctx); // In this place I get a different result.
pdf.addText(text, x, (pageHeight - y - rect.getY()));
}
我提供的测试示例再现了这个问题:
public static void main(String[] args {
final String text = "Simple text";
// load font
final InputStream arialIs = Main.class.getClassLoader().getResourceAsStream("fonts/arial.ttf");
Font font = Font.createFont(Font.TRUETYPE_FONT, arialIs);
GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(font);
Font newFont = font;
newFont = newFont.deriveFont(14);
// getting measuring
final java.awt.geom.AffineTransform transform = newFont.getTransform();
FontRenderContext frc = new FontRenderContext(transform, true, true);
final Rectangle2D stringBounds = newFont.getStringBounds(text, frc);
System.out.println(stringBounds);
}
如何在
openJdk11
上修复它?包含一个。rect
的值有什么不同?@samabcde我总是得到这个结果java.awt.geom.Rectangle2D$Float[x=0.0,y=-0.0,w=0.0,h=0.0]
@samabcde我添加了一个可重复的示例。如果你必须复制,你应该使用openJdk11这是我用openjdk版本“11”2018-09-25运行的结果:java.awt.geom.Rectangle2D$Float[x=0.0,y=-0.90527344,w=4.946289,h=1.1499023]
,这是你所期望的吗?