最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java將html轉(zhuǎn)成圖片代碼實(shí)例(html2image)

 更新時間:2024年09月12日 10:58:58   作者:歸去來?兮  
這篇文章主要介紹了java將html轉(zhuǎn)成圖片的相關(guān)資料,在Java開發(fā)中,將HTML轉(zhuǎn)換為圖片可以使用html2image庫,文中通過代碼及圖文介紹的非常詳細(xì),需要的朋友可以參考下

前言

最近有一個需求需要根據(jù)指定的樣式生成圖片,使用java原生技術(shù)有些麻煩,所以上網(wǎng)搜了下案例,最后發(fā)現(xiàn)最好用的還是html2image,這里進(jìn)行簡單總結(jié)下。

1.導(dǎo)入jar

 <!-- 用于將html轉(zhuǎn)圖片-->
 <dependency>
     <groupId>gui.ava</groupId>
     <artifactId>html2image</artifactId>
     <version>2.0.1</version>
 </dependency>

2.代碼

下面是示例代碼,這里使用String的方式傳入html信息,除了直接傳入還支持傳入文件流、傳入文件等其他方式,差距不大,這里不列舉其他方式的細(xì)節(jié)了。

import gui.ava.html.parser.HtmlParser;
import gui.ava.html.parser.HtmlParserImpl;
import gui.ava.html.renderer.ImageRenderer;
import gui.ava.html.renderer.ImageRendererImpl;

public class TestTableToImage {
    public static void main(String[] args) throws Exception {
        HtmlParser htmlParser = new HtmlParserImpl();
        String HtmlTemplateStr = "<html lang=\"zh-CN\">\n" +
                "<head>\n" +
                "    <meta charset=\"UTF-8\">\n" +
                "    <title>入庫單</title>\n" +
                "</head>\n" +
                "<body>\n" +
                "\t<!--外層的表格 -->\n" +
                "\t<table style=\"border: 2px solid black;padding: 10px \"  cellpadding=\"5\" align=\"center\" >\n" +
                "\t\n" +
                "\t\t<tr >\n" +
                "\t\t\t<th style=\"font-size:25px;height: 60px;\" align=\"center\">入庫單</th>\n" +
                "\t\t</tr>\n" +
                "\t\t\n" +
                "\t\t<tr>\n" +
                "\t\t\t<th>\n" +
                "\t\t\t\t<table border=\"1\" style=\"border-color: #ccc;\" cellspacing=\"0\" cellpadding=\"15\" width=\"900px\">\n" +
                "\t\t\t\t\t<tr  style=\"color: #696969;height: 60px;\">\n" +
                "\t\t\t\t\t\t<th style=\"width: 150px;\">調(diào)度單號</th> <th colspan=\"2\" style=\"width: 300px;\">調(diào)度單號22</th>\n" +
                "\t\t\t\t\t\t<th style=\"width: 150px;\">客戶名稱</th> <th colspan=\"2\" style=\"width: 300px;\">客戶名稱22</th>\n" +
                "\t\t\t\t\t</tr>\n" +
                "\t\t\t\t\t\n" +
                "\t\t\t\t\t<tr  style=\"color: #696969;height: 50px;\">\n" +
                "\t\t\t\t\t\t<th >車牌照號</th> <th colspan=\"2\" style=\"width: 300px;\">車牌照號22</th>\n" +
                "\t\t\t\t\t\t<th>裝運(yùn)時間</th> <th colspan=\"2\" style=\"width: 300px;\">裝運(yùn)時間22</th>\n" +
                "\t\t\t\t\t</tr>\n" +
                "\t\t\t\t\t<tr height=\"50px;height: 50px;\">\n" +
                "\t\t\t\t\t\t<td colspan=\"6\" style=\"font-size:23px;color: #696969\" align=\"center\">貨物信息</td>\n" +
                "\t\t\t\t\t</tr>\n" +
                "\t\t\t\t\t<tr  style=\"color: #696969;height: 50px;\">\n" +
                "\t\t\t\t\t\t<th>鋼卷號</th> <th colspan=\"2\" style=\"width: 300px;\">鋼卷號22</th>\n" +
                "\t\t\t\t\t\t<th>磅單號</th> <th colspan=\"2\" style=\"width: 300px;\">磅單號22</th>\n" +
                "\t\t\t\t\t\t\n" +
                "\t\t\t\t\t</tr>\n" +
                "\t\t\t\t\t<tr  style=\"color: #696969;height: 50px;\">\n" +
                "\t\t\t\t\t\t<th>材質(zhì)</th><th style=\"width: 150px;\">材質(zhì)22</th>\n" +
                "\t\t\t\t\t\t<th>規(guī)格型號</th><th style=\"width: 150px;\">規(guī)格型號22</th>\n" +
                "\t\t\t\t\t\t<td>貨物名稱</td><th style=\"width: 150px;\">貨物名稱22</th>\n" +
                "\t\t\t\t\t</tr>\n" +
                "\t\t\t\t\t<tr  style=\"color: #696969;height: 50px;\" align=\"center\">\n" +
                "\t\t\t\t\t\t\n" +
                "\t\t\t\t\t\t<td>件數(shù)</td> <th colspan=\"2\" style=\"width: 300px;\">件數(shù)22</th>\n" +
                "\t\t\t\t\t\t<td>重量</td> <th colspan=\"2\" style=\"width: 300px;\">重量22</th>\n" +
                "\t\t\t\t\t</tr>\n" +
                "\t\t\t\t\t<tr  style=\"color: #696969;height: 50px;\" align=\"center\">\n" +
                "\t\t\t\t\t\t<td colspan=\"6\" style=\"font-size:23px;color: #696969\">客戶信息</td>\n" +
                "\t\t\t\t\t</tr>\n" +
                "\t\t\t\t\t<tr  style=\"color: #696969;height: 50px;\">\n" +
                "\t\t\t\t\t\t<th>收貨聯(lián)系人</th> <th colspan=\"2\" style=\"width: 300px;\">收貨聯(lián)系人22</th>\n" +
                "\t\t\t\t\t\t<th>收貨人電話</th> <th colspan=\"2\" style=\"width: 300px;\">收貨人電話22</th>\n" +
                "\t\t\t\t\t</tr>\n" +
                "\t\t\t\t\t<tr  style=\"color: #696969;height: 50px;\">\n" +
                "\t\t\t\t\t\t<th >庫房名稱</th> <th colspan=\"2\" style=\"width: 300px;\">庫房名稱22</th>\n" +
                "\t\t\t\t\t\t<th >庫房地址</th> <th colspan=\"2\" style=\"width: 300px;\">庫房地址22</th>\n" +
                "\t\t\t\t\t</tr>\n" +
                "\t\t\t\t\t\n" +
                "\t\t\t\t\t<!--\n" +
                "\t\t\t\t\t<tr style=\"color: #696969;height: 50px;\">\n" +
                "\t\t\t\t\t\t<th >收貨地點(diǎn)</th> <th colspan=\"5\" style=\"width: 750px;\">收貨地點(diǎn)22</th>\n" +
                "\t\t\t\t\t</tr>\n" +
                "\t\t\t\t\t -->\n" +
                "\t\t\t\t</table>\n" +
                "\t\t\t</th>\n" +
                "\t\t\t\n" +
                "\t\t</tr>\n" +
                "\t\t\n" +
                "\t\t<tr style=\"height: 150px;\">\n" +
                "\t\t\t<th></th>\n" +
                "\t\t</tr>\n" +
                "\t\t\n" +
                "\t</table>\n" +
                "</body>\n" +
                "</html>";
        htmlParser.loadHtml(HtmlTemplateStr);

        ImageRenderer imageRenderer = new ImageRendererImpl(htmlParser);
        imageRenderer.setWidth(955);
        imageRenderer.saveImage("D:\\66.png");

    }
}

3.展示結(jié)果

執(zhí)行上面的代碼生成的圖片如下,可以看到效果還是不錯的,相比于其他的三方j(luò)ar來說這個jar還是挺方便,筆者也是嘗試了多個jar最后決定用的這個三方包,推進(jìn)使用,可以看到生成的效果還是不錯的。

4.注意事項(xiàng)

我去maven倉庫中找這個jar時,發(fā)現(xiàn)這個包已經(jīng)很多年沒有更新了,不過還是很好用,可以不用在意這個事。

  • 需要注意的是有一些格式如果不放到style中直接寫可能識別不了,所以在使用時盡量所有格式寫在style中,防止不生效
  • 此外還有一點(diǎn),自動生成圖片的寬度需要自己調(diào)整,這個寬度可能會有一些白邊,使用imageRenderer.setWidth進(jìn)行調(diào)整寬度即可

附:轉(zhuǎn)換jpg變紅的問題處理

public class ImageRendererSubImpl extends ImageRendererImpl {

    public ImageRendererSubImpl(DocumentHolder documentHolder) {
        super(documentHolder);
    }

    private String getImageFormat(String filename) {
        if (this.getImageFormat() != null) {
            return this.getImageFormat();
        } else {
            return filename != null ? FormatNameUtil.formatForFilename(filename) : FormatNameUtil.getDefaultFormat();
        }
    }

    private FSImageWriter getImageWriter(String imageFormat) {
        FSImageWriter imageWriter = new FSImageWriter(imageFormat);
        imageWriter.setWriteCompressionMode(this.getWriteCompressionMode());
        imageWriter.setWriteCompressionQuality(this.getWriteCompressionQuality());
        imageWriter.setWriteCompressionType(this.getWriteCompressionType());
        return imageWriter;
    }

    public void saveImage(File file) {
        try {
            BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file));
            this.save(outputStream, file.getName(), true);
        } catch (IOException var3) {
            throw new RenderException("IOException while rendering image to " + file.getAbsolutePath(), var3);
        }
    }

    public void saveImage(String filename) {
        this.saveImage(new File(filename));
    }

    private void save(OutputStream outputStream, String filename, boolean closeStream) {
        try {
            String imageFormat = this.getImageFormat(filename);
            FSImageWriter imageWriter = this.getImageWriter(imageFormat);
            BufferedImage bufferedImage = this.getBufferedImage(getImageType(imageFormat));
            imageWriter.write(bufferedImage, outputStream);
        } catch (IOException var15) {
            throw new RenderException("IOException while rendering image", var15);
        } finally {
            if (closeStream) {
                try {
                    outputStream.close();
                } catch (IOException var14) {
                    ;
                }
            }

        }
    }

    /**
     * 獲取圖像類型
     * 根據(jù)圖像的格式
     */
    public int getImageType(String imageFormat){
        if ("jpg".equalsIgnoreCase(imageFormat)){
            return BufferedImage.TYPE_3BYTE_BGR;
        }
        if ("bmp".equalsIgnoreCase(imageFormat)){
            return BufferedImage.TYPE_INT_RGB;
        }
        return BufferedImage.BITMASK;
    }

}

總結(jié)

到此這篇關(guān)于java將html轉(zhuǎn)成圖片的文章就介紹到這了,更多相關(guān)java將html轉(zhuǎn)成圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Mybatis-plus在新增或修改時如何自動插入或修改某個字段值

    Mybatis-plus在新增或修改時如何自動插入或修改某個字段值

    文章講述了MyBatis-Plus中MetaObjectHandler接口的使用方法,通過在實(shí)體類中添加@TableField注解并實(shí)現(xiàn)MetaObjectHandler接口的insertFill和updateFill方法,為新增和更新操作時自動填充公共字段如createTime、updateTime等的默認(rèn)值
    2026-04-04
  • Java?String類和StringBuffer類的區(qū)別介紹

    Java?String類和StringBuffer類的區(qū)別介紹

    這篇文章主要介紹了Java?String類和StringBuffer類的區(qū)別,?關(guān)于java的字符串處理我們一般使用String類和StringBuffer類有什么不同呢,下面我們一起來看看詳細(xì)介紹吧
    2022-03-03
  • Java實(shí)現(xiàn)單向鏈表的基本功能詳解

    Java實(shí)現(xiàn)單向鏈表的基本功能詳解

    這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)單向鏈表基本功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • java如何遠(yuǎn)程加載class文件

    java如何遠(yuǎn)程加載class文件

    這篇文章主要介紹了java如何遠(yuǎn)程加載class文件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java中的CompletableFuture使用解析

    Java中的CompletableFuture使用解析

    這篇文章主要介紹了Java中的CompletableFuture使用解析,為什么CompletableFuture要定制化線程池,因?yàn)槟J(rèn)的線程池是ForkJoinPool,這個線程池的最大線程數(shù)默認(rèn)是你的電腦的線程數(shù)數(shù)減1,假如我線程電腦是4核8線程的,ForkJoinPool的最大線程數(shù)就是7,需要的朋友可以參考下
    2024-01-01
  • IDEA中Mybatis的MGB使用逆向工程配置的詳細(xì)教程

    IDEA中Mybatis的MGB使用逆向工程配置的詳細(xì)教程

    這篇文章主要介紹了IDEA中Mybatis的MGB使用逆向工程配置,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • 簡單了解java數(shù)組傳遞方法

    簡單了解java數(shù)組傳遞方法

    這篇文章主要介紹了簡單了解java數(shù)組傳遞方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • Java Spring AOP詳解

    Java Spring AOP詳解

    這篇文章主要介紹了Java的Spring框架中的AOP實(shí)現(xiàn)實(shí)例,AOP面向切面編程其實(shí)也可以被看作是一個設(shè)計(jì)模式去規(guī)范項(xiàng)目的結(jié)構(gòu),需要的朋友可以參考下
    2021-09-09
  • Java實(shí)現(xiàn)后端跨域的常見解決方案

    Java實(shí)現(xiàn)后端跨域的常見解決方案

    跨源資源共享(CORS——Cross-Origin Resource Sharing,跨源資源共享,或通俗地譯為跨域資源共享)是一種基于 HTTP 頭的機(jī)制,跨域的解決方案有很多種,前后端都有,本文給大家主要介紹Java實(shí)現(xiàn)后端跨域的常見解決方案,需要的朋友可以參考下
    2024-04-04
  • Spring事務(wù)Transaction配置的五種注入方式詳解

    Spring事務(wù)Transaction配置的五種注入方式詳解

    這篇文章主要介紹了Spring事務(wù)Transaction配置的五種注入方式詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-04-04

最新評論

明水县| 亳州市| 富川| 太谷县| 社会| 朝阳县| 年辖:市辖区| 宜州市| 巢湖市| 连江县| 宣汉县| 吴堡县| 清河县| 平阴县| 康乐县| 昌平区| 阿拉善左旗| 万宁市| 怀宁县| 柳林县| 兴义市| 嘉鱼县| 铁岭县| 龙江县| 南和县| 临高县| 长兴县| 肥乡县| 宁蒗| 靖远县| 叶城县| 江达县| 观塘区| 墨玉县| 新巴尔虎右旗| 镇安县| 县级市| 台东市| 常德市| 惠安县| 揭阳市|