JavaのGUIをベクトルデータとしてスクリーンショットを撮る〜SVG編〜
かつてJavaのGUIをベクトルデータとしてスクリーンショットを撮る と題して、JavaといってもSwing GUI限定ではあるが、 スクリーンショットを PostScript で出力するアイデアを紹介した。 しかし、実際に実装するとテキストがパス化されていたりなど、 細かい点で問題が残った。
その結論で、Batikを使ってよりよい出力ができるのではないかと示唆した。
半透明などをベクトルデータとして出力できない問題を解決するには、グラフィックコンテクストの描画命令から SVG などの出力を行うものが必要となるだろう。[4]
[4] SVG Generator: SVGGraphics2D, The Apache Software Foundation
というわけで、Batik の How to use SVGGraphics2D というページを参考にして作ってみた。
つまり、前回のソースに対して、以下のような document に描画情報を出力した後ファイル出力するコードをねじ込んだ。
これはなかなか強力で、テキストがテキストのままで出力された。 テキスト描画がそのまま<text>要素でSVGに変換されていた。
しかし、問題もかなりあって、Exception が出て出力できないことが
しばしばある。
しかも
org.apache.batik.ext.awt.image.codec.png.PNGImageEncoder.encode
でRuntimeException
とか一筋縄で行かなさそう。
(そして筆者はそれ以上の原因追求はおこなっていない)
さらに、そもそもの問題であるが、Batik は 2008年 にリリースされた
バージョン 1.7 から安定バージョンが出ていない。
つまりメンテナンスが積極的に行われていない感が拭えない。
もっとも、開発レポジトリ(subversion) http://svn.apache.org/repos/asf/xmlgraphics/batik/trunk/
のログを見るとまだ手を入れられているので、
trunk
から落としてきて最新trunkビルドで試したほうがよかったかもしれない。
(が、ビルドが面倒なので確認していない。)