Java Graphics2D绘制的文本精确导出到SVG
我正在尝试将文本导出到SVG文件,并使其看起来类似于使用java Graphics2D绘制的内容。精度对于我的应用程序至关重要,这意味着Java和SVG中的文本都需要对齐。SVG和Graphics2D文本都有相同的字体(系列、样式、大小),我可以肯定地看到生成的文本是不同的
示例:字符看起来相同,但由于某些原因,“T”和“e”之间的间距不同
黑色-SVG文本
蓝色-Java绘制的文本
使用图形绘制文本的代码2d
Graphics2D g2 = (Graphics2D) g;
String text = "Test";
Font font = new Font("Arial", Font.PLAIN, 33);
g.setFont(getTextFont());
g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
g.drawString("Test", 0.f, 0.f);
SVG文本
<text fill="rgb(0,115,198)" font-family="Arial" font-size="33.0">
<tspan dy="0" x="0">Test</tspan>
</text>
你知道如何更改SVG(在Adobe中查看)或Java文本以使它们显示完全相同的内容吗
更新:
转动字距确实会使它更像是一种补色,但并不完美
示例:f和A之间的间距似乎不同。但剩下的文字排成一行
代码
public void draw() {
Graphics2D g2 = (Graphics2D) g;
String text = "Test";
Font font = new Font("Arial", Font.PLAIN, 33);
Map<TextAttribute, Object> map = new Hashtable<TextAttribute, Object>();
map.put(TextAttribute.KERNING, TextAttribute.KERNING_ON);
font = font.deriveFont(map);
g.setFont(font);
g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
g.draw(getTextShapeByLine(text);
}
public Shape getTextShapeByLine(String line) {
AttributedString attstring = new AttributedString(line);
attstring.addAttribute(TextAttribute.FONT, getTextFont());
FontRenderContext frc = new FontRenderContext(null, true, true);
TextLayout t = new TextLayout(attstring.getIterator(), frc);
return t.getOutline(null);
}
这将使用字距绘制文本,并允许在图形上下文上进行缩放。但是,现在某些字符之间的间距(空白)有时会弄乱
共 (0) 个答案