参考文章
【1】java转化html标签 java将html页面转化为图片
https://blog.51cto.com/u_13360/6326010
【2】Java——获取网页内容并在本地生成HTML文件
https://blog.51cto.com/u_12660945/5163153
【3】Java访问网络url,获取网页的html代码
https://www.cnblogs.com/weilunhui/p/3854249.html
【4】限制前提
https://blog.csdn.net/qq_43376347/article/details/127784268
前提(只适用于普通的纯html截图,css、js会遗漏丢失)
在使用html2image将html转为图片的时候会出现css样式丢失的问题
1.须将所有的css代码以内联样式写到每个标签上
2.不要使用太新的css语法
3.不要使用js进行页面渲染
如果上述几条都试过了,还不行就设置程序等待一段时间
Thread.sleep(6000);
所需依赖
<dependency>
<groupId>gui.ava</groupId>
<artifactId>html2image</artifactId>
<version>2.0.1</version>
</dependency>
1.本地文件转换为图片
//将本地的文本读取到String中
String html = FileUtil.readString("D:\\test\\1\\20211009103530.html", StandardCharsets.UTF_8);
//创建html2Image对象
Html2Image html2Image = Html2Image.fromHtml(html);
//生成image渲染器
ImageRenderer imageRenderer = html2Image.getImageRenderer()
.setImageType("png")
.setWidth(3000)
.setHeight(2100);
//生成图片
imageRenderer.saveImage("D:\\test\\hello-png-5.png");
2.远程网址文件转换为图片
/**
* 直接将访问网址转成图片保存本地
*
* @param hzdtpwzPath 文件夹位置
* @param ycurl 访问的地址
* @throws Exception
* @return 图片完整位置
*/
public String wstest(String hzdtpwzPath, String ycurl) throws Exception {
String html = "";
URL url = new URL(ycurl);
InputStream in = url.openStream();
InputStreamReader isr = new InputStreamReader(in);
BufferedReader bufr = new BufferedReader(isr);
String str;
while ((str = bufr.readLine()) != null) {
html += str;
}
bufr.close();
isr.close();
in.close();
System.out.println("===========");
System.out.println(html);
//创建html2Image对象
Html2Image html2Image = Html2Image.fromHtml(html);
//生成image渲染器
ImageRenderer imageRenderer = html2Image.getImageRenderer()
.setImageType("png")
.setWidth(3000)
.setHeight(2100);
//图片的名称及后缀
String tpwz = hzdtpwzPath + ".png";
//生成图片
imageRenderer.saveImage(tpwz);
return tpwz;
}
如果需要带cookie,以下方式可以实现
/**
* 直接将访问网址转成图片保存本地 (带cookie)
*
* @param hzdtpwzPath 文件夹位置
* @param ycurl 访问的地址
* @throws Exception
* @return 图片完整位置
*/
public String wstest(String hzdtpwzPath, String ycurl) throws Exception {
URL url = new URL(ycurl);
//加cooker
URLConnection conn = url.openConnection();
conn.setRequestProperty("cookie", "token=" + nhhzdtoken);
conn.setDoOutput(true);
InputStream inS = conn.getInputStream();
InputStreamReader inR = new InputStreamReader(inS);
BufferedReader br = new BufferedReader(inR);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = br.readLine()) != null) {
sb.append(line);
}
br.close();
inR.close();
inS.close();
//将本地的文本读取到String中
//String html = FileUtil.readString("C:\\Users\\HONOR\\Desktop\\受理回执单.html", StandardCharsets.UTF_8);
String html = sb.toString();
//创建html2Image对象
Html2Image html2Image = Html2Image.fromHtml(html);
//Html2Image html2Image = Html2Image.fromURI(new URI(ycurl));
//生成image渲染器
ImageRenderer imageRenderer = html2Image.getImageRenderer()
.setImageType("png")
.setWidth(3000)
.setHeight(2100);
//图片的名称
String tpwz = hzdtpwzPath + ".png";
//生成图片
imageRenderer.saveImage(tpwz);
return tpwz;
}
3.远程网址文件下载本地且转换为图片
/**
* 将访问的地址生成html文件且存本地
*
* @param hzdtpwzPath 文件夹位置
* @param ycurl 访问的地址
* @return 具体的html文件位置
* @throws IOException
*/
public String saveHtml(String hzdtpwzPath, String ycurl) throws IOException {
String htmlFilepath = hzdtpwzPath + ".html";
System.out.println("html文件位置:" + htmlFilepath);
File dest = new File(htmlFilepath);
InputStream is;//接收字节输入流
FileOutputStream fos = new FileOutputStream(dest);//字节输出流
URL wangyi = new URL(ycurl);
is = wangyi.openStream();
BufferedInputStream bis = new BufferedInputStream(is);//为字节输入流加缓冲
BufferedOutputStream bos = new BufferedOutputStream(fos);//为字节输出流加缓冲
int length;
byte[] bytes = new byte[1024 * 20];
while ((length = bis.read(bytes, 0, bytes.length)) != -1) {
fos.write(bytes, 0, length);
}
bos.close();
fos.close();
bis.close();
is.close();
return htmlFilepath;
}
/**
* 将访问网址转成本地html文件再转为图片保存本地
*
* @param hzdtpwzPath 文件夹位置
* @param ycurl 远程地址
* @throws Exception
*/
public String wstest2(String hzdtpwzPath, String ycurl) throws Exception {
String s = saveHtml(hzdtpwzPath, ycurl);
//将本地的文本读取到String中
String html = FileUtil.readString(s, StandardCharsets.UTF_8);
//创建html2Image对象
Html2Image html2Image = Html2Image.fromHtml(html);
//生成image渲染器
ImageRenderer imageRenderer = html2Image.getImageRenderer()
.setImageType("png")
.setWidth(3000)
.setHeight(2100);
//图片的名称及后缀
String tpwz = hzdtpwzPath + ".png";
//生成图片
imageRenderer.saveImage(tpwz);
return tpwz;
}