蜡染在SVGGraphics2D中加载SVG文件

时间:2018-07-21 11:03:26

标签: java batik

我用蜡染画svg,并保存。那工作。

但是现在我尝试加载svg文件并添加内容。

我使用此功能加载我的svg文件

private static SVGDocument loadSVGDocument(String uri) {
    String parser = XMLResourceDescriptor.getXMLParserClassName();
    SAXSVGDocumentFactory factory = new SAXSVGDocumentFactory(parser);
    SVGDocument svgDocument = null;
    try {
        //svgDocument = factory.createSVGDocument(IMAGE_SVG);
        svgDocument = factory.createSVGDocument(uri);
    } catch (IOException e) {
        System.out.println(e.getMessage());
    }
    return svgDocument;
}

,并且具有SVGGraphics2D

SVGDocument svgDocument = loadSVGDocument(TEST_SVG);
SVGGraphics2D g = new SVGGraphics2D(svgDocument);

当我调试我的SVGDocument时,所有子项都为null 当我生成图像时,它是空的,尺寸为400x400

加载SVG文件时哪里出问题了?

1 个答案:

答案 0 :(得分:0)

我每个人 我为我的案件找到了解决方案

我比较我的年龄和档案。首先认为我只有svg root和一个孩子g。 svg根不具有和高度

我去搜索宽度和高度

        Element elSVG = svgDocument.getRootElement();
    String width = elSVG.getAttribute("width");
    String height = elSVG.getAttribute("height");

并且在root之后

NodeList nodes = elSVG.getElementsByTagName("g");
    Node node = nodes.item(0);
    Element el = null;
    if(Node.ELEMENT_NODE == node.getNodeType()) {
        el = (Element)node;
    }

最后将所有内容添加到图形中

        SVGGraphics2D g = new SVGGraphics2D(svgDocument);
    g.setTopLevelGroup(el);
    g.setSVGCanvasSize(new Dimension(Integer.parseInt(width), Integer.parseInt(height)));

这仅适用于一个孩子进行svg。 对我来说现在可以。

然后我尝试添加另一个像矩形这样的想法,并且可以起作用。