【问题标题】:Hybrid server-side-java and client-side-javascript charting library?混合服务器端 Java 和客户端 JavaScript 图表库?
【发布时间】:2011-08-06 08:39:19
【问题描述】:

是否有一个库可以用 Java 和 Javascript 为相同的数据生成相同的图表?

我的任务是:

  • 在浏览器中显示一些华丽的动态图表,更好地使用动态工具提示、缩放等(我在这里考虑 Javascript)
  • 并在服务器端用 Java 生成相同(或足够相似)的图表,以便在电子邮件中自动发送它们(在这种情况下根本不需要浏览器)。

我想避免使用 Flash 来实现 iPhone 的互操作性。

有一些静态的服务器端图表,例如 Eastwood/JFreeChart,但我想让它在浏览器中更生动。

是的,我可以通过 Ajax 重新加载静态图像。还有其他选择吗?

【问题讨论】:

  • Flot 怎么样?不幸的是,您必须在浏览器中渲染到画布才能导出它。您可以将它与 JFreeChart/Eastwood 结合起来,并从相同的数据中获得两个图表,尽管它们看起来会有所不同。

标签: java javascript charts


【解决方案1】:

为什么这个问题已经问了一年多了却没有答案?!我建议采用一种相当有问题且有些硬核的方法。


使用 JavaScript,太棒了!

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

具体来说:

  1. 使用诸如d3.js 之类的精巧 JavaScript 库生成您的图表。

  2. 使用jsdom 在服务器端运行 d3。 Jsdom 是纯 JS 库,众所周知 d3 在它之上工作。

  3. Rhino 中运行 jsdom 和 d3 - 从 1.6 (yay, JSR-223!) 开始,您钟爱的 JVM 中就有一个 JavaScript 引擎。不过,我建议您将其更新到最新版本 (It's on Maven Central, neat!)。我猜Node.JS 可以做得更好,但我认为你被 Java 困住了。

    另外请注意,有一个更老、更成熟且特定于 Rhino 的服务器端 DOM 实现 - EnvJs (requires Rhino 1.7R2, not R3)。如果 jsdom 不适合你,你可以试试。

  4. 使用Batik 栅格化由 d3 生成的 SVG。 Batik even supports scripting inside SVG via Rhino. 这意味着您可以根据需要在服务器端生成交互式图表。我也在实践中使用过它,并且有很好的经验。

整个方法is known to work server-side with Node.JS as a JS engine and ImageMagick as a rasterizer,但我看不出为什么它对你也不起作用。


顺便说一句,如果你能让它全部运行,请告诉我。

【讨论】:

  • 很好的答案,谢谢!可惜我根本不再参与 Grails 项目,这可能很有趣。 "If you'll make it all running let me know.":D
  • 哇!这不是“有点硬核”:这是 100% 的硬核!
【解决方案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

【讨论】:

    猜你喜欢
    • 2013-09-14
    • 1970-01-01
    • 2020-08-27
    • 2011-06-09
    • 1970-01-01
    • 2017-05-19
    • 2015-06-06
    • 2011-05-04
    • 1970-01-01
    相关资源
    最近更新 更多