如果您排除“使用node.js”的规定,这可能是对您的问题的有用答案。如果它没有帮助您,也许以后的访客会发现它很有趣。
我已经工作了一段时间解决了同样的问题(服务器端d3栅格化),并且我发现PhantomJS是最好的解决方案。
server.js:
var page = require('webpage').create(), renderElement = require('./renderElement.js'), Routes = require('./Routes.js'), app = new Routes();page.viewportSize = {width: 1000, height: 1000};page.open('./d3shell.html');app.post('/', function(req, res) { page.evaluate(new Function(req.post.d3)); var pic = renderElement(page, '#Viewport'); res.send(pic);});app.listen(8000);console.log('Listening on port 8000.');Routes.js:https
://gist.github.com/3061477
renderElement.js:https://gist.github.com/3176500
d3shell.html应该看起来像:
<!DOCTYPE HTML><html><head> <title>Shell</title></head><body> <div id="Viewport" ></div> <script src="http://cdnjs.cloudflare.com/ajax/libs/d3/2.8.1/d3.v2.min.js" type="text/javascript"></script></body></html>
然后,您可以使用
phantomjs server.jsPOST d3 =
[d3渲染为#Viewport的代码]启动服务器,服务器将以base64编码的png进行响应。
(需要PhantomJS 1.7或更高版本。)



