Screenshot of the full web page loaded into JavaFX

2019-05-30 23:06发布

问题:

I'm writing my first lines of code after 2 years of managerial work. No time to read a lot of docs, need to create a proof-of-concept just in minutes. So I have to work with JavaFX and need to provide functionality that allows to take a screenshot of web-page loaded into WebView component. The issue is that I need a screenshot of the full page, not only that piece that fits into current size of application window. Here is a simple code I use:

    WritableImage image = browser.snapshot(new SnapshotParameters(), null); 
    // browser is javafx.scene.web.WebView
    File file = new File("screenshot_fx.png");
    try {
        ImageIO.write(SwingFXUtils.fromFXImage(image, null), "png", file);
    } catch (IOException e) {
        e.printStackTrace();
    }

And it basically captures only what I see on the screen. If web-page requires scrolling -- I will not have not-visible part on the screenshot. Please suggest how to proceed.

回答1:

        try {
            Robot pixelGrabber = new Robot();
            BufferedImage bi = pixelGrabber
                    .createScreenCapture(new Rectangle(x, y, width, height));


            Image screen = SwingFXUtils.toFXImage(bi,
                    new WritableImage(bi.getWidth(), bi.getHeight()));

        } catch (AWTException ex) {
            ex.printStackTrace();
        }

This creates a screenshot starting on pixel x*y with your needed height and width independent of the current size of your application window. If your are using JavaFX, just use SwingFXUtils to transform the awt-image to a JavaFX-image.