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";
}
}