Как получить содержимое Html после его загрузки и выполнения сценариев с использованием JavaFx? - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть приложение JavaFx, в котором я пытаюсь загрузить html, который генерирует холст путем выполнения сценариев. Я могу получить сгенерированное изображение холста в пользовательском интерфейсе при запуске приложения, но не могу получить окончательный сгенерированный html контент. Конечный сгенерированный контент HTML содержит текст base64, который я пытаюсь получить. Я вижу этот текст только после того, как я щелкну правой кнопкой мыши на изображении в пользовательском интерфейсе и выберу открыть в новом окне

Ниже приведен код и сгенерированное изображение холста. Может кто-нибудь, пожалуйста, дайте мне знать, как получить сгенерированный HTML контент и получить этот текст Base64 после того, как все сценарии были выполнены здесь?

package com.canvastest;

import java.io.File;
import java.io.OutputStreamWriter;

import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;

import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.concurrent.Worker.State;
import javafx.scene.Scene;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class JavaFxApplication extends Application{


        @Override
        public void start(Stage primaryStage) throws Exception {
            try {
            WebView webView = new WebView();
            WebEngine webEngine = webView.getEngine();
            webEngine.setJavaScriptEnabled(true);
            //Bridge bridge = new Bridge(webEngine);
            Scene scene = new Scene(webView,600,600);
            primaryStage.setScene(scene);
            primaryStage.setTitle("Hello World");
            primaryStage.show();

            File f = new File("D:\\Work\\workspace\\canvastest\\Input\\BhaEditor\\OriginalCanvas.html");
                webEngine.getLoadWorker().stateProperty().addListener(
                    new ChangeListener<State>() {
                        public void changed(@SuppressWarnings("rawtypes") 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(f.toURI().toString());

            }catch (Exception ex) {

                System.err.print("error " + ex.getMessage());
                ex.printStackTrace();
            }
        }

        public static void main(String[] args) {
            launch(args);
        }
}

enter image description here

...