如何使用 Apache Batik SVG 1.8 将形状渲染属性设置为 crispEdges

How to set the shape rendering attribute to crispEdges using Apache Batik SVG 1.8

我正在尝试让 Apache Batik 1.8 输出

shape-rendering="crispEdges"

而不是默认值

shape-rendering="auto"

在根 <svg /> 节点中。

我发现了 SVGConstants.SVG_SHAPE_RENDERING_ATTRIBUTE and SVGConstants#SVG_CRISP_EDGES_VALUE,但我不确定如何将这些属性设置为 SVGGraphics2D 实例。

我曾尝试过类似起诉 SVGGraphics2D(名为 SVGGraphics2D)的事情:

//svgGraphics.setRenderingHint(SVGRenderingHints.SVG_SHAPE_RENDERING_ATTRIBUTE,
//                             SVGRenderingHints.SVG_CRISP_EDGES_VALUE);

然而这是 java.awt.RenderingHints SVGGraphics2D.setRenderingHints 期望的。

我也试过:

svgGraphics.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
    svgGraphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
    svgGraphics.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION, RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
    svgGraphics.setRenderingHint(RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY);

但是 none 在输出 SVG 文件中将 render-style 属性更改为 'crispEdges'。

(我目前正在研究 Document,希望我可以通过 XML/strings 手动更改属性。我也发现了 a few related classes in the source code,但我不能貌似现货不错example/test)

render-style 更改为 crispEdges 最优雅的方法是什么?

我目前找到的解决方法是:

Element tlg =  svgGraphics.getTopLevelGroup();
tlg.setAttribute("shape-rendering","crispEdges");
svgGraphics.setTopLevelGroup(tlg);

图形现在呈现清晰,但是,如代码所示,该属性作为样式应用于顶级 <g/> 元素。

我期待看到更简洁的实现。

我能够通过 Graphics2D 界面使它正常工作。根据 Batik code,以下 Graphics2D 代码将 shape-rendering="crispEdges" 添加到 SVG:

g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);