浏览 documentation for JSVGCanvas
,看来我可能无法做到这一点。但是,这很有意义。如何从 String
变量而不是 File
创建 JSVGCanvas
?
我的想法是我可以做如下事情:
String svg = "svg data";
JFrame frame = new JFrame();
JSVGCanvas canvas = new JSVGCanvas();
canvas.setContentsFromString(svg);
frame.add(canvas);
frame.setVisible(true);
我知道我总是可以创建一个临时文件并从文件中设置 JSVGCanvas
的内容,但我宁愿避免这样做。我可以扩展 File
并覆盖它的方法吗?
注意:我使用的是 Jython,但我认为这也与 Java 相关,因此我同时使用了这两个标签。我更喜欢 Java 解决方案,但 Jython 解决方案也行
最佳答案
是的,你可以:
String parser = XMLResourceDescriptor.getXMLParserClassName();
SAXSVGDocumentFactory factory = new SAXSVGDocumentFactory(parser);
SVGDocument document = factory.createSVGDocument("", new ByteArrayInputStream(svg.getBytes("UTF-8")));
canvas.setSVGDocument(document);
这是通过 SAXSVGDocumentFactory
创建一个 SVGDocument
来实现的。 SAXSVGDocumentFactory
有一个方法 createSVGDocument(String, InputStream)
,其中字符串应该是 InputStream
表示的文件的 URI。然而,我们滥用它并给它一个空字符串,并使 InputStream
成为来 self 们的 svg-data String 的流。
使用 ""
可能会引发关于它们没有协议(protocol)的异常,具体取决于 Batik 的版本。如果是这种情况,请尝试 "file:///"
,即给它一个谎言的 URI。您可能想使用实际的 URI;你需要找出一个有效的给 Batik
关于java - 我可以创建没有 svg 文件的 JSVGCanvas 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30824711/