2

Swing の限定的な組み込み HTML サポート ( http://www.java.net/node/680674を参照)を使用して Graphics2D オブジェクトに HTML を描画する方法は知っていますが、より適切なレンダリングが必要です。この特定の化学図描画アプリケーションにとって最も重要なことは、Swing の HTML サポートが、ネストされた下付き文字/上付き文字に拡張されていないことです。より良い CSS サポートもいいでしょう。画像の埋め込みや、Javascript やホットリンクなどのインタラクティブな機能は必要ありません。

HTML テキストは拡大縮小および回転されてから、おそらく追加のテキストとグラフィックを含むダイアグラムに描画されます。Graphics2D のターゲットは、画面、プリンター、または (iText を介して) PDF ファイルの場合があります。出版品質の PDF ファイルを生成する場合、BufferedImage などを介した変換を含むソリューションが適切にコンパクトになるとは思えません。

私の (おそらく間違った) 印象は、JavaFX 2.0 にはまだこれに対する解決策がないということです。アプリケーション全体を Swing から JavaFX に書き直すことは現実的ではありません。

このアプリケーションは無料でオープン ソースであるため、使用するツールも自由に配布できる必要があります。そうでなければ、JWebEngine がその条件を満たしていると思います。

どんな助けでも大歓迎です。

4

2 に答える 2

1

JavaFXWebViewノードを使用できます。これは非常に優れたHTMLタグとcssサポートを備えています。JavaFXプリミティブを使用して、WebViewノードを 回転およびスケーリングできます。MathJaxをWebView内で使用して、高品質の方程式のレンダリングを取得できます(単純なhtmlとcssだけではうまくいかない場合)。JavaFX 2.2を使用すると、WebViewノードのスナップショットを取得してJavaFXイメージにレンダリングできます。JavaFX 2.2SwingFXUtilsを使用してそのJavaFXイメージをawtBufferedImageに変換し、ImageIOを使用してさまざまな形式でファイルに書き出すことができます。

円グラフノードをpngにレンダリングする例を次に示します。HTMLの複雑さによっては、高品質の画像が(たとえば)pngファイルにうまく圧縮される場合があります。pichartサンプルでは、​​テキストと色付きのグラデーションを含む2000x2000ピクセルの円グラフが168kbのpngファイルに保存されています。

JavaFXには既存のSwingアプリケーション内にJavaFXアプリケーションを埋め込むためのJFXPanelが含まれているため、アプリケーション全体をSwingからJavaFXに書き換える必要はありません。ノードスナップショットステップでは、ノードを画面にレンダリングする必要はありません(すべてメモリバッファーを介して実行できます)。ただし、JavaFXシステムは、最初にJavaFXアプリケーションまたはJFXPanelで開始および起動する必要があります。

上記のすべてがあなたにあなたが望む結果を与えることになるかもしれないし、そうでないかもしれません、しかしそれは調べるための有望な道のようです。

アップデート

これについていくつかのテストを実行しました。この投稿で説明されているように、画面に表示されるWebViewのスナップショットを作成できますが、JavaFX 2.2の制限により、オフスクリーンシーンの一部として表示されるWebViewのスナップショットを作成できませんでした。これは、この回答の情報が正確であることを意味しますが、画面上のWebViewに表示できるHTMLの部分にのみ適用されます。たとえば、この手法は現在、ピクセルサイズが画面のピクセルサイズを超える大きなドキュメントでは機能しません。いくつかのサンプルコードについては、https://forums.oracle.com/forums/thread.jspa?threadID=2456191を参照してください。

于 2012-06-16T00:40:36.353 に答える