最近遇到一个需求,需要将网页转成图片,一番折腾之后,发现了2中方法:
- html2image
- cssbox
1)html2image
示例代码如下:
HtmlImageGenerator imageGenerator = new HtmlImageGenerator();
String htmlstr = "<p>页面内容</p>";
imageGenerator.loadHtml(htmlstr);
imageGenerator.getBufferedImage();
imageGenerator.saveAsImage("d:/hello-world.png");
imageGenerator.saveAsHtmlWithMap("hello-world.html", "hello-world.png");
maven:
<dependency>
<groupId>com.github.xuwei-k</groupId>
<artifactId>html2image</artifactId>
<version>0.1.0</version>
</dependency>
大致看了下它的源码,只有5个类, 很简单,缺点是对css的支持非常不好。故放弃了使用。
2)cssbox
官网:http://cssbox.sourceforge.net/
示例代码如下:
ImageRenderer render = new ImageRenderer();
FileOutputStream out = new FileOutputStream(new File("D:/html.png"));
render.renderURL(url, out, ImageRenderer.Type.PNG);
maven:
<dependency>
<groupId>net.sf.cssbox</groupId>
<artifactId>cssbox</artifactId>
<version>4.12</version>
</dependency>
调用非常简单,能支持较多的css。当我在本地测试通过正得意时, 部署上线上linux系统,又发现一个坑爹的问题,导出的图片,文字变成乱码了。。
解决方案:
- 在网上下载中文字体,我这下载的是微软雅黑msyh.rar
- 将msyh.rar放入 /usr/share/fonts/zh_CN, zh_CN 文件夹需要自己创建。
- cd %JAVA_HOME%/jre/lib/fonts
- mkdir fallback
- 将msyh.ttf字体复制到fallback中