2011-04-15 50 views
5

是否有一個庫爲Java和Javascript中的相同數據生成相同的圖表?混合服務器端Java和客戶端JavaScript圖表庫?

我的任務是兩個:

  • 顯示一些華而不實的動態圖表在瀏覽器中,更好地與動態提示,縮放等等(我在這裏想使用Javascript)
  • 併產生相同(或類似的)圖表在服務器端用Java自動發送郵件(在這種情況下根本沒有瀏覽器)。

我想避免Flash for iPhone的互操作性。

有一些像Eastwood/JFreeChart這樣的靜態服務器端圖表,但我想讓它在瀏覽器中更加活躍。

是的我可以通過Ajax重新加載靜態圖像。還有其他選擇嗎?

+0

什麼[海軍報](http://code.google.com/p/flot/)?不幸的是,你必須渲染到瀏覽器中的畫布才能導出它。你可以把它和JFreeChart/Eastwood結合起來,並且從相同的數據中得到兩張圖,儘管它們看起來不一樣。 – justkt 2011-04-15 13:40:07

+0

參見https://stackoverflow.com/questions/11331076/how-to-use-a-javascript-chart-library-like-d3-js-or-rapha%C3%ABl-in-server-side-java – Pino 2017-07-04 07:04:38

回答

9

這個問題怎麼會超過一歲,但沒有答案?!我提出了一個頗有疑問和有點硬核的方法。


使用JavaScript,太棒了!

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

具體做法是:

  1. 使用一些華而不實的JavaScript庫,例如d3.js生成你的圖表。使用jsdom運行d3服務器端。 Jsdom是純粹的JS庫,已知d3在其上工作。

  2. Rhino之內運行jsdom和d3 - 從1.6(yay, JSR-223!)開始,將JavaScript引擎烘焙到您心愛的JVM中。雖然,我建議你將它更新到最新版本(It's on Maven Central, neat!)。我猜Node.JS可以做得更好,但我認爲你被Java困住了。

    另外請注意,有一個年紀大了,更加成熟和犀牛特定的服務器端DOM實現 - EnvJsrequires Rhino 1.7R2, not R3。如果jsdom不適合你,你可以試試。

  3. 使用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但我看不出爲什麼它也不適合你。


順便說一句,如果你能使它全部運行讓我知道。

+0

很好的答案,謝謝!可惜我不再在Grails項目上,這可能很有趣。 ''如果你能讓這一切都能讓我知道。':D – 2012-05-29 19:23:51

+0

讓你知道:http://stackoverflow.com/questions/24557308/launch-jsdom-from-rhino-on-java – ses 2014-07-03 15:45:30

+0

哇!這不是「有點硬核」:它是100%的硬核! – Pino 2017-07-04 06:58:49

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