11

Java で XSL-FO を使用してバックエンドで生成されたレポートにD3.js (またはおそらくRaphaël )を使用したいと考えています。これらの JavaScript ライブラリは、いくつかの理由で使用する必要があります。

  1. Java ライブラリ (IMO) で見たものよりも美しいグラフをレンダリングします。
  2. XSL-FOで必要なSVGとPNGの両方をサポートしています(私が知っていることから)。
  3. また、アプリケーションのフロントエンド部分でも使用されます。Java を使用してバックエンドでもそれらを再利用すると、開発者の学習曲線とコードベースのフットプリントが削減されます。

したがって、同様の Java ライブラリを使用することはあまり好ましくありません。

Java で D3.js を使用する最も簡単な方法は、セレンのような重いツールを使用して、ダミーの HTML ページをレンダリングし、その中で JavaScript を実行することです。しかし、それは私にはやり過ぎのように思えます。

この種の JavaScript を同じ Java プロセスで直接実行する簡単な方法はありますか? D3.js は HTML ドキュメントのコンテキストで動作するように設計されているため、質問しています。それがRhinoや他のJavaスクリプトの実装で可能かどうかはわかりません

4

3 に答える 3

4

Phantom.jsを使用できます。これは、ブラウザーを必要とせずに JavaScript を実行できる、webkit に基づくヘッドレス ブラウザーです。

これを使用すると、システム コールを実行して、JavaScript コードと入力用に phantom.js を実行することができます。その後、それに応じて出力が作成されます。この例を参照してください。

于 2012-07-04T14:39:21.453 に答える
3

私は約1年前にそれに取り組みました。HighCharts (javascript での SVG グラフ) の一部を Rhino で動作させることができました。env.js をプラグインする必要があり、キャンバス要素、特にバウンディング ボックスの計算に関する多くの問題に遭遇しました。Rhino のオブジェクトは getBBox() を実装していないため、簡単に偽装できません。

私の目標は、最終的に Batik を使用して PDF にレンダリングすることでした...時間がかかりすぎたため、別のテクノロジに切り替えることにしました。

そのため、今日はwkhtmltopdfを使用しています。これは Java ではありませんが、jar に埋め込んで Java 側から簡単に起動できる静的実行可能ファイルです。ところで、何かをレンダリングしたい場合、Linux では xvfb が必須です。これは PhantomJS とほぼ同じです。

于 2012-07-04T15:15:41.070 に答える