2013-01-11 3 views
18

Sto lavorando su un'applicazione swing utilizzando i controlli JAVA FX. Nella mia applicazione devo stampare la pagina html visualizzata nella webview. Quello che sto cercando è caricare il contenuto html di webview in una stringa con l'aiuto di HtmlDocuement.recupera i contenuti dalla visualizzazione Web utilizzando javafx

Per caricare il contenuto del file html da vista web, Sto usando il seguente codice, ma la sua non funziona:

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

risposta

18

WebEngine.getDocument rendimenti org.w3c.dom.Document, non dei documenti JavaScript che ci si aspetta a giudicare dal codice.

Sfortunatamente, la stampa di org.w3c.dom.Document richiede un bel po 'di codifica. Puoi provare la soluzione dal What is the shortest way to pretty print a org.w3c.dom.Document to stdout?, vedi il codice qui sotto.

Nota che è necessario attendere il caricamento del documento prima di utilizzare Document. Questo è il motivo per cui LoadWorker è usato qui:

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(); 
} 
+0

vostro metodo sarà recuperare il contenuto mancante se il sito contiene errori html ex: Sono molto preoccupato su questo argomento se si dispone di una correzione per favore per favore aiutare –

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

questo uno di linea non funzionerà se non in un lavoratore. Restituirà HTML vuoto. Inoltre, non funzionerà per un sito come google.com. Non restituirà DOM dal vivo, solo html/javascript sottostanti. – Andy