8

I have a small HTML template using which i have to create an image. The HTML consists of text and formatting. The generated image is used by other services. It is similar to product price display in retail shops.

Is there a Java library that can render HTML to an image file or byte array ? I saw Cobra but it seems old.

EDIT: Setting basic HTML to JLabel and using BufferedImage should work, but i'm not sure if the CSS and Style stuff will get properly handled.

Sample Style

<styles> width: "240", height: "96", background: { type: "solid", color: "#ffffff" } </styles>

4

4 に答える 4

5

私のソリューションには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();
        }
    }
}

結果:

結果

于 2013-06-12T09:27:28.760 に答える
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 に答える
1

空飛ぶ円盤(別名xhtml renderer ) を試してください。多くの CSS 3 機能をサポートし、画像や PDF にレンダリングできます。ただし、その画像レンダリングは実験的なものであり、DPI 設定などの不足があります (1 ポイント == 1 ピクセルを想定)。

于 2013-12-09T09:52:59.097 に答える
0

おそらくWebVectorを使用できます。これは、実際にすべての作業を行うCSSBox レンダリング エンジンに基づいています。このライブラリを使用して Web ページからビットマップ イメージを生成するのは非常に簡単です。または、StackOverflow で同様のトピックを参照してください。

于 2013-06-12T10:01:21.677 に答える