8

我有一个小的 HTML 模板,我必须使用它来创建图像。HTML 由文本和格式组成。生成的图像被其他服务使用。它类似于零售商店的产品价格显示。

是否有可以呈现HTML为图像文件或字节数组的 Java 库?我见过眼镜蛇,但它看起来很旧。

编辑:将基本 HTML 设置为 JLabel 并使用 BufferedImage 应该可以工作,但我不确定 CSS 和 Style 的东西是否会得到正确处理。

样本风格

<styles> 宽度:“240”,高度:“96”,背景:{类型:“solid”,颜色:“#ffffff”} </styles>

4

4 回答 4

5

您好,我为此目的使用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");
于 2013-06-12T09:17:35.447 回答
5

我的解决方案包括 3 个步骤:

  1. 创建一个BufferedImage并创建其Graphics
  2. 创建JEditorPane并调用print(Graphics)
  3. 输出过BufferedImageImageIO

代码:

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

结果:

结果

于 2013-06-12T09:27:28.760 回答
1

尝试飞碟(又名xhtml 渲染器)。它支持许多 CSS 3 功能,可以渲染为图像和 PDF。它的图像渲染虽然是实验性的,但缺少诸如 DPI 设置之类的东西(假设 1 点 == 1 像素)。

于 2013-12-09T09:52:59.097 回答
0

您可能可以使用WebVector。它基于实际完成所有工作的CSSBox 渲染引擎。使用这个库从网页生成位图图像非常容易。或者您可以在 StackOverflow 上查看类似的主题。

于 2013-06-12T10:01:21.677 回答