はじめに
事前に準備する外部ライブラリ等はありません。
実装例
サンプルでは、動作確認しやすいようにmainメソッドで実行できるようにしてあります。
WebViewTest.java
import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javafx.application.Application; import javafx.application.Platform; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.concurrent.Worker; import javafx.concurrent.Worker.State; import javafx.embed.swing.SwingFXUtils; import javafx.scene.Scene; import javafx.scene.image.WritableImage; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javafx.stage.Stage; import javax.imageio.ImageIO; /** * * @author tool-taro.com */ public class WebViewTest extends Application { public static void main(String[] args) { WebViewTest.launch(args); } @Override public void start(Stage stage) throws IOException { //スクリーンショットを撮るサイト String url = "http://tool-taro.com/"; //画像ファイルの保存先 String filePath = "webview.png"; WebView webView = new WebView(); webView.setPrefSize(1440, 900); WebEngine webEngine = webView.getEngine(); webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<State>() { @Override public void changed(ObservableValue ov, State oldState, State newState) { //changeイベントが完了した時点でスクリーンショットを撮る if (newState == Worker.State.SUCCEEDED) { stage.setTitle(webEngine.getLocation()); WritableImage image = webView.snapshot(null, null); BufferedImage bufferedImage = SwingFXUtils.fromFXImage(image, null); try { ImageIO.write(bufferedImage, "png", new File(filePath)); } catch (IOException e) { e.printStackTrace(); } finally { //アプリケーションを終了する Platform.exit(); } } } }); //サイトにアクセスしてコンテンツをロードする webEngine.load(url); //WebViewをSceneに入れてStageにのせて表示する(そうしないとWebEngineのchangeイベントは成功しない) stage.setScene(new Scene(webView)); stage.show(); } }
動作確認
$ javac WebViewTest.java $ java WebViewTest
撮影された画像ファイルです。
環境
- 開発
- Windows 10 Pro
- JDK 1.8.0_74
- NetBeans IDE 8.1
- 動作検証
- Windows 10 Pro
- JDK 1.8.0_74
Webツールも公開しています。
Web便利ツール@ツールタロウ