我有一个小的HTML模板,我必须使用它创建一个图像。 HTML由文本和格式组成。生成的图像由其他服务使用。它类似于零售商店的产品价格显示。
是否有可以将HTML
呈现给图像文件或字节数组的Java库?我看到了Cobra,但它看起来很旧。
编辑: 将基本HTML设置为JLabel并使用BufferedImage应该可以工作,但我不确定CSS和Style的内容是否能得到妥善处理。
样本样式
<样式和GT; width:“240”,height:“96”,background:{type:“solid”,color:“#fffffff”}< / styles>
答案 0 :(得分:5)
我的解决方案涉及3个步骤:
BufferedImage
并创建其Graphics
JEditorPane
并调用print(Graphics)
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();
}
}
}
结果:
答案 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像素)。