Freemarker模板

java 生成word文档 简单示例

  注:这个示例是将数据写入到 ftl 并生成 word文件 

 1.先新建一个模板文档 将需要填充的字段写入进去 如下:

  

 

 

 2.前端代码:

  1.将模板已任何形式画好之后转换为ftl尾缀的文件 (我用的word,这地方我直接更改了后缀,效果一样)

  2.传入的模板路径要到路径层级,不要文件尾缀

   

 

 3.后端代码:

@GetMapping("getWord")
    public String createHtml(String ossPath, String ftlPath, String ftlName, Map<String, Object> jsonObject) throws Exception {

        //设置ftl模板 (到文件夹那一层即可)
        Configuration configuration = new Configuration();
        configuration.setDefaultEncoding("utf-8");
        configuration.setDirectoryForTemplateLoading(new File(ftlPath));

        //生成文件名字
        String fileName = UUID.randomUUID().toString().replace("-", "") + this.lessThan();
        //生成文件路径          doc  wps  word  文件路径
        String filePath = this.getProjectPath() + fileName;
        File buildFile = new File(filePath);
        if (!buildFile.exists()) {
            buildFile.mkdir();
        }

        //构建文件画布
        String file = filePath + "/" + fileName + ".doc";
        File outFile = new File(file);
        Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240);

        //数据填充
        configuration.getTemplate(ftlName, "utf-8").process(jsonObject, out);
        out.close();
        buildFile.delete();

        //存储到某个地方如 oss 或者本地 这地方我没有做处理  只是demo
        //删除层级
        //this.deleteDir(file);

        return file;
    }

    //获取当前层级目录
    private String getProjectPath() {
        String property = System.getProperty("user.dir");
        String substring = property.substring(property.lastIndexOf("\\") + 1);
        return property.substring(0, property.lastIndexOf(substring)).replace("\\", "/");

    }

    //删除层级
    private boolean deleteDir(File dir) {
        String[] children = dir.list();
        for (String child : children) {
            boolean success = deleteDir(new File(dir, child));
            if (!success) {
                return false;
            }
        }
        return dir.delete();
    }

    //转换时分秒
    public String lessThan() {
        return new SimpleDateFormat("HHmmss").format(new Date());
    }

 

 

 

 

posted @ 2020-09-28 16:02  RM-RF?  阅读(167)  评论(0编辑  收藏  举报