gpt4 book ai didi

java - 我可以创建没有 svg 文件的 JSVGCanvas 吗?

转载 作者:搜寻专家 更新时间:2023-11-01 02:23:54 25 4
gpt4 key购买 nike

浏览 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com