0
我想从一个源文件的元素组成一个svg与蜡染。只要元素不引用defs部分中定义的东西(比如渐变或过滤器),这就可以工作。但是当过滤器被引用时,我得到一个异常。我试图复制defs部分,但没有帮助。蜡染复制从一个文件到另一个文件的元素
String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory factory = new SAXSVGDocumentFactory(parser);
Document source = factory.createDocument("source", getClass().getResourceAsStream("/artwork/source.svg"));
SVGOMDocument target = (SVGOMDocument) domImpl.createDocument(svgNS, "svg", null);
Node defs = source.getElementsByTagName("defs").item(0).cloneNode(true);
target.adoptNode(defs);
target.getRootElement().appendChild(defs);
BridgeContext ctx = new BridgeContext(new UserAgentAdapter());
GVTBuilder builder = new GVTBuilder();
builder.build(ctx, target);
Element sourceEl = getElementByXPath(source,
"//*[@id='IMAGES']/*[@id='" + selection.getImageSet() + "']/*[@id='"
+ suit.abbreviation() + value + "-" + selection.getImageSet() + "']");
SVGOMElement complete = (SVGOMElement) sourceEl.cloneNode(true);
target.adoptNode(complete);
target.getDocumentElement().appendChild(complete);
Rectangle2D completeBBox = builder.build(ctx, complete).getSensitiveBounds();
最后一行给出例外。任何帮助,将不胜感激。
编辑:
如果我保存目标SVG添加DEFS部分后,然后再重新装入它的工作原理。但我想避免这个冒险步骤。
你会得到什么例外? –
引起:org.apache.batik.bridge.BridgeException:null:-1 找不到引用的元素: “#filter18051” – gerrit
我想你也必须克隆引用的元素。或者修复引用是远程引用(假设Batik支持远程引用)。 –