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()); }