2013-01-11 18 views
18

Pracuję nad aplikacją swing używając kontrolek JAVA FX. W mojej aplikacji muszę wydrukować stronę HTML wyświetlaną w widoku webowym. Próbuję załadować zawartość html w webview w ciągu znaków przy pomocy HtmlDocuement.pobierz zawartość ze strony internetowej za pomocą javafx

Aby załadować zawartość pliku html z widoku strony internetowej, Używam następujący kod, ale jej nie działa:

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

Odpowiedz

18

WebEngine.getDocument powraca org.w3c.dom.Document nie JavaScript dokument, który można się spodziewać sądząc po kodzie.

Niestety, wydrukowanie org.w3c.dom.Document wymaga sporo kodowania. Możesz wypróbować rozwiązanie od What is the shortest way to pretty print a org.w3c.dom.Document to stdout?, zobacz poniższy kod.

Należy pamiętać, że przed rozpoczęciem pracy z Document należy zaczekać na załadowanie dokumentu. To dlatego LoadWorker jest tutaj:

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

Twoja metoda pobiera brakującą treść jeśli strona zawiera błędy html ex: Jestem bardzo zaniepokojony tym temacie, jeśli masz dylemat proszę proszę pomóc –

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

tę jedną wkładkę nie będzie działać, jeśli nie w pracownika. Zwróci pusty html. Nie będzie też działać w przypadku witryny takiej jak google.com. Nie zwróci Live DOM, tylko podrzędny html/javascript. – Andy

Powiązane problemy