Механизм HTML-рендеринга Java

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

Есть ли библиотека Java, которая может отображать HTML в файл изображения или массив байтов? Я видел Cobra, но он кажется старым.

РЕДАКТИРОВАТЬ: установка базового HTML на JLabel и использование BufferedImage должны работать, но я не уверен, что материалы CSS и Style будут правильно обработаны.

Образец стиля

‹styles› ширина: 240, высота: 96, фон: { тип: сплошной, цвет: #ffffff } ‹/styles›


person basiljames    schedule 12.06.2013    source источник
comment
Будет ли анализ HTML для поиска изображения соответствовать вашим потребностям?   -  person david99world    schedule 12.06.2013
comment
@ david99world Мне нужно создать изображение, похожее на то, как будет выглядеть html при отображении в браузере. В HTML нет изображения.   -  person basiljames    schedule 12.06.2013
comment
HTML состоит из текста и форматирования. Приведите пример. Сначала я хотел бы упростить (при необходимости) HTML и отобразить его в виде JLabel или JEditorPane. BTW - CSS и стиль Если вы не имеете в виду что-то совершенно отличное от того, что я понимаю под «стилем», это одно и то же.   -  person Andrew Thompson    schedule 12.06.2013
comment
@AndrewThompson добавил образец стиля.   -  person basiljames    schedule 12.06.2013
comment
<styles> Этот элемент не существует ни в одной спецификации HTML, о которой я когда-либо слышал. Вы его копировали/вставляли или просто придумываете? Но мне не нужен только стиль, я хочу показать полный (действительный) HTML-код, который может быть предоставлен для рендеринга.   -  person Andrew Thompson    schedule 12.06.2013
comment
Я только что понял, что даже за пределами styles/style это недопустимый CSS. Обязательно проверьте *это также в соответствующей службе проверки.   -  person Andrew Thompson    schedule 12.06.2013


Ответы (4)


Здравствуйте, для этой цели я использую HTML2Image.

Это довольно просто:

HtmlImageGenerator imageGenerator = new HtmlImageGenerator();
imageGenerator.loadHtml("<b>Hello World!</b> Please goto <a title=\"Goto Google\" href=\"http://www.google.com\">Google</a>.");
imageGenerator.saveAsImage("hello-world.png");
imageGenerator.saveAsHtmlWithMap("hello-world.html", "hello-world.png");
person Ricardo Simmus    schedule 12.06.2013
comment
Позвольте мне взглянуть на это. Спасибо. - person basiljames; 12.06.2013
comment
Спасибо. Этот служит моей цели. Он совместим с HTML 3.2, поэтому мне пришлось внести несколько изменений в мой шаблон. - person basiljames; 14.06.2013
comment
Ссылка мертва. - person null; 05.07.2019

Мое решение включает в себя 3 шага:

  1. Создайте BufferedImage и создайте его Graphics
  2. Создайте JEditorPane и вызовите print(Graphics)
  3. Выведите BufferedImage через ImageIO

Код:

import java.awt.Graphics;
import java.awt.GraphicsEnvironment;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JEditorPane;

public class Test {

    public static void main(String[] args) {
        String html = "<h1>Hello, world.</h1>Etc. Etc.";
        int width = 200, height = 100;
        // Create a `BufferedImage` and create the its `Graphics`
        BufferedImage image = GraphicsEnvironment.getLocalGraphicsEnvironment()
                .getDefaultScreenDevice().getDefaultConfiguration()
                .createCompatibleImage(width, height);
        Graphics graphics = image.createGraphics();
        // Create an `JEditorPane` and invoke `print(Graphics)`
        JEditorPane jep = new JEditorPane("text/html", html);
        jep.setSize(width, height);
        jep.print(graphics);
        // Output the `BufferedImage` via `ImageIO`
        try {
            ImageIO.write(image, "png", new File("Image.png"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Результат:

результат

person johnchen902    schedule 12.06.2013
comment
+1 Упомянутый ниже инструмент основан на JEditorPane, но сделал несколько строк дополнительного кода, чтобы убедиться, что загрузка страницы завершена до завершения печати. - person basiljames; 14.06.2013

Попробуйте летающую тарелку (она же xhtml визуализатор). Он поддерживает многие функции CSS 3 и может отображать изображения и PDF. Его рендеринг изображения является экспериментальным, и в нем отсутствуют такие вещи, как настройка DPI (предполагается, что 1 точка == 1 пиксель).

person rustyx    schedule 09.12.2013

Возможно, вы могли бы использовать WebVector. Он основан на механизме рендеринга CSSBox, который выполняет всю работу. С помощью этой библиотеки довольно легко создать растровое изображение с веб-страницы. Или вы можете ознакомиться с похожей темой здесь, в StackOverflow.

person radkovo    schedule 12.06.2013