Java 通过url获取网页内容、生成文件、生成图片(html2image方式)

您所在的位置:网站首页 获取网站的全部图片 Java 通过url获取网页内容、生成文件、生成图片(html2image方式)

Java 通过url获取网页内容、生成文件、生成图片(html2image方式)

2024-07-11 08:51| 来源: 网络整理| 查看: 265

Java 通过url获取网页内容、生成文件、生成图片(html2image方式) 所需依赖linux系统截图出现中文乱码的解决方法1.本地文件转换为图片2.远程网址文件转换为图片3.远程网址文件下载本地且转换为图片

前提(只适用于普通的纯html截图,css、js会遗漏丢失)

在使用html2image将html转为图片的时候会出现css样式丢失的问题 1.须将所有的css代码以内联样式写到每个标签上 2.不要使用太新的css语法 3.不要使用js进行页面渲染 如果上述几条都试过了,还不行就设置程序等待一段时间 Thread.sleep(6000);

所需依赖 gui.ava html2image 2.0.1 linux系统截图出现中文乱码的解决方法

要找到一个更准确的方法来找到Linux系统中的中文字体,可以遵循以下步骤:

1.先判断Linux系统中是否安装了中文字体

fc-list是Fontconfig软件包提供的一个工具,用于列出系统中所有已安装的字体。 要找到中文字体,可以使用该命令结合:lang=zh选项来列出所有支持中文的字体。这个选项会基于字体的语言标签来筛选字体。

fc-list :lang=zh

2.检查字体文件

如果fc-list :lang=zh没有返回你期望的结果,或者你想要更直接地查看字体文件,可以手动检查字体目录 (如/usr/share/fonts、/usr/local/share/fonts、~/.fonts、~/.local/share/fonts等)。

3.如果没有,则需要安装中文字体

yum install -y fontconfig yum install -y cjkuni-ukai-fonts cjkuni-uming-fonts

4.如果还是不行,再继续 配置字体

sudo vim /etc/fonts/fonts.conf

在 标签内添加中文字体路径:

/usr/share/fonts/cjkuni-ukai/ /usr/share/fonts/cjkuni-uming/

保存并退出。

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; }

4

参考文章 【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 【5】【centos7系统】html2image 转图片中文乱码 https://blog.csdn.net/chechenshi/article/details/138973731 【6】在 CentOS 7 上安装中文字体 https://blog.csdn.net/sunny_day_day/article/details/132829720 【7】HtmlImageGenerator字体乱码问题解决、html2image放linux上乱码问题解决 https://www.cnblogs.com/tlll/p/7853106.html



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3