pom.xml
<!-- Poi-tl Word 模板引擎--><dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.9.1</version></dependency>
自己写一个word基础模版 然后需要替换的值用占位符{{name}}代替
代码
package com.xgl.springboot.controller;import com.deepoove.poi.XWPFTemplate;
import com.xgl.springboot.config.AppConfigManager;
import org.springframework.http.ResponseEntity;
import org.springframework.util.Base64Utils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Base64;
import java.util.HashMap;
import java.util.Map;@RestController
public class FileController {@PostMapping("/convertFileToBase64")public ResponseEntity<?> convertFileToBase64(@RequestParam("file") MultipartFile file,@RequestParam("params") HashMap<String, Object> params) throws IOException {if (file.isEmpty()) {return ResponseEntity.badRequest().body("File is empty");}// 将文件转换为 base64 字符串String base64String = Base64Utils.encodeToString(file.getBytes());// 处理其他参数 params// ...// 返回 base64 字符串和其他处理结果HashMap<String, Object> response = new HashMap<>();response.put("base64String", base64String);// ...return ResponseEntity.ok(response);}@PostMapping("/generate-doc")public String template(@RequestBody Map<String,Object> stringObjectMap){// 获取 Word 模板所在路径String filepath = "src/main/resources/template.docx";// 通过 XWPFTemplate 编译文件并渲染数据到模板中XWPFTemplate template = XWPFTemplate.compile(filepath).render(stringObjectMap);try {// 将完成数据渲染的文档写出template.writeAndClose(new FileOutputStream("src/main/resources/output.docx"));} catch (IOException e) {e.printStackTrace();}return "success";}
}