Java HTML呈现引擎

时间:2013-06-12 09:08:39

标签: java html image graphics rendering

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

是否有可以将HTML呈现给图像文件或字节数组的Java库?我看到了Cobra,但它看起来很旧。

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

样本样式

  

<样式和GT; width:“240”,height:“96”,background:{type:“solid”,color:“#fffffff”}< / styles>

4 个答案:

答案 0 :(得分:5)

我的解决方案涉及3个步骤:

  1. 创建BufferedImage并创建其Graphics
  2. 创建JEditorPane并调用print(Graphics)
  3. 通过BufferedImage
  4. 输出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();
            }
        }
    }
    

    结果:

    result

答案 1 :(得分:3)

您好我为此目的使用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");

答案 2 :(得分:0)

您可以使用WebVector。它基于实际完成所有工作的CSSBox rendering engine。使用此库从网页生成位图图像非常容易。或者您可以在StackOverflow上查看similar topic

答案 3 :(得分:0)

尝试flying saucer(a.k.a。 xhtml渲染器)。它支持许多CSS 3功能,可以渲染图像和PDF。它的图像渲染是实验性的,并且缺少诸如DPI设置(假设1点== 1像素)。