依据模板生成word日报
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * 日期转换格式工具类 */ public class DateTime { /** * 日期格式转换为字符串格式 * @param date * @return */ public static String perseString(Date date){ return new SimpleDateFormat("yyyy-MM-dd").format(date); } public static Date parseDate(String time){ SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd"); Date date=null; try { date= sdf.parse(time); } catch (ParseException e) { e.printStackTrace(); } return date; } /** * 获取星期 * @param date * @return */ public static String getWeek(Date date){ SimpleDateFormat sdf = new SimpleDateFormat("EEEE"); String week = sdf.format(date); return week; } /** * 日期格式转换yyyy年MM月dd日 * */ public static String getDate(Date date){ String format = new SimpleDateFormat("yyyy年MM月dd日").format(date); return format; } /** * 日期格式转换yyyyMMdd * @param date * @return */ public static String getDateYmd(Date date){ String format = new SimpleDateFormat("yyyyMMdd").format(date); return format; } }
导入依赖
//生成日报需要导入该依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> <version>2.6.3</version> </dependency>
//XWPFDocument 转 MultipartFile(MockMultipartFile),则需要导入
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.6.RELEASE</version>
<scope>compile</scope>
</dependency>
日报生成工具类
@Slf4j public class WordUtils { /** * 图片大小路径设置 * 默认长宽是200 * @return */ public static ImageEntity pictureSize(String s){ ImageEntity imageEntity = new ImageEntity(); imageEntity.setHeight(200); imageEntity.setWidth(200); imageEntity.setUrl(s); imageEntity.setType(ImageEntity.URL); return imageEntity; } /** * word提交 * @return */ public static XWPFDocument wordSubmit(String wordUrl, String wordTemplateUrl, Map<String, Object> map){ XWPFDocument doc = null; try { doc = WordExportUtil.exportWord07(wordUrl, map); FileOutputStream fos = new FileOutputStream(wordTemplateUrl); doc.write(fos); fos.close(); } catch (Exception e) { e.printStackTrace(); } return doc; } /** * 多个word数据合并到一个word中提交 * @param wordUrl * @param wordTemplateUrl * @param list * @return */ public static XWPFDocument moreWordSubmit(String wordUrl, String wordTemplateUrl, List<Map<String, Object>> list){ XWPFDocument doc = null; try { doc = WordExportUtil.exportWord07(wordUrl, list); FileOutputStream fos = new FileOutputStream(wordTemplateUrl); doc.write(fos); fos.close(); } catch (Exception e) { e.printStackTrace(); } return doc; } /** * 将对象转换成map * @param obj * @return * @throws Exception */ public static Map<String, Object> objectToMap(Object obj) throws Exception { if (obj == null) { return null; } Map<String, Object> map = new HashMap<String, Object>(); Field[] declaredFields = obj.getClass().getDeclaredFields(); for (Field field : declaredFields) { field.setAccessible(true); map.put(field.getName(), field.get(obj)); } return map; } /** * 删除临时文件 * */ public static void delFileWord(String filePathUrl, String FileName){ File file = new File(filePathUrl+FileName); File file1 = new File(filePathUrl); file.delete(); file1.delete(); } /** * XWPFDocument 转 MultipartFile(MockMultipartFile) * * @param document 文档对象 * @param fileName 文件名 * @return */ public static MultipartFile xwpfDocumentToMockMultipartFile(XWPFDocument document, String fileName) { try { String contentType = "text/plain"; ByteArrayOutputStream bos = new ByteArrayOutputStream(); document.write(bos); //XWPFDocument 转 byte[] byte[] barray = bos.toByteArray(); //byte[] 转 InputStream InputStream is = new ByteArrayInputStream(barray); //InputStream 转 MultipartFile MultipartFile multipartFile = new MockMultipartFile(fileName, fileName, contentType, is); return multipartFile; } catch (Exception e) { e.printStackTrace(); return null; } } }
生成日报具体实现
controller层
/** * 生成日报——银行项目日报 * @param projectDaily * @return * @throws Exception */ @RequestMapping("/getWordUrl") public ResponseEntity<CommonResult<Object>> getWordUrl(@RequestBody ProjectDaily projectDaily) throws Exception { Long id = projectDaily.getId(); ProjectDaily projectDailyDetailById = projectDailyService.getProjectDailyDetailById(id); Map<String, Object> map = dailyWordService.getWordUrl(projectDailyDetailById); //模板url String wordUrl = projectDaily.getFileUrl(); //文件名称 String projectName =UUID.randomUUID().toString()+ DateTime.getDateYmd(new Date()) +projectDailyDetailById.getProjectName() + ".docx"; //文件下载路径 String wordTempletUrl = "D:\\xxiang\\word\\"+projectName; XWPFDocument xwpfDocument = WordUtils.wordSubmit(wordUrl, wordTempletUrl, map); MultipartFile multipartFile = WordUtils.xwpfDocumentToMockMultipartFile(xwpfDocument, projectName); String objectName = aliOssUtil.putObject(multipartFile); String url = aliOssUtil.generatePresignedUrlStr(objectName, 10000L); WordUtils.delFileWord(wordTempletUrl, projectName); return ResponseEntity.ok(CommonResult.success(url));
//service层 Map<String, Object> getWordUrl(ProjectDaily projectDailyDetailById) throws Exception;
//impl层 @Override public Map<String, Object> getWordUrl(ProjectDaily projectDailyDetailById) throws Exception { Date date = DateTime.parseDate(DateTimeUtils.getCurrentDate()); String date1 = DateTime.getDate(date); String week = DateTime.getWeek(date); //获取时间+星期 String dateTime = date1+" "+week; Map<String, Object> mapPicture = WordUtils.objectToMap(projectDailyDetailById); mapPicture.put("pageheader", dateTime); List<Map<String, String>> buildProjressList = (List<Map<String, String>>) mapPicture.get("buildProjressList"); mapPicture.remove("buildProjressList"); List<String> list = new ArrayList<>(); if (buildProjressList != null && buildProjressList.size() != 0){ for (Map<String, String> m: buildProjressList ) { String name = m.get("name"); String status = m.get("status"); String nameStatus = name+"——"+status; list.add(nameStatus); } } mapPicture.put("buildProjressList", list); List picture1 = new ArrayList(); List picture2 = new ArrayList(); String buildProgressImg = projectDailyDetailById.getBuildProgressImg(); if (buildProgressImg != null && !buildProgressImg.equals("") ){ String[] split = buildProgressImg.split(";"); for (String s : split ) { ImageEntity imageEntity = WordUtils.pictureSize(s); picture1.add(imageEntity); } }else { picture1.add(""); } mapPicture.put("picture1", picture1); String antiepilepticImg = projectDailyDetailById.getAntiepilepticImg(); if (antiepilepticImg == null || antiepilepticImg.equals("")){ picture2.add(""); }else { String[] split1 = antiepilepticImg.split(";"); for (String s : split1 ) { ImageEntity imageEntity = WordUtils.pictureSize(s); picture2.add(imageEntity); } } mapPicture.put("picture2", picture2); return mapPicture; } }

浙公网安备 33010602011771号