混合式的Java服务器端和客户端JavaScript图表库?

4
有没有一个库可以在Java和Javascript中生成相同的图表?
我的任务是:
- 在浏览器中显示一些动态的、华丽的图表,最好带有动态工具提示、缩放等功能(我在想Javascript); - 并在服务器端生成相同(或足够相似)的图表,在Java中自动将它们发送到电子邮件中(在这种情况下没有浏览器)。
我想避免使用Flash以实现iPhone的互操作性。
有一些静态服务器端图表,如Eastwood/JFreeChart,但我想让它在浏览器中更加生动。
是的,我可以通过Ajax重新加载静态图像。还有其他选项吗?

关于Flot呢?不幸的是,你必须在浏览器中渲染到画布才能导出它。你可以将它与JFreeChart/Eastwood结合使用,从同一数据中得到两个图表,尽管它们看起来会有所不同。 - justkt
请参见 https://dev59.com/j2gu5IYBdhLWcg3wbGil%C3%ABl-in-server-side-java。 - Pino
2个回答

8
这个问题已经超过一年了,为什么没有答案?!我建议采用一个相当可疑和有点极端的方法。

使用JavaScript,它很棒!

这是你的成功公式:d3.js+jsdom+Rhino+Batik

具体而言:

  1. 使用像 d3.js 这样的流畅JavaScript库生成您的图形。

  2. 使用 jsdom 在服务器端运行d3。 Jsdom是一个纯JS库,已知d3可以在其上工作。

  3. Rhino 中运行jsdom和d3 - 自从1.6以来就内置于您心爱的JVM中(yay,JSR-223!)。虽然我建议您将其更新到最新版本(它在Maven Central上,好极了!)。我猜 Node.JS 可以做得更好,但我假设您被困在Java中。

    还请注意,有一个较旧、更成熟且专门针对Rhino的服务器端DOM实现 - EnvJs 需要Rhino 1.7R2,而不是R3。如果jsdom对您不起作用,您可以尝试它。

  4. 使用 Batik 来光栅化由d3生成的SVG。 甚至支持通过Rhino在SVG内部编写脚本。这意味着您可以在服务器端生成交互式图表。我也在实践中使用它,并取得了很好的经验。

整个方法{{link1:已知在Node.JS作为JS引擎和ImageMagick作为光栅化工具的服务器端可行}},但我不认为它不能适用于您。

顺便说一句,如果你把它全部搞定了,请告诉我。


非常好的回答,谢谢!可惜我已经不在Grails项目上了,这可能很有趣。 “如果你把它全部运行起来,请告诉我。” :D - Victor Sergienko
让您知道:http://stackoverflow.com/questions/24557308/launch-jsdom-from-rhino-on-java - ses
哇!这不是“有点强硬”:它是100%的强硬! - Pino

2
抱歉回复晚了,您考虑使用 Highcharts 吗?我正在输入此信息时寻找提供更多信息的链接,但是 Highcharts 提供了一个服务器端的“导出”功能。它的基本作用是允许您下载图像的副本,而无需实际需要浏览器。
我实现了这个功能,以便可以获取请求参数,查询数据存储库,使用 Highcharts 将这些数字绘制到所需的图表中,并将这些结果嵌入电子邮件中(当然,将电子邮件发送给收件人)。
更多信息请参见:http://www.highcharts.com/component/content/article/2-articles/news/52-serverside-generated-charts
这里:https://github.com/one2team/highcharts-serverside-export

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接