1.编写一个.ftl文件
<table cellspacing="0" cellpadding="0" width="1000" border="0" align="center"> <tbody> <tr> <td width="100%"> <table width="100%" border="0" cellspacing="0" cellpadding="0"> <tr> <td align="center" class="bgtd"> <table border="0" cellspacing="0" cellpadding="0"> <tr> <td> <h1>巡查检查日志</h1> </td> </tr> </table> </td> </tr> </table> <div class="box"> <table width="100%" border="1" cellspacing="0" cellpadding="0" class="table00" style="margin-top:30px"> <tr> <td width="12%" style="text-align:center">巡查检查<br/>时间</td> <td colspan="3" width="46%" style="text-align:center">${workTime!''}</td> <td width="18%" style="text-align:center">天气</td> <td style="text-align:center">${weather!''}</td> </tr> <tr> <td style="text-align:center">巡查检查人员</td> <td colspan="3" style="text-align:center">${spersonnel!''}</td> <td style="text-align:center">班组负责人</td> <td style="text-align:center">${smanager!''}</td> </tr> <tr> <td style="text-align:center">巡查检查路线</td> <td colspan="5" style="text-align:center">${roadPath!''}</td> </tr> <tr> <td rowspan="2">巡查检查<br/>车牌号</td> <td rowspan="2" style="text-align:center">${carNo!''}</td> <td rowspan="2" style="text-align:center">车辆公里数</td> <td>起:${carStrartMileage!''}KM</td> <td rowspan="2" style="text-align:center">巡查检查<br/>里程</td> <td rowspan="2" style="text-align:center">${driveMileage!''}KM</td> </tr> <tr> <td>止:${carEndMileage!''}KM</td> </tr> <tr> <td rowspan="8">当日巡</br>查重点</td> <td colspan="5"> <center>路政巡查</center> </td> </tr> <tr style="page-break-after: always"> <td colspan="5" id="roadPatrol"> </td> </tr> <tr> <td colspan="5"> <center>道路运输执法检查</center> </td> </tr> <tr> <td colspan="5" id="trans"> </td> </tr> <tr> <td colspan="5"> <center>收费稽查</center> </td> </tr> <tr> <td colspan="5" id="fee"> </td> </tr> <tr> <td colspan="5"> <center>前次移交事项</center> </td> </tr> <tr> <td colspan="5">${sthinks!''} </td> </tr> <tr> <td>巡查记录</td> <td colspan="5"> ${patrolEvent!''} </td> </tr> <tr> <td>交接事项处理情况</td> <td colspan="5">${dealInfo!''!} </td> </tr> <tr> <td rowspan="5"></td> <td>交接时间</td> <td colspan="4">${tDate!''}</td> </tr> <tr> <td rowspan="2">移交物品</td> <td colspan="4"> ${goods!''} </td> </tr> <tr> <td colspan="4"> ${car!''} </td> </tr> <tr> <td>移交物品备注</td> <td colspan="4"> ${remarks!''} </td> </tr> <tr> <td>移交事项</td> <td colspan="4">${tthinks!''} </td> </tr> <tr> <td width="17%">交班人员签名</td> <td colspan="2"></td> <td>接班人员签名</td> <td colspan="2"></td> </tr> </table> </div> </td> </tr> </tbody> </table>
2:建一个工具类
public class DownloadWordUtil { /** * 生成Word方法 * * @param dataMap * 页面数据 * @param downloadWord * 模板名称 * @return 生成的Word文档 */ public File createDoc(Map<String, Object> dataMap, String downloadWord) { String name = commonShiftFileName() + ".doc"; File f = new File(name); try { Configuration configuration = new Configuration(); configuration.setDefaultEncoding("UTF-8");//设置编码 //设置模板文件所在路径 configuration.setClassForTemplateLoading(DownloadWordUtil.class, "../../../../../../../ftl/shifts/"); //获取模板文件 Template template = configuration.getTemplate("downloadWord.ftl"); //导出文件 Writer out = new OutputStreamWriter(new FileOutputStream(f), "utf-8"); template.process(dataMap, out); out.close(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e); } return f; } /** * 生成文件名 * * @return 文件名 */ private String commonShiftFileName() { // 获得当前时间 DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss"); // 转换为字符串 String formatDate = format.format(new Date()); int random = new Random().nextInt(10000); return formatDate + random; } }
3:在controller中编写方法
@RequestMapping("downloadWord") public void downloadWord(HttpServletRequest request, HttpServletResponse response, @RequestParam("id") String id) throws IOException { File file = null; InputStream fin; ServletOutputStream out; try { DownloadWordUtil dlUtil = new DownloadWordUtil(); request.setCharacterEncoding("utf-8"); Map<String, CommonShifts> commonMap = new HashMap<>(); CommonShifts commonShifts = commonShiftsService.get(id); String officeName = commonShifts.getOffice().getName(); commonMap.put("commonShifts", commonShifts); request.setCharacterEncoding("utf-8"); List<CommonShiftsGoods> list = commonShiftsGoodsService.getShiftsGoodsList(commonShifts); SimpleDateFormat formatter = new SimpleDateFormat("yyyy年MM月dd日 HH点mm分"); DictDao dictDao = SpringContextHolder.getBean(DictDao.class); Map<String, Object> newMap = new HashMap<>(); String workTime = formatter.format(commonShifts.getSdate()) + "</br>至" + formatter.format(commonShifts.getTdate()); String weather = ""; if (commonShifts.getWeather() != null) { Dict weatherObject = dictDao.getById(commonShifts.getWeather().toString()); if (weather != null) { weather = weatherObject.getLabel(); } } String spersonnel = commonShifts.getSpersonnelName(); String smanager = commonShifts.getSmanagerName(); String carNo = ""; LawVehicle c = lawVehicleDao.get(commonShifts.getCarNo()); if (c != null) { carNo = c.getVehicleNo(); } String carStrartMileage = commonShifts.getDirveMileage();// 开始里程 String carEndMileage = commonShifts.getCarEndMileage();// 结束里程 Integer driveMileage = 0; try { driveMileage = Integer.parseInt(carEndMileage) - Integer.parseInt(carStrartMileage); } catch (Exception e) { e.printStackTrace(); } if (carEndMileage == null) { carEndMileage = ""; } String sthinks = commonShifts.getSthinks();// 前次移交事项 if (sthinks == null || "".equals(sthinks)) { sthinks = "无"; } String dealInfo = commonShifts.getDealInfo(); if (dealInfo == null || "".equals(dealInfo)) { sthinks = "无"; } String tDate = formatter.format(commonShifts.getTdate()); // 移交物品 StringBuilder goodsStr = new StringBuilder(""); for (CommonShiftsGoods goods : list) { if (goods.getName() != null) { goodsStr.append(goods.getName() + ","); } if (goods.getQuantity() != null) { goodsStr.append(goods.getQuantity() + "个"); } if (goods.getRemark() != null) { goodsStr.append("," + goods.getRemark() + "。</br>"); } else { goodsStr.append("。</br>"); } } String carStatus = ""; if (commonShifts.getCarStatus() != null) { Dict carStatusObject = dictDao.getById(commonShifts.getCarStatus().toString()); if (carStatusObject != null) { carStatus = carStatusObject.getLabel(); } } String car = "执法车,车号:" + carNo + ";车辆是否正常:" + carStatus + ";交接公里数:" + carEndMileage + "。"; StringBuilder patrolEvent = new StringBuilder(""); String tthinks = commonShifts.getTthinks(); String remarks = commonShifts.getRemarks(); newMap.put("workTime", workTime); newMap.put("weather", weather); newMap.put("spersonnel", spersonnel); newMap.put("smanager", smanager); newMap.put("carNo", carNo); newMap.put("carStrartMileage", carStrartMileage + ""); newMap.put("carEndMileage", carEndMileage + ""); newMap.put("driveMileage", driveMileage + ""); newMap.put("sthinks", sthinks); newMap.put("dealInfo", dealInfo); newMap.put("roadPath", commonShifts.getRoadStart() + "<br/>至<br/>" + commonShifts.getRoadEnd()); newMap.put("tDate", tDate); newMap.put("goods", "".equals(goodsStr.toString()) ? "无" : goodsStr.toString()); newMap.put("car", car); newMap.put("tthinks", tthinks); newMap.put("remarks", remarks); for (String key : newMap.keySet()) { if (newMap.get(key) == null) { newMap.put(key, ""); } } String patrolEventStr = patrolEvent.toString(); newMap.put("patrolEvent", "".equals(patrolEventStr) ? "无" : patrolEventStr); String ctxStatic = request.getSession().getServletContext().getRealPath("/") + File.separator + "static"; newMap.put("ctxStatic", ctxStatic); file = dlUtil.createDoc(newMap, officeName); fin = new FileInputStream(file); response.setContentType("application/msword"); out = response.getOutputStream(); byte[] buffer = new byte[1024];// 缓冲区 int bytesToRead; // 通过循环将读入的Word文件的内容输出到浏览器中 while ((bytesToRead = fin.read(buffer)) != -1) { out.write(buffer, 0, bytesToRead); } fin.close(); if (out != null) { out.close(); } } catch (IOException ex) { ex.printStackTrace(); logger.error("CommonShiftsController:downloadWord————》" + ex.toString()); } finally { if (file != null) { file.delete(); // 删除临时文件 } } }本人技术比较菜,代码量比较打,但这是我在实际项目中实践的word导出代码,选择性Ctrl+C,Ctrl+V,谢谢