package com.demo.common.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang3.StringUtils;
import org.w3c.dom.Document;
import org.xhtmlrenderer.swing.Java2DRenderer;
import javax.imageio.ImageIO;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
@Slf4j
public class FileUtil {
/**
* @Author MaTingHui
* @Description: 将html静态页面转化为图片
* @Date 2025/6/17 9:49
* @Param [htmlFilePath, imageFilePath, formatName, width, height]
* @return java.io.File
*/
public static File generateHtmlToImage(String htmlFilePath, String imageFilePath, String formatName, int width, int height){
File imageFile = new File(imageFilePath);
if (StringUtils.isEmpty(formatName)) {
formatName = "jpg";
}
String str;
ByteArrayInputStream bin = null;
try {
if (!imageFile.exists()) {
imageFile.createNewFile();
}
str = FileUtils.readFileToString(new File(htmlFilePath), "UTF-8");
byte[] bytes = str.getBytes();
bin = new ByteArrayInputStream(bytes);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(bin);
Java2DRenderer renderer = new Java2DRenderer(document, width, height);
BufferedImage img = renderer.getImage();
return imageFile;
} catch (Exception e) {
log.error("html转图片失败htmlFilePath:{}", htmlFilePath, e);
} finally {
if (bin != null) {
try {
bin.close();
} catch (IOException e) {
log.error("释放资源失败:", e);
}
}
}
return null;
}
}
依赖:
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf-itext5</artifactId>
<version>9.1.6</version>
</dependency>