需求说明
Java或者SpringBoot项目中,需要将Html(可以是模板引擎例如thymeleaf生成的html)转成图片或者PDF。
实现
如果不是比较复杂的Html(例如Html里没有很多CSS3的语法,flex布局等、背景图,加载js外部css等),那么可以采用一个简单的类库:gui.ava.html2image,因为只需要引入到pom.xml,几行代码就可以搞定生成图片或者PDF的问题了。
使用方法:
pom.xml 增加如下依赖(使用的最新版是2.0.1,有很多地方还是显示的0.9版本,最近版本2.0.1在渲染html上要比0.9好很多):
<dependency> <groupId>gui.ava</groupId> <artifactId>html2image</artifactId> <version>2.0.1</version> </dependency>
生成PDF或者图片的代码片段示例如下:
// 加载html Html2Image html2Image = Html2Image.fromHtml("<h4>Hello World</h4>"); // 转成BufferedImage html2Image.getImageRenderer().getBufferedImage(); // 存成图片(注意是png图片),saveImage还可以接收OutputStream,变成流 html2Image.getImageRenderer().saveImage("/path/to/image.png"); // 存成pdf html2Image.getPdfRenderer().saveToPDF("/path/to/pdf.pdf");
这样一个简单的图片或者pdf就生成了,代码和实现都很简洁,看你的需求是否够用,在比较复杂的html下内容还是会失真的。如果想要和Chrome下看到的网页一模一样,那这个就不合适了,可以利用Google的Pupperteer来截图,需要另外起一个Docker服务,截图效果非常完美,详见:https://blog.terrynow.com/2022/10/29/use-node-puppeteer-docker-mingalevme-screenshoter-as-service-to-fullscreen-screenshot-and-support-chinese/
文章评论