我想将D3.js(或者Raphaël)用于使用XSL-FO和Java的后端生成的报告。应该使用这些JavaScript库有以下几个原因:
因此,使用任何类似的Java库是一个不太有利的选择。
现在使用D3.js与Java最直接的方法是使用像selenium这样的繁重工具来呈现虚拟HTML页面并在其中执行JavaScript。但这似乎对我来说太过分了。
有没有更简单的方法可以在同一个Java进程中直接执行这种JavaScript?我问,因为D3.js被设计为在HTML文档的上下文中工作。我不确定是否可以使用Rhino或其他Java脚本实现
答案 0 :(得分:4)
您可以使用phantom.js。它是一个基于webkit的无头浏览器,允许您在不需要浏览器的情况下运行JavaScript。
使用此功能,您只需执行系统调用即可为您的JavaScript代码和输入运行phantom.js。然后它会相应地创建您的输出。请参阅this example。
答案 1 :(得分:3)
我大约一年前就开始研究了这个问题。我设法使用Rhino的部分HighCharts(javascript中的SVG图形)。我不得不将env.js插入其中并遇到很多关于canvas Element的问题,尤其是在Bounding Boxes计算方面。 Rhino中的对象没有实现getBBox(),它不容易被伪造。
我的目标是最终用Batik以PDF格式呈现它...花了太多时间,我们决定转用另一种技术。
所以,今天,我们使用的是wkhtmltopdf,它不是Java,但是它是一个静态可执行文件,可以嵌入到jar中并从java端轻松启动。顺便说一句,如果你想渲染一些东西,xvfb在Linux上是强制性的。这与PhantomJS非常相似