JavaFX2.0のWebViewを使って、JavaでWebサイトの画面キャプチャをとる

昨日のエントリでは、JavaFX2.0を使ってブラウザをJava画面に組み込んでみました。
あれ、おとといのエントリだよ?っていうツッコミもあるかもしれませんが、ただいま27日31時30分なので、問題ない。
Javaでブラウザが表示できるようになるよ!


とはいえ、JavaFX2.0でWebKitラッパのWebViewができたといっても、JavaFXを使ってクライアントを作る機会がないと思ってる人は「だからどーしたの?JavaFXでフロントエンド作らないから関係ないよ」とか思ってるかもしれません。
けれど、JavaWebKit相当のレンダリングができるというのは、サーバーサイドでもメリットがあると思います。


ということで、サーバーサイドでやりそうな、Webサイトの画面キャプチャをとってみました。
「リンク先のキャプチャとってサムネイル出したらかっこいいよねー」とか思ったことある人、結構いるはず。
昨日のエントリのrunLaterのところで、読み込み後にWebサイト画面を保存するようにします。


あとは、Linux版などを待つのみですね。


ソース(一部)はこちら。

Platform.runLater(new Runnable() {
    @Override
    public void run() {
        engine = new WebEngine("http://d.hatena.ne.jp/nowokay/");
        WebView view = new WebView(engine);

        Group root = new Group();
        root.getChildren().add(view);
        Scene scene = new Scene(root);

        panel.setScene(scene);

        //サイト読み込み終了時の処理を登録
        Task<Void> task = engine.getLoadTask();
        task.setOnDone(new EventHandler<TaskEvent>() {
            @Override
            public void handle(TaskEvent event) {
                //ファイル選択
                JFileChooser chooser = new JFileChooser();
                int result = chooser.showSaveDialog(WebFrame.this);
                if(result != JFileChooser.APPROVE_OPTION){
                    return;
                }
                //保存
                Dimension d = panel.getSize();
                BufferedImage img = new BufferedImage(d.width, d.height, BufferedImage.TYPE_INT_RGB);
                Graphics g = img.getGraphics();
                panel.paint(g);
                g.dispose();
                try {
                    ImageIO.write(img, "png", chooser.getSelectedFile());
                } catch (IOException ex) {
                    ex.printStackTrace();
                }

            }
        });

    }
});