WebEngine loadContent() не загружаются картинки

193
27 марта 2018, 01:20

Я имею html-файл и много картинок от от него:

  • Html-файл является зашифрованным.
  • Картинки не зашифрованы.

В своей программе я считываю, расшифровываю и вывожу текст на экран: webEngine.loadContent(htmlCode).

Цель: вывести полноценный html-файл с картинками.

Проблема: не отображаются картинки.

PS: Html-файл и его картинки находятся за пределами программы.

Моё решение, которое не работает как надо:

Я нашёл библиотеку Jsoup, она парсит html-файлы. С помощью неё, я, в каждый атрибут src="" тега img вставлял разные пути, но что-то не получается:

  1. C:\Users\Gomas\Desktop\Новая папка (2)\Lectures\Lectures1\imageXXX.png
  2. file:\C:\Users\Gomas\Desktop\Новая папка (2)\Lectures\Lectures1\imageXXX.png

Код:

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
...
String url = getUrl();
...
String htmlCode = getHtmlCode();
Document document = new Document(htmlCode);
Elements tagsImg = document.getElementsByTag("img");
tagsImg.forEach(tagImg ->{
    String nameImg = tagImg.attr("src");
    tagImg.attr("src", url + nameImg);
});
webEngine.loadContent(String.valueOf(document));

PS: Почему не получается? Путь точный, но работать не хочет. Есть идеи?

Answer 1

При условии что в html используются абсолютные пути, ни каких проблем не обнаружено (работает и через load и через loadContent). Попробуйте соответствовать данному примеру (если это возможно):

C:/Test/Page.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
</head>
<body>
    <h1>Ниже картинка</h1>
    <img src="file:/C:/Test/test.png">
</body>
</html>

Main.java

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Collectors;
public class Main extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {
        WebView webView = new WebView();
        primaryStage.setScene(new Scene(webView, 300, 300));
        primaryStage.show();
        Path pathToPage = Paths.get("C:/Test/Page.html");
        // test load
//        webView.getEngine().load(pathToPage.toUri().toString());
        // test load content
        String content = Files.lines(pathToPage).
                peek(System.out::print).
                collect(Collectors.joining());
        webView.getEngine().loadContent(content);
    }
}

P.S.: контент после дешифровки, так же должен работать.

READ ALSO
Interstitial Facebook

Interstitial Facebook

Добрый день, есть интерститиал от фэйсбука, прошу подсказать код как сделать чтобы он показывался через определённые промежутки времени,...

160
Есть ли в джава аналог препроцессора как в с++

Есть ли в джава аналог препроцессора как в с++

Есть ли в джава аналог препроцессора как в с++(Есть ли анологи плюсовых define)

148
3 ошибки/предупреждения в Android Studio

3 ошибки/предупреждения в Android Studio

Доброго времени сутокНачал осваивать Android Studio и Java

132
Интерфейс Iterable

Интерфейс Iterable

Есть код класса IterNap:

136