您可以通过web视图使用JavaFX内容(get the contents from the web

2019-07-18 03:05发布

我使用JAVA FX控制秋千上应用程序的工作。 在我的应用程序必须采取打印出网页视图中显示的HTML页面。 我试图是加载web视图的html内容与HtmlDocuement的帮助字符串。

要加载HTML文件从网站内容来看,我使用下面的代码,但它不工作:

try
{
    String str=webview1.getEngine().getDocment().Body().outerHtml();
}
catch(Exception ex)
{
}

Answer 1:

WebEngine.getDocument返回org.w3c.dom.Document ,你会按照你的代码来看不的JavaScript文件。

不幸的是,打印出org.w3c.dom.Document需要相当多的编码。 您可以尝试从解决什么是漂亮的打印org.w3c.dom.Document中到标准输出的最短途径? 见下面的代码。

请注意,您需要等到文档与工作之前加载Document 。 这就是为什么LoadWorker用在这里:

public void start(Stage primaryStage) {
    WebView webview = new WebView();
    final WebEngine webengine = webview.getEngine();
    webengine.getLoadWorker().stateProperty().addListener(
            new ChangeListener<State>() {
                public void changed(ObservableValue ov, State oldState, State newState) {
                    if (newState == Worker.State.SUCCEEDED) {
                        Document doc = webengine.getDocument();
                        try {
                            Transformer transformer = TransformerFactory.newInstance().newTransformer();
                            transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "no");
                            transformer.setOutputProperty(OutputKeys.METHOD, "xml");
                            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
                            transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
                            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4");

                            transformer.transform(new DOMSource(doc),
                                    new StreamResult(new OutputStreamWriter(System.out, "UTF-8")));
                        } catch (Exception ex) {
                            ex.printStackTrace();
                        }
                    }
                }
            });
    webengine.load("http://stackoverflow.com");
    primaryStage.setScene(new Scene(webview, 800, 800));
    primaryStage.show();
}


Answer 2:

String html = (String) webEngine.executeScript("document.documentElement.outerHTML");


文章来源: get the contents from the webview using javafx