我有这个项目,需要在java中的服务器端渲染javascript。
基本上,我想要做的是将javascript代码转换为svg标记,稍后我可以直接将其添加到我的HTML中。
为了演示,我将使用一个简单的示例:
http://bl.ocks.org/mbostock/6216797。
这是我的java代码:
public static void main(String args[]) throws Exception {
ScriptEngine js = new ScriptEngineManager().getEngineByName("javascript");
Bindings bindings = js.getBindings(ScriptContext.ENGINE_SCOPE);
bindings.put("stdout", System.out);
System.out.println(
js.eval(FileUtils.readFileToString(new File("d3Example.js")))
);
}d3Example.js为:
var require = (function () {
var _required = {};
return (function (url, callback) {
if (typeof url == 'object') {
// We've (hopefully) got an array: time to chain!
if (url.length > 1) {
// Load the nth file as soon as everything up to the
// n-1th one is done.
require(url.slice(0,url.length-1), function () {
require(url[url.length-1], callback);
});
} else if (url.length == 1) {
require(url[0], callback);
}
return;
}
});
})();
require(['d3.v3.min.js'], function () {
var width = 960,
height = 500;
var x = d3.scale.linear()
.range([0, width]);
var y = d3.scale.linear()
.range([0, height]);
var projection = d3.geo.transform({
point: function(px, py) { this.stream.point(x(px), y(py)); }
});
var path = d3.geo.path()
.projection(projection);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
d3.json("geo.json", function(error, geo) {
x.domain(d3.extent(geo.features, function(d) { return d.properties.Easting; }));
y.domain(d3.extent(geo.features, function(d) { return d.properties.Northing; }));
svg.append("path")
.datum(geo)
.attr("class", "lot")
.attr("d", path);
});
});我想要的输出应该是创建图片的html代码,如下所示:http://bl.ocks.org/mbostock/6216797
这个项目的想法是能够在服务器端进行javascript计算,而客户端只接收由html呈现的svg标记,以创建漂亮的图形。
发布于 2015-05-08 18:58:47
因此,一种可能性是使用nodejs在服务器端https://mango-is.com/blog/engineering/pre-render-d3-js-charts-at-server-side/上运行javascript
生成html,然后将其保存到文件。现在使用任何你喜欢的语言,如果你愿意,你可以将所说的html转换成pdf,然后提供这个文件作为下载。
另一种选择是使用Apache Wicket,这是一种基于java的web前端工具。它能够生成html和javascript页面。虽然我还没有研究如何将该页面转换为文件。http://ci.apache.org/projects/wicket/guide/6.x/
https://stackoverflow.com/questions/30121807
复制相似问题