java进行后台数据写入word模板再进行压缩包下载

经常遇到这样的需求,写一个导出功能word导出模板格式,回填相应的数据库word在模板中,然后导出该模板。如果需要一次导出多个模板,则需要将多个模板压缩成一个压缩包,然后再次导出。

废话不多说直接上代码:

相应的需要导入jar包:

java进行后台数据写入word模板再进行压缩包下载

controller层:

@GetMapping(value = "/export") public void export(HttpServletResponse response) {     try {         taskServic.exportWordZip(response);     } catch (Exception e) {         logger.error(";导出失败", e);     } }

service层:

/**  * 获取当前系统的临时目录  */ public final static String SRC_PATH = System.getProperty("java.io.tmpdir");
/**  * 导出(zip)  * @param response  */ public void exportWordZip( HttpServletResponse response) {     List<File> files = new ArrayList<>();    //数据库查找数据-模拟并编写测试数据     DemoVO vo = new DemoVO();     vo.setName(";测试模板数据" System.currentTimeMillis());     String ZipFileName = ";测试模板数据";     // 动态获取模板名称     String templateName = "demo.docx";     //模板     String fileName = System.currentTimeMillis() "";     ///写入模板中的数据     String tempFileTemplate = generate(vo, templateName, fileName);     if (tempFileTemplate != null) {         files.add(new File(tempFileTemplate));     }     //下载压缩包     if (files != null) {         zipDownload(response, zipFileName   "_"   System.currentTimeMillis()   ".zip", files);     } }
/**  * 生成-模板-数据写入.docx文件模板  *  * @return  */ public String generate(Object object, String templateName, String fileName) {     // 获取当前系统的临时目录     String filePath = SRC_PATH;     String addTimeFileName =  fileName;     //存储文件路径  File.separator     String storeFilePath = filePath   addTimeFileName;     String docxFilePath = storeFilePath   ".docx";     //后缀     String suffix = ".docx";     XWPFTemplate template = null;     try (OutputStream os = new FileOutputStream(docxFilePath);          InputStream inputStream = new ClassPathResource("/templates/"   templateName).getInputStream()) {         DemoVO vo = (DemoVO) object;         template = XWPFTemplate.compile(inputStream).render(new HashMap<String, Object>() {{             put("name", vo.getName());         }});         template.write(os);         os.flush();         return storeFilePath   suffix;     } catch (Exception e) {       //  logger.error("生成模板失败", e);     } finally {         if (template != null) {             try {                 template.close();             } catch (IOException e) {                 e.printStackTrace();             }         }     }     return null; }
/**  * zip打包下载  *  * @param response  * @param zipFileName  * @param fileList  */ public void zipDownload(HttpServletResponse response, String zipFileName, List<File> fileList) {     // zip文件路径     String zipPath = ZipDownloadUtil.FILE_PATH   zipFileName;     try {         //创建zip输出流         try (ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipPath))) {             ///声明文件集合用于存储文件             byte[] buffer = new byte[1024];             ///放入文件zip压缩包             for (int i = 0; i < fileList.size(); i  ) {                 File file = fileList.get(i);                 try (FileInputStream fis = new FileInputStream(file)) {                     out.putNextEntry(new ZipEntry(file.getName()));                     int len;                     // 阅读需要下载的文件,打包到zip文件                     while ((len = fis.read(buffer)) > 0) {                         out.write(buffer, 0, len);                     }                     out.closeEntry();                 }                 file.delete();             }         }         //下载zip文件         ZipDownloadUtil.downFile(response, zipFileName);     } catch (Exception e) {       //  logger.error(";文件下载错误;", e);     } finally {         // zip文件也删除         fileList.add(new File(zipPath));         ZipDownloadUtil.deleteFile(fileList);     } }

看下一个模板内容

java进行后台数据写入word模板再进行压缩包下载

demo.docx

看导出效果:

java进行后台数据写入word模板再进行压缩包下载

java进行后台数据写入word模板再进行压缩包下载

java进行后台数据写入word模板再进行压缩包下载

java进行后台数据写入word模板再进行压缩包下载

完美收工。

今天的文章就分享到这里,如果你也网赚副业项目感兴趣,可以添加 维信:beng6655  备注:副业

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 526323532@qq.com 举报,一经查实,本站将立刻删除。
如若转载,请注明出处:https://www.haoxue2.com/1046.html