Java 蜡染在SVGGS2D中加载SVG文件

Java 蜡染在SVGGS2D中加载SVG文件,java,batik,Java,Batik,我使用蜡染绘制svg,并保存它。那工作 但是现在我尝试加载我的svg文件并添加一些东西 我使用此功能加载svg文件 private static SVGDocument loadSVGDocument(String uri) { String parser = XMLResourceDescriptor.getXMLParserClassName(); SAXSVGDocumentFactory factory = new SAXSVGDocumentFactory(parser

我使用蜡染绘制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;
}
这是给SVGGS2D的

SVGDocument svgDocument = loadSVGDocument(TEST_SVG);
SVGGraphics2D g = new SVGGraphics2D(svgDocument);
调试SVGDocument时,所有子项和属性都为null 当我生成图像时,它是空的,大小是400x400

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

i 我为我的案子找到了解决办法

我比较我的一代人和我的文件。首先,我认为我只有svg根和一个子g。 svg根不具有with和height

        Element elSVG = svgDocument.getRootElement();
    String width = elSVG.getAttribute("width");
    String height = elSVG.getAttribute("height");
我去搜索宽度和高度

        Element elSVG = svgDocument.getRootElement();
    String width = elSVG.getAttribute("width");
    String height = elSVG.getAttribute("height");
根之后呢

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的一个子级。 对我来说现在还可以


我尝试添加另一个类似思考的矩形,它可以工作。

只有一个小提示:当您使用文档创建
SVGGraphics2D
时,文档就是绘制操作的目标。例如,当您执行类似于
g.fillRect(10,10,20,30)
的操作时,文档将包含一个矩形。但是,如果文档已经包含某些内容,它(可能)将被覆盖。我不知道如何使用
SVGGraphics
向现有文档添加内容。这应该是可能的,但我必须尝试一下。谢谢你的回复。这一次,我只是尝试加载SVGGraphics2D并将其保存在jpg。但是我的jpg是空的。如果我保存在svg中,则为空。您应该尝试澄清:1。是否要加载SVG并将其另存为JPG?或2。是否要加载SVG,添加一些自定义元素(通过在
SVGGraphics
中绘制)并将结果保存为SVG?第2点。在上一次测试中,我看到了XMLResourceDescriptor.getXMLParserClassName();返回null;是正常的吗?对不起,我对蜡染不太熟悉(只用过一次)。我发表评论的主要目的是澄清这个问题。