需要引入的Maven依赖
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.4.0</version>
</dependency>
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>4.4.0</version>
</dependency>
<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>4.4.0</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.1</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.1</version>
</dependency>
工具类(可直接使用或适当修改)
import cn.afterturn.easypoi.word.WordExportUtil;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.Map;public class FileUtil {public static void exportWordByModel(HttpServletResponse response, Map<String, Object> map, String modelFileName, String outFileName) {try {String templatePath = filePath(modelFileName).getAbsolutePath();File templateFile = new File(templatePath);if (templateFile.exists()) {System.out.println("模板文件存在: " + templateFile.getAbsolutePath());} else {System.out.println("模板文件不存在: " + templateFile.getAbsolutePath());}XWPFDocument word = WordExportUtil.exportWord07(templatePath, map);response.reset();response.setHeader("Access-Control-Allow-Origin", "*");response.setContentType("application/msexcel");response.setContentType("text/html; charset=UTF-8");response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");String encodedFileName = URLEncoder.encode(outFileName, "UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + encodedFileName + ".docx");word.write(response.getOutputStream());} catch (Exception e) {e.printStackTrace();}}public static File filePath(String modelFileName) {ClassLoader classLoader = FileUtil.class.getClassLoader();URL resource = classLoader.getResource(modelFileName);return new File(resource.getFile());}
}
导出和填充接口实现
import cn.afterturn.easypoi.entity.ImageEntity;
import com.etoak.system.model.ExamInfo;
import com.etoak.system.model.StuInfoBase;
import com.etoak.system.model.TeaOfStuInfo;
import com.etoak.system.service.StuService;
import com.etoak.system.utils.FileUtil;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.HashMap;
import java.util.List;@RestController
@RequestMapping("/stu")
public class StuController {@AutowiredStuService stuService;@GetMapping("/exportWord")public void exportWord(@RequestParam String stuNo, HttpServletResponse response){HashMap<String,Object> map = new HashMap<>();String picPath1 = "https://tse2-mm.cn.bing.net/th/id/OIP-C.o3n2zlSej1hWPJkQPJ9l1AHaE8?w=274&h=183&c=7&r=0&o=7&dpr=1.1&pid=1.7&rm=3";ImageEntity imageEntity1 = new ImageEntity();imageEntity1.setUrl(picPath1);imageEntity1.setWidth(50);imageEntity1.setHeight(60);imageEntity1.setType(ImageEntity.URL);map.put("pictureVar1", imageEntity1);String picPath2 = "D:\\upload\\et2503\\9be44def628648b398205190a09979a9.png";ImageEntity imageEntity2 = new ImageEntity();imageEntity2.setUrl(picPath2);imageEntity2.setWidth(50);imageEntity2.setHeight(60);imageEntity2.setType(ImageEntity.URL);map.put("pictureVar2", imageEntity2);StuInfoBase stuInfoBase = stuService.getStuInfoByStuNo(stuNo);map.put("name",stuInfoBase.getName());map.put("stuNo",stuInfoBase.getStuNo());map.put("gender",stuInfoBase.getGender()==0?"男":"女");map.put("height",stuInfoBase.getHeight());map.put("weight",stuInfoBase.getWeight());map.put("bloodType",stuInfoBase.getBloodType());List<ExamInfo> examInfos = stuService.getExamInfoListByStuNo(stuNo);map.put("examInfos",examInfos);FileUtil.exportWordByModel(response,map,"templates/word.docx","学生信息统计");}}
word导出前后对比
)](https://i-blog.csdnimg.cn/direct/274029c7792a42e085bc30c01b64bca9.png)
