Je travaille sur une application swing en utilisant Java Contrôles FX. Dans mon application, je dois imprimer la page html affichée dans la vue Web. Ce que j'essaie est de charger le contenu HTML de la vue Web dans une chaîne à l'aide de HtmlDocuement.
Pour charger le contenu du fichier html à partir de la vue Web, j'utilise le code suivant mais cela ne fonctionne pas:
try
{
String str=webview1.getEngine().getDocment().Body().outerHtml();
}
catch(Exception ex)
{
}
WebEngine.getDocument
Retour org.w3c.dom.Document
, pas un document JavaScript que vous attendez à en juger par votre code.
Malheureusement, l'impression de org.w3c.dom.Document
nécessite pas mal de codage. Vous pouvez essayer la solution de Quel est le moyen le plus court d'imprimer un org.w3c.dom.Document sur stdout? , voir le code ci-dessous.
Notez que vous devez attendre que le document soit chargé avant de travailler avec Document
. C'est pourquoi LoadWorker
est utilisé ici:
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();
}
String html = (String) webEngine.executeScript("document.documentElement.outerHTML");