java – 当使用Batik的SVGGraphics2D时,如何设置font-family而不是font?

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

...
final SVGGraphics2D svgGraphics2D = new SVGGraphics2D(svgGeneratorContext, false);
svgGraphics2D.setSVGCanvasSize(new Dimension(width, height));
svgGraphics2D.setFont(font);
...

因此,如果font是执行代码的系统上的可用字体,则会将正确的属性添加到生成的SVG文件中.

但是,如果字体丢失(例如Linux盒子上的“Verdana”),则使用默认字体(font-family:’Dialog’).

因此,我想传递一个font-family,而不是指定一个字体,以便在生成的SVG中使用font-family =“DejaVu Sans,Verdana,Geneva,sans-serif”.我怎么能实现这一点,如果我没有错,API只接受字体参数?

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

先感谢您.

最佳答案 如果你有一个(许可的)字体文件,比如资源,你可以这样做:

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

这是使用自己的字体提供应用程序的一般方法.

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

我不知道这样做是不可能的:

font-family="'DejaVu Sans',Verdana,Geneva,sans-serif"

因为这将是CSS的方式.

点赞