maven依赖:
<dependency>
<groupId>gui.ava</groupId>
<artifactId>html2image</artifactId>
<version>0.9</version>
</dependency>
Java 代码:
public static void switchToPic(InputStream inputStream, OutputStream out, String fileName)
throws IOException {
StringBuffer out1 = new StringBuffer();
byte[] b = new byte[4096];
for (int n; (n = inputStream.read(b)) != -1;) {
out1.append(new String(b, 0, n));
}
String html = out1.toString();
HtmlImageGenerator imageGenerator = new HtmlImageGenerator();
imageGenerator.getBufferedImage();
imageGenerator.loadHtml(html);
//这里如果指定了盘符,可以直接存在本地,自己本地写demo的话可以用
String imageName = "C:\\jpg\\"+ UUID.randomUUID().toString() + ".png";
imageGenerator.saveAsImage(fileName);
//输出流转换 = 将BufferedImage转换为InputStream桥接
BufferedImage buffimg = imageGenerator.getBufferedImage();
ByteArrayOutputStream os = new ByteArrayOutputStream();
ImageIO.write(buffimg, "png", os);
//输出流将生成的png文件输出到浏览器中
InputStream input = new ByteArrayInputStream(os.toByteArray());
byte[] buffer = new byte[512];
int bytesToRead = -1;
while ((bytesToRead = input.read(buffer)) != -1) {
out.write(buffer, 0, bytesToRead);
}
}
附:
html2image api介绍
遇到的问题:
一、当你的html页面引入外部的CSS文件以及JS文件,生成的图片是无法带有这些动态效果的。也就是说,它不支持复杂的动态特性,只能支持写在html代码里的css效果。
二、当html代码里带有图片时,生成的程序必须有一定的等待时间,否则生成的图片打不开
Thread.sleep(5000);
三、图片格式最好png,反正我试过bmp和jpg的不好使
四、图片路径必须加上file:/// 或者直接写http的url,不支持相对路径写法
五、转换成功后,可能需要再做位图转换
六、我的table边框本地调试样式都是OK的,上了服务器表格的边框不见了,怎么都没有调出来,有朋友研究出来可以共享一下。