Javascript 使用Java(桌面)从网站保存SVG图像
我正在使用以下代码生成一个网站(test.html):Javascript 使用Java(桌面)从网站保存SVG图像,javascript,java,svg,javax.script,identicon,Javascript,Java,Svg,Javax.script,Identicon,我正在使用以下代码生成一个网站(test.html): 试验 不支持内联svg的浏览器的回退文本 您更新的问题,包括在Java SE内置的JavaScript解释器中运行原始代码的有趣想法,使我进一步研究了这种方法,产生了以下代码,我已经测试过这些代码以生成SVG文档文本,它至少在我的计算机上生成预期的SVG图标图像 import java.io.FileNotFoundException; import java.io.FileReader; import javax.script.*;
试验
不支持内联svg的浏览器的回退文本
您更新的问题,包括在Java SE内置的JavaScript解释器中运行原始代码的有趣想法,使我进一步研究了这种方法,产生了以下代码,我已经测试过这些代码以生成SVG文档文本,它至少在我的计算机上生成预期的SVG图标图像
import java.io.FileNotFoundException;
import java.io.FileReader;
import javax.script.*;
public class JDenticonClient {
public static void main(String args[]) throws FileNotFoundException, ScriptException {
String svgText = new JDenticonClient().getSVGDocumentText("ff8adece0631821959f443c9d956fc39", 200);
System.out.print(svgText);
}
public String getSVGDocumentText(String hash, int size) throws FileNotFoundException, ScriptException {
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine scriptEngine = factory.getEngineByName("JavaScript");
scriptEngine.eval(new FileReader("jdenticon.min.js"));
return scriptEngine.eval("jdenticon.toSvg(\"" + hash + "\", \"" + size + "\")").toString();
}
}
尽管我们提出了相同的解决方案,但你必须考虑如下:
put
方法向正在评估的脚本公开其他脚本主机对象。这基本上就是使用脚本引擎和自定义主机的全部要点,该主机不是带有特定API集或Node.js或类似内容的web浏览器。基本上,您可以使用put
创建自己的API或模拟现有的API——是的,甚至可以复制整个浏览器API集,使您的应用程序成为与现代浏览器兼容的脚本主机散列
和大小
分别作为string
和int
对象暴露在脚本中,使用put
也可以,但这样做并不明智,考虑到这些参数是如何在toSvg
过程中自然一次性使用的参数jDeticon
过程,该过程在DOM树中查找canvas
和svg
元素,而在您的情况下,这些元素甚至不存在。事实上,令我印象深刻的是,对脚本文件内容的评估并没有中途中止,因为有一个关于DOM的假设。但这可能是因为脚本也是为了与Node.js一起工作,Node.js也没有DOMgetSVGDocumentText
将整个生成的SVG文档作为文本返回。如果要将所述文本保存到*.svg
文件中,则必须添加一些逻辑另外,感谢您为我指出
ScriptEngine
的方向。我甚至不知道Java有一个。很高兴知道,永远不知道。您更新的问题,包括在Java SE中内置的JavaScript解释器中运行原始代码的有趣想法,使我进一步采用了这种方法,产生了以下代码,我已经测试过这些代码以生成SVG文档文本,它至少在我的计算机上生成预期的SVG图标图像
import java.io.FileNotFoundException;
import java.io.FileReader;
import javax.script.*;
public class JDenticonClient {
public static void main(String args[]) throws FileNotFoundException, ScriptException {
String svgText = new JDenticonClient().getSVGDocumentText("ff8adece0631821959f443c9d956fc39", 200);
System.out.print(svgText);
}
public String getSVGDocumentText(String hash, int size) throws FileNotFoundException, ScriptException {
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine scriptEngine = factory.getEngineByName("JavaScript");
scriptEngine.eval(new FileReader("jdenticon.min.js"));
return scriptEngine.eval("jdenticon.toSvg(\"" + hash + "\", \"" + size + "\")").toString();
}
}
尽管我们提出了相同的解决方案,但你必须考虑如下:
put
方法向正在评估的脚本公开其他脚本主机对象。这基本上就是使用脚本引擎和自定义主机的全部要点,该主机不是带有特定API集或Node.js或类似内容的web浏览器。基本上,您可以使用put
创建自己的API或模拟现有的API——是的,甚至可以复制整个浏览器API集,使您的应用程序成为与现代浏览器兼容的脚本主机散列
和大小
分别作为string
和int
对象暴露在脚本中,使用put
也可以,但这样做并不明智,考虑到这些参数是如何在toSvg
过程中自然一次性使用的参数jDeticon
过程,该过程在DOM树中查找canvas
和svg
元素,而在您的情况下,这些元素甚至不存在。事实上,令我印象深刻的是,对脚本文件内容的评估并没有中途中止,因为有一个关于DOM的假设。但这可能是因为脚本也是为了与Node.js一起工作,Node.js也没有DOMgetSVGDocumentText
将整个生成的SVG文档作为文本返回。如果要将所述文本保存到*.svg
文件中,则必须添加一些逻辑另外,感谢您为我指出
ScriptEngine
的方向。我甚至不知道Java有一个。很高兴知道,永远不知道。你读过JDenticon
的文档吗?@amn嗯,我想我已经找到了,但还没有找到Java.Java的解决方案?jDeticon是一个JavaScript库——它在客户端工作。也就是说,我认为您可以通过Node.js在服务器端渲染一个图标。您可能需要将JDenticon移植到Java源代码中,以便将其作为Java应用程序呈现图标。另外,请记住,您不必对图标使用SVG——您可以使用canvas
,这也记录在JDenticon页面上。@amn生成canvas会更容易吗?我不在乎它是画布还是svg,我只想最终通过Java获得图像。您需要向我解释Java在哪里适合您的JDON应用程序。否则很难说。看