freemarker使用ftl生成word

使用freemarker生成word相對來說是一種比較簡單的方式,下面來說說使用ftl生成word的方法。

 

代碼和ftl存放地址:https://download.csdn.net/download/caileigood/12513200

1、編寫需要生成的word模板,如下圖

2、將需要替換的內容修改爲參數形式,如下圖

3、將word另存爲xml,格式化,並將錯亂的參數修改正確,如下圖

修改後的參數,如下圖

4、將xml修改爲ftl

5、生成代碼

public class Test {
    public static void main(String[] args) {

        Map<String, Object> dataMap = new HashMap<>();
        dataMap.put("title", "關於生成word的步驟介紹");
        List<Map<String, Object>> versionList = new ArrayList<>();
        //這只是一個demo,不必較真
        for (int i = 0; i < 5; i++) {
            Map<String, Object> version = new HashMap<>();
            version.put("author", "作者" + (i + 1));
            version.put("date", "2020-06-0" + (i + 1));
            version.put("version", "v1." + i);
            versionList.add(version);
        }
        dataMap.put("versionList", versionList);
        dataMap.put("firstStep", "完成word模板");
        dataMap.put("secondStep", "將word另存爲xml");
        dataMap.put("thirdStep", "打開xml將其格式化,調整刪除過程中錯亂的參數");
        dataMap.put("fourthStep", "將xml文件後綴修改爲ftl");
        dataMap.put("fifthStep", "組織數據");
        dataMap.put("sixthStep", "生成word");


        try {

            Configuration configure = new Configuration();
            configure.setDefaultEncoding("utf-8");

            //加載需要裝填的模板
            Template template=null;

            //設置模板裝置方法和路徑,
            configure.setDirectoryForTemplateLoading(new File("/demo"));


            //設置異常處理器
            configure.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);

            //定義Template對象,注意模板類型名字與downloadType要一致
            template=configure.getTemplate("demo.ftl");

            File outFile=new File("/demo/word模板生成demo.doc");
            Writer out=null;
            //指定編碼表需使用轉換流,轉換流對象要接收一個字節輸出流
            out=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
            template.process(dataMap, out);
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TemplateException e) {
            e.printStackTrace();
        }


    }

}

6、最後生成的word

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章