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

参考文章
【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;
    }

猜你喜欢

转载自blog.csdn.net/qq_20236937/article/details/132043924