1. 放置模板

2. 后端代码
@PostMapping("downloadWord")
public ResultVO downloadWord(@RequestBody Map map, HttpServletRequest request){
Map<String, Object> dataMap = getDataMap(map);
String path = WordUtils.createWord(dataMap,"研修培训项目实施方案模板1.ftl", "研修培训项目实施方案模板"+System.currentTimeMillis()+".doc");
String base64 = WordUtils.downLoadBase64( path,request);
return new ResultVO().addData("base64",base64);
}
1. 获取数据并封装数据
private Map<String, Object> getDataMap(@RequestBody Map map) {
String tyshxydm = (String) map.get("tyshxydm");
Map pxbMap = null;
int page = (int) map.get("page");
int rows = (int) map.get("rows");
GyQyxx gyQyxx = gyQyxxService.selectById(tyshxydm);
String pxbid = (String) map.get("pxbid");
GyPxxm gyPxxm = new GyPxxm();
gyPxxm = gyPxxmService.selectById(pxbid);
List<GyPxxmSkzj> gyPxxmSkzjList = gyPxxmSkzjService.queryList(pxbid, page, rows);
List<GyPxxmYxnr> yxnrList = gyPxxmYxnrService.queryList(pxbid, page, rows);
Map<String, Object> dataMap = new HashMap<String, Object>();
dataMap.put("y", gyPxxm.getRkrq().substring(0, 4));
dataMap.put("m", gyPxxm.getRkrq().substring(4, 6));
dataMap.put("d", gyPxxm.getRkrq().substring(6, 8));
dataMap.put("yyxmmc", gyPxxm.getYyxmmc());
dataMap.put("zymc", gyPxxm.getZymc());
dataMap.put("yrdwmc", gyQyxx.getYrdwmc());
dataMap.put("yxbdd", gyPxxm.getYxbdd());
dataMap.put("xyrs", gyPxxm.getXyrs());
dataMap.put("xyly", gyPxxm.getXyly());
dataMap.put("yxmdhzy", gyPxxm.getYxmdhzy());
dataMap.put("pxtjbzcs", gyPxxm.getPxtjbzcs());
dataMap.put("yxsxjfys", gyPxxm.getYxsxjfys());
dataMap.put("pxjgdz", gyPxxm.getPxjgdz());
dataMap.put("pxjglxr", gyPxxm.getPxjglxr());
dataMap.put("pxjgbgdh", gyPxxm.getPxjgbgdh());
dataMap.put("pxjgsj", gyPxxm.getPxjgsj());
dataMap.put("pxjgcz", gyPxxm.getPxjgcz());
dataMap.put("pxjgyx", gyPxxm.getPxjgyx());
List<SkzjWordDTO> gyPxxmSkzjs = new ArrayList();
List<YxnrWordDTO> gyPxxmYxnrs = new ArrayList<>();
for (GyPxxmSkzj item : gyPxxmSkzjList) {
SkzjWordDTO skzjWordDTO = new SkzjWordDTO();
skzjWordDTO.setSkzjnl(item.getSkzjnl());
skzjWordDTO.setSkzjxm(item.getSkzjxm());
skzjWordDTO.setSkzjgzdw(item.getSkzjgzdw());
skzjWordDTO.setSkzzcjndj(ConstCode.jndjType.get(item.getSkzzcjndj()));
gyPxxmSkzjs.add(skzjWordDTO);
}
dataMap.put("skzj", gyPxxmSkzjs);
AtomicInteger zks = new AtomicInteger();
for (GyPxxmYxnr item : yxnrList) {
YxnrWordDTO yxnrWordDTO = new YxnrWordDTO();
yxnrWordDTO.setKs(item.getKs());
yxnrWordDTO.setPxnr(item.getPxnr());
yxnrWordDTO.setPxxs(item.getPxxs());
yxnrWordDTO.setSkzjxm(item.getSkzjxm());
gyPxxmYxnrs.add(yxnrWordDTO);
int i = Integer.parseInt(item.getKs());
zks.addAndGet(i);
}
dataMap.put("yxnr", gyPxxmYxnrs);
dataMap.put("zks", zks);
dataMap.put("jykh", gyPxxm.getJykh());
return dataMap;
}
2. 生成word文档
public static String createWord(Map dataMap, String templateName, String fileName) {
String filePath = null;
Configuration configuration = new Configuration(new Version("2.3.28"));
configuration.setDefaultEncoding("UTF-8");
configuration.setClassForTemplateLoading(WordUtils.class,"/template");
try {
String path ="E:/files/";
Template template = configuration.getTemplate(templateName);
String fname = fileName;
File outFile = new File(path+fname);
filePath = path+fname;
System.out.println(filePath);
if (!outFile.getParentFile().exists()){
outFile.getParentFile().mkdirs();
}
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), StandardCharsets.UTF_8));
template.process(dataMap, out);
out.flush();
out.close();
}catch (Exception e){
log.error("导出word文档出错", e);
throw e;
}finally {
return filePath;
}
}
3. 将word文档转换为base64
public static String downLoadBase64(String filePath,HttpServletRequest request) {
System.out.println("filePath------------------" + filePath);
String base64 = null;
try {
long old = System.currentTimeMillis();
File file = new File(filePath);
if (!file.exists()) {
return null;
}
FileInputStream in = new FileInputStream(file);
byte[] bytes = new byte[(int)file.length()];
in.read(bytes);
base64 = Base64.getEncoder().encodeToString(bytes);
in.close();
long now = System.currentTimeMillis();
System.out.println("共耗时:" + ((now - old) / 1000.0) + "秒");
file.delete();
} catch (Exception e) {
log.info("word文件下载异常");
e.printStackTrace();
}
return base64;
}