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

Java模板動(dòng)態(tài)生成word文件的方法步驟

 更新時(shí)間:2021年07月05日 09:25:53   作者:麋途知鹿  
最近項(xiàng)目中需要根據(jù)模板生成word文檔,模板文件也是word文檔。本文使用使用freemarker模板生成word文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近項(xiàng)目中需要根據(jù)模板生成word文檔,模板文件也是word文檔。當(dāng)時(shí)思考一下想用POI API來(lái)做,但是覺(jué)得用起來(lái)相對(duì)復(fù)雜。后來(lái)又找了一種方式,使用freemarker模板生成word文件,經(jīng)過(guò)嘗試覺(jué)得還是相對(duì)簡(jiǎn)單易行的。

使用freemarker模板生成word文檔主要有這么幾個(gè)步驟

1、創(chuàng)建word模板:因?yàn)槲翼?xiàng)目中用到的模板本身是word,所以我就直接編輯word文檔轉(zhuǎn)成freemarker(.ftl)格式的。

2、將改word文件另存為xml格式,注意使用另存為,不是直接修改擴(kuò)展名。

3、將xml文件的擴(kuò)展名改為ftl

4、編寫(xiě)java代碼完成導(dǎo)出

使用到的jar:freemarker.jar (2.3.28) ,其中Configuration對(duì)象不推薦直接new Configuration(),仔細(xì)看Configuration.class文件會(huì)發(fā)現(xiàn),推薦的是 Configuration(Version incompatibleImprovements) 這個(gè)構(gòu)造方法,具體這個(gè)構(gòu)造方法里面?zhèn)鞯木褪荲ersion版本類,而且版本號(hào)不能低于2.3.0

閑言碎語(yǔ)不再講,直接上代碼

 public static void exportDoc() {
        String picturePath = "D:/image.png";
        Map<String, Object> dataMap = new HashMap<String, Object>();
        dataMap.put("brand", "海爾");
        dataMap.put("store_name", "海爾天津");
        dataMap.put("user_name", "小明");

        //經(jīng)過(guò)編碼后的圖片路徑
        String image = getWatermarkImage(picturePath);
        dataMap.put("image", image);

        //Configuration用于讀取ftl文件
        Configuration configuration = new Configuration(new Version("2.3.0"));
        configuration.setDefaultEncoding("utf-8");

        Writer out = null;
        try {
            //輸出文檔路徑及名稱
            File outFile = new File("D:/導(dǎo)出優(yōu)惠證明.doc");
            out = new BufferedWriter(new OutputStreamWriter(new
            FileOutputStream(new File("outFile")), "utf-8"), 10240);
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        // 加載文檔模板
        Template template = null;
        try {
            //指定路徑,例如C:/a.ftl 注意:此處指定ftl文件所在目錄的路徑,而不是ftl文件的路徑
            configuration.setDirectoryForTemplateLoading(new File("C:/"));
            //以u(píng)tf-8的編碼格式讀取文件
            template = configuration.getTemplate("導(dǎo)出優(yōu)惠證明.ftl", "utf-8");
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("文件模板加載失?。?, e);
        }

        // 填充數(shù)據(jù)
        try {
            template.process(dataMap, out);
        } catch (TemplateException e) {
            e.printStackTrace();
            throw new RuntimeException("模板數(shù)據(jù)填充異常!", e);
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("模板數(shù)據(jù)填充異常!", e);
        } finally {
            if (null != out) {
                try {
                    out.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    throw new RuntimeException("文件輸出流關(guān)閉異常!", e);
                }
            }
        }
    }

因?yàn)楹芏鄷r(shí)候我們根據(jù)模板生成文件需要添加水印,也就是插入圖片

/***
 * 處理圖片
 * @param watermarkPath 圖片路徑  D:/image.png
 * @return
 */
private String getWatermarkImage(String watermarkPath) {
    InputStream in = null;
    byte[] data = null;
    try {
        in = new FileInputStream(watermarkPath);
        data = new byte[in.available()];
        in.read(data);
        in.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    BASE64Encoder encoder = new BASE64Encoder();
    return encoder.encode(data);
}

注意點(diǎn):

插入圖片后的word轉(zhuǎn)化為ftl模板文件(ps:水印圖片可以在word上調(diào)整到自己想要的大小,然后在執(zhí)行下面的步驟)

1、先另存為xml

2、將xml擴(kuò)展名改為ftl

3、打開(kāi)ftl文件, 搜索w:binData 或者 png可以快速定位圖片的位置,圖片 已經(jīng)編碼成0-Z的字符串了, 如下:

5、 將上述0-Z的字符串全部刪掉,寫(xiě)上${image}(變量名隨便寫(xiě),跟dataMap里的key保持一致)后保存

6、也是創(chuàng)建一個(gè)Map, 將數(shù)據(jù)存到map中,只不過(guò)我們要把圖片用代碼進(jìn)行編碼,將其也編成0-Z的字符串,代碼請(qǐng)看上邊

至此一個(gè)簡(jiǎn)單的按照模板生成word并插入圖片(水?。┕δ芑就瓿伞?br />

到此這篇關(guān)于Java模板動(dòng)態(tài)生成word文件的方法步驟的文章就介紹到這了,更多相關(guān)Java 模板動(dòng)態(tài)生成word內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot一個(gè)非常蛋疼的無(wú)法啟動(dòng)的問(wèn)題解決

    SpringBoot一個(gè)非常蛋疼的無(wú)法啟動(dòng)的問(wèn)題解決

    這篇文章主要介紹了SpringBoot一個(gè)非常蛋疼的無(wú)法啟動(dòng)的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • java如何通過(guò)FileOutputStream字節(jié)流向文件中寫(xiě)數(shù)據(jù)

    java如何通過(guò)FileOutputStream字節(jié)流向文件中寫(xiě)數(shù)據(jù)

    這篇文章主要介紹了java如何通過(guò)FileOutputStream字節(jié)流向文件中寫(xiě)數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • spring boot 測(cè)試單元修改數(shù)據(jù)庫(kù)不成功的解決

    spring boot 測(cè)試單元修改數(shù)據(jù)庫(kù)不成功的解決

    這篇文章主要介紹了spring boot 測(cè)試單元修改數(shù)據(jù)庫(kù)不成功的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • 使用Java DOM解析器修改XML文件內(nèi)容的操作方法

    使用Java DOM解析器修改XML文件內(nèi)容的操作方法

    在Java中,XML文件的解析和修改可以通過(guò)多種方法實(shí)現(xiàn),其中DOM(Document Object Model)是一種常用的方式,在本文中,我們將介紹如何使用Java DOM解析器修改XML文件中的內(nèi)容,并給出一個(gè)具體的示例,需要的朋友可以參考下
    2024-08-08
  • Java?Selenide?簡(jiǎn)介與用法

    Java?Selenide?簡(jiǎn)介與用法

    Selenium?是目前用的最廣泛的Web?UI?自動(dòng)化測(cè)試框架,本文給大家介紹下Java?Selenide使用,感興趣的朋友一起看看吧
    2022-01-01
  • Reactive Programming入門(mén)概念詳解

    Reactive Programming入門(mén)概念詳解

    這篇文章主要為大家介紹了Reactive Programming入門(mén)概念詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 基于springboot的flowable工作流實(shí)戰(zhàn)流程分析

    基于springboot的flowable工作流實(shí)戰(zhàn)流程分析

    這篇文章主要介紹了基于springboot的flowable工作流實(shí)戰(zhàn)流程分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • Spring?Boot日志基礎(chǔ)使用之如何設(shè)置日志級(jí)別

    Spring?Boot日志基礎(chǔ)使用之如何設(shè)置日志級(jí)別

    這篇文章主要介紹了Spring?Boot日志基礎(chǔ)使用設(shè)置日志級(jí)別的方法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • 淺析如何在Java應(yīng)用中優(yōu)雅的發(fā)送短信

    淺析如何在Java應(yīng)用中優(yōu)雅的發(fā)送短信

    很多業(yè)務(wù)場(chǎng)景里,我們都需要發(fā)送短信,比如登陸驗(yàn)證碼、告警、營(yíng)銷通知、節(jié)日祝福等等,這篇文章,我們聊聊 Java 應(yīng)用中如何優(yōu)雅的發(fā)送短信,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2023-11-11
  • IDEA上運(yùn)行Flink任務(wù)的實(shí)戰(zhàn)教程

    IDEA上運(yùn)行Flink任務(wù)的實(shí)戰(zhàn)教程

    這篇文章主要介紹了IDEA上運(yùn)行Flink任務(wù)的實(shí)戰(zhàn)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10

最新評(píng)論

虞城县| 迭部县| 上杭县| 青州市| 洞头县| 扶沟县| 福建省| 郑州市| 浮梁县| 新丰县| 常山县| 荔浦县| 泾源县| 永康市| 东阿县| 门头沟区| 无棣县| 万源市| 内江市| 白城市| 璧山县| 乐山市| 濮阳县| 上蔡县| 怀集县| 东莞市| 什邡市| 宜城市| 镇江市| 靖州| 石台县| 射阳县| 武山县| 勐海县| 正宁县| 莱芜市| 阿拉善左旗| 平利县| 江门市| 刚察县| 潜山县|