使用 Batik 的 SVGGraphics2D 时,如何设置字体系列而不是字体?

Kra*_*aal 5 java batik

我目前使用 Batik 的 SVGGraphics2D 有以下代码:

...
final SVGGraphics2D svgGraphics2D = new SVGGraphics2D(svgGeneratorContext, false);
svgGraphics2D.setSVGCanvasSize(new Dimension(width, height));
svgGraphics2D.setFont(font);
...
Run Code Online (Sandbox Code Playgroud)

因此,如果在执行代码的系统上font可用Font,则将正确的属性添加到生成的 SVG 文件中。

但是,如果缺少字体(例如 Linux 机器上的“Verdana”),则会使用(font-family:'Dialog'添加)默认字体。

因此,我想传递一个字体系列而不是指定字体,以便font-family="DejaVu Sans,Verdana,Geneva,sans-serif"在生成的 SVG 中使用。知道如果我没有错,API 只接受Font参数,我怎么能做到这一点?

我希望有比使用 xslt 转换 xml 输出更简单的方法。

先感谢您。

Joo*_*gen 2

如果您有(许可的)字体文件(例如资源),您可以这样做:

    InputStream is = SomeClass.getResourceAsStream("/fonts/DejaVu Sans.ttf");
    Font font = Font.createFont(Font.TRUETYPE_FONT, is);
    GraphicsEnvironment.getLocalGraphicsEnvironment();
    ge.registerFont(font);
Run Code Online (Sandbox Code Playgroud)

这是使用自己的字体交付应用程序的通用方法。

然后,您可以在 SVG 中嵌入独立 svg 文件的确切字体。

我想知道这是不可能的:

font-family="'DejaVu Sans',Verdana,Geneva,sans-serif"
Run Code Online (Sandbox Code Playgroud)

因为这就是 CSS 的方式。