依据模板生成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;
    }
}

 

posted @ 2022-07-11 15:21  小样儿i  阅读(154)  评论(0)    收藏  举报