当前位置: 首页 > 工具软件 > Html2Image > 使用案例 >

Java 后台用html2image实现将html文件转为图片

汤承允
2023-12-01

maven依赖:

        <dependency>
            <groupId>gui.ava</groupId>
            <artifactId>html2image</artifactId>
            <version>0.9</version>
        </dependency>

Java 代码:

    public static void switchToPic(InputStream inputStream, OutputStream out, String fileName)
            throws IOException {
        StringBuffer out1 = new StringBuffer();
        byte[] b = new byte[4096];
        for (int n; (n = inputStream.read(b)) != -1;) {
            out1.append(new String(b, 0, n));
        }
        String html = out1.toString();
        HtmlImageGenerator imageGenerator = new HtmlImageGenerator();
        imageGenerator.getBufferedImage();
        imageGenerator.loadHtml(html);
        //这里如果指定了盘符,可以直接存在本地,自己本地写demo的话可以用
        String imageName = "C:\\jpg\\"+ UUID.randomUUID().toString() + ".png";
        imageGenerator.saveAsImage(fileName);
        //输出流转换 = 将BufferedImage转换为InputStream桥接
        BufferedImage buffimg = imageGenerator.getBufferedImage();
        ByteArrayOutputStream os = new ByteArrayOutputStream();
        ImageIO.write(buffimg, "png", os);
        //输出流将生成的png文件输出到浏览器中
        InputStream input = new ByteArrayInputStream(os.toByteArray());
        byte[] buffer = new byte[512];
        int bytesToRead = -1;
        while ((bytesToRead = input.read(buffer)) != -1) {
            out.write(buffer, 0, bytesToRead);
        }
    }

附:

html2image  api介绍

HtmlImageGenerator Methods

  • loadUrl(url) - Loads HTML from URL object or URL string. (从url载入html)
  • loadHtml(html) - Loads HTML source. (载入本地html)
  • saveAsImage(file) - Save loaded HTML as image. (以图片形式保存html)
  • saveAsHtmlWithMap(fileimageUrl) - Creates an HTML file containing client-side image-map <map>generated from HTML's links. (创建一个HTML文件包含客户端image-map)
  • getLinks() - List all links in the HTML document and their corresponding href, target, title, position and dimension. (列出所有在HTML文档的链接和相应href、目标、头衔、位置和尺寸)
  • getBufferedImage() - Get AWT buffered image of the HTML. (获得awt,html缓冲后的图片)
  • getLinksMapMarkup(mapName) - Get HTML snippet of the client-side image-map <map> generated from the links. (HTML代码段里获得的客户端image-map <地图>产生的链接)
  • get/setOrientation(orientation) - Get/Set document orientation (left-to-right or right-to-left). (get/set文本定位)
  • get/setSize(dimension) - Get/Set size of the generated image. (设置生成图片大小)

遇到的问题:
一、当你的html页面引入外部的CSS文件以及JS文件,生成的图片是无法带有这些动态效果的。也就是说,它不支持复杂的动态特性,只能支持写在html代码里的css效果。

二、当html代码里带有图片时,生成的程序必须有一定的等待时间,否则生成的图片打不开

Thread.sleep(5000);

三、图片格式最好png,反正我试过bmp和jpg的不好使

四、图片路径必须加上file:/// 或者直接写http的url,不支持相对路径写法

五、转换成功后,可能需要再做位图转换

六、我的table边框本地调试样式都是OK的,上了服务器表格的边框不见了,怎么都没有调出来,有朋友研究出来可以共享一下。

 类似资料: