导出word模板 并放入zip进行压缩

导出word主模块

public void exportDocx() { FileOutputStream os = null; FileInputStream fs = null; String fileName = null; try { //填充结果 Map<String, Object> map = new HashMap<>(); map.put("orgname", "aa"); map.put("name", "bb"); map.put("no", "aa"); map.put("faultAnalysis", "aa"); map.put("area", "aa"); map.put("descripted", "aa"); map.put("repairno", "aa"); String path = FilePathEnum.REPAIR_DOC.getPath(); fileName = String.format(FilePathEnum.REPAIR_DOC.getName(), "aaa"); InputStream resourceAsStream = this.getClass().getResourceAsStream(path); Path res = WrodExport.getInstance().convertWord(resourceAsStream, map, fileName); fs = new FileInputStream(res.toString());//用字节的形式进行读写 os = new FileOutputStream("F:\\测试\\a.docx"); int len; byte[] bytes = new byte[1024]; while ((len = fs.read(bytes)) != -1) { os.write(bytes, 0, len); } os.flush(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (os != null) { os.close(); } if (fs != null) { fs.close(); } } catch (IOException e) { e.printStackTrace(); } } }

解读word模板

public class WrodExport { public static WrodExport getInstance() { return new WrodExport(); } public Path convertWord(InputStream in, Map<String, Object> params, String fileName) throws IOException { Assert.notNull(in, "参数不能为空"); Assert.notNull(fileName, "参数不能为空"); Assert.notNull(params, "参数不能为空"); Map<String, Object> newParams = new HashMap(); params.forEach((k, v) -> { newParams.put("${" + k + "}", v); }); Path path = Paths.get(System.getProperty("java.io.tmpdir"), fileName); try { OutputStream out = Files.newOutputStream(path); Throwable var7 = null; try { XWPFDocument doc = new XWPFDocument(in); this.getParamTable(doc, params, false); this.replaceInPara((XWPFDocument)doc, newParams); this.replaceInTable(doc, newParams); doc.write(out); } catch (Throwable var17) { var7 = var17; throw var17; } finally { if (out != null) { if (var7 != null) { try { out.close(); } catch (Throwable var16) { var7.addSuppressed(var16); } } else { out.close(); } } } } catch (Exception var19) { var19.printStackTrace(); } return path; } public Path convertWord(InputStream in, Map<String, Object> params, String fileName, boolean horizontal) throws IOException { Assert.notNull(in, "参数不能为空"); Assert.notNull(fileName, "参数不能为空"); Assert.notNull(params, "参数不能为空"); Map<String, Object> newParams = new HashMap(); params.forEach((k, v) -> { newParams.put("${" + k + "}", v); }); Path path = Paths.get(System.getProperty("java.io.tmpdir"), fileName); try { OutputStream out = Files.newOutputStream(path); Throwable var8 = null; try { XWPFDocument doc = new XWPFDocument(in); this.getParamTable(doc, params, horizontal); this.replaceInPara((XWPFDocument)doc, newParams); this.replaceInTable(doc, newParams); doc.write(out); } catch (Throwable var18) { var8 = var18; throw var18; } finally { if (out != null) { if (var8 != null) { try { out.close(); } catch (Throwable var17) { var8.addSuppressed(var17); } } else { out.close(); } } } } catch (Exception var20) { var20.printStackTrace(); } return path; } private WrodExport() { } public void getParamTable(XWPFDocument doc, Map<String, Object> params, boolean horizontal) throws Exception { List<Object> list = null; Set<String> checkKey = new HashSet(); Map<String, Object> resVal = new HashMap(); Iterator var7 = params.entrySet().iterator(); while(true) { Entry entry = null; String objType; do { do { if (!var7.hasNext()) { if (list == null) { return; } if (list.isEmpty()) { return; } XWPFTable table = (XWPFTable)doc.getTables().get(0); if (horizontal) { CTSectPr ctSectPr = doc.getDocument().getBody().getSectPr(); CTPageSz pgSz = ctSectPr.getPgSz(); pgSz.setW(BigInteger.valueOf(16840L)); pgSz.setH(BigInteger.valueOf(11907L)); pgSz.setOrient(STPageOrientation.LANDSCAPE); } List<XWPFTableRow> rows = table.getRows(); int i = 0; XWPFTableRow ins = null; Map<String, Integer> cellMap = new HashMap(); Iterator var27 = rows.iterator(); while(var27.hasNext()) { XWPFTableRow row = (XWPFTableRow)var27.next(); List<XWPFTableCell> tableCells = row.getTableCells(); int j = 0; for(Iterator var16 = tableCells.iterator(); var16.hasNext(); ++j) { XWPFTableCell cell = (XWPFTableCell)var16.next(); String text = (String)cell.getParagraphs().stream().map(XWPFParagraph::getRuns).flatMap(Stream::of).map((x) -> { return x.toString(); }).collect(Collectors.joining()); String reText = text.replaceAll(" ", "").replaceAll(",", "").replace("[", "").replace("]", "").replaceAll("\n", "").trim(); if (checkKey.contains(reText)) { if (ins == null) { ins = row; } cellMap.put(reText, j); } } if (ins == null) { ++i; } } for(int l = 0; l < list.size(); ++l) { Iterator var30 = cellMap.entrySet().iterator(); while(var30.hasNext()) { Entry<String, Integer> entry2 = (Entry)var30.next(); ins.getCell((Integer)entry2.getValue()).removeParagraph(0); ins.getCell((Integer)entry2.getValue()).addParagraph().createRun().setText(String.valueOf(resVal.get(l + "." + (String)entry.getKey()))); } table.addRow(ins, i + l); } table.removeRow(i + list.size() - 1); return; } entry = (Entry)var7.next(); } while(entry.getValue() == null); objType = entry.getValue().getClass().getSimpleName(); } while(!"ArrayList".equals(objType)); list = (List)entry.getValue(); int i = 0; for(Iterator var11 = list.iterator(); var11.hasNext(); ++i) { Object obj = var11.next(); Map<String, Object> map = getObjectToMap(obj); Iterator var14 = map.entrySet().iterator(); while(var14.hasNext()) { Entry<String, Object> item = (Entry)var14.next(); checkKey.add("${" + (String)entry.getKey() + "." + (String)item.getKey() + "}"); resVal.put(i + ".${" + (String)entry.getKey() + "." + (String)item.getKey() + "}", item.getValue()); } } } } public static Map<String, Object> getObjectToMap(Object obj) throws IllegalAccessException { Map<String, Object> map = new LinkedHashMap(); Class<?> clazz = obj.getClass(); Field[] var3 = clazz.getDeclaredFields(); int var4 = var3.length; for(int var5 = 0; var5 < var4; ++var5) { Field field = var3[var5]; field.setAccessible(true); String fieldName = field.getName(); Object value = field.get(obj); if (value == null) { value = ""; } map.put(fieldName, value); } return map; } private void replaceInPara(XWPFDocument doc, Map<String, Object> params) { Iterator iterator = doc.getParagraphsIterator(); while(iterator.hasNext()) { XWPFParagraph para = (XWPFParagraph)iterator.next(); this.replaceInPara(para, params); } } private void replaceInPara(XWPFParagraph para, Map<String, Object> params) { if (this.matcher(para.getParagraphText()).find()) { List<XWPFRun> runs = para.getRuns(); int start = -1; int end = -1; String str = ""; String color = null; int fontSize = 0; UnderlinePatterns underlinePatterns = null; int i; String runText; for(i = 0; i < runs.size(); ++i) { XWPFRun run = (XWPFRun)runs.get(i); if (fontSize == 0) { fontSize = run.getFontSize(); } if (underlinePatterns == null) { underlinePatterns = run.getUnderline(); } if (color == null) { color = run.getColor(); } runText = run.toString(); if (runText.length() == 1 && '$' == runText.charAt(0)) { start = i; } else if (runText.length() > 1 && '$' == runText.charAt(0) && '{' == runText.charAt(1)) { start = i; } if (start != -1) { str = str + runText; } if ('}' == runText.charAt(runText.length() - 1) && start != -1) { end = i; break; } } for(i = start; i <= end; ++i) { para.removeRun(i); --i; --end; } Iterator var17 = params.keySet().iterator(); while(var17.hasNext()) { String key = (String)var17.next(); if (str.equals(key)) { runText = null; if (params.get(key) != null) { runText = params.get(key).getClass().getSimpleName(); } if ("InputStream".equals(runText)) { try { para.createRun().addPicture((InputStream)params.get(key), 5, "qianming", Units.toEMU(100.0D), Units.toEMU(60.0D)); } catch (Exception var15) { var15.printStackTrace(); } } else if (params.get(key) != null) { XWPFRun run = para.createRun(); run.setFontSize(fontSize); run.setColor(color); run.setUnderline(underlinePatterns); run.setText(String.valueOf(params.get(key)), 0); } break; } } } } private void replaceInPara1(XWPFParagraph para, Map<String, Object> params) { String runText = ""; String color = null; int fontSize = 0; UnderlinePatterns underlinePatterns = null; if (this.matcher(para.getParagraphText()).find()) { List<XWPFRun> runs = para.getRuns(); if (runs.size() > 0) { int j = runs.size(); for(int i = 0; i < j; ++i) { XWPFRun run = (XWPFRun)runs.get(0); String i1 = run.toString(); runText = runText + i1; para.removeRun(0); } } Matcher matcher = this.matcher(runText); if (matcher.find()) { while((matcher = this.matcher(runText)).find()) { runText = matcher.replaceFirst(String.valueOf(params.get(matcher.group(1)))); } XWPFRun run = para.createRun(); run.setText(runText, 0); run.setFontSize(fontSize); run.setUnderline((UnderlinePatterns)underlinePatterns); } } } private void replaceInTable(XWPFDocument doc, Map<String, Object> params) { Iterator iterator = doc.getTablesIterator(); while(iterator.hasNext()) { XWPFTable table = (XWPFTable)iterator.next(); List<XWPFTableRow> rows = table.getRows(); Iterator var8 = rows.iterator(); while(var8.hasNext()) { XWPFTableRow row = (XWPFTableRow)var8.next(); List<XWPFTableCell> cells = row.getTableCells(); Iterator var10 = cells.iterator(); while(var10.hasNext()) { XWPFTableCell cell = (XWPFTableCell)var10.next(); List<XWPFParagraph> paras = cell.getParagraphs(); Iterator var12 = paras.iterator(); while(var12.hasNext()) { XWPFParagraph para = (XWPFParagraph)var12.next(); this.replaceInPara(para, params); } } } } } private Matcher matcher(String str) { Pattern pattern = Pattern.compile("\\$\\{(.+?)\\}", 2); Matcher matcher = pattern.matcher(str); return matcher; } private void close(InputStream is) { if (is != null) { try { is.close(); } catch (IOException var3) { var3.printStackTrace(); } } } private void close(OutputStream os) { if (os != null) { try { os.close(); } catch (IOException var3) { var3.printStackTrace(); } } } }

模板位置

public enum FilePathEnum { REPAIR_DOC("/template/equ_repair_exp.docx","维修工单导出%s.docx") ; private String path; private String name; public String getPath() { return path; } public String getName() { return name; } FilePathEnum(String path, String name) { this.path = path; this.name = name; } }

word模板
在这里插入图片描述

压缩代码模板

public void compressFileToZipStream(ZipOutputStream zipOutputStream, ByteArrayOutputStream excelOutputStream, String excelFilename) { byte[] buf = new byte[1024]; try { // Compress the files byte[] content = excelOutputStream.toByteArray(); ByteArrayInputStream is = new ByteArrayInputStream(content); BufferedInputStream bis = new BufferedInputStream(is); // Add ZIP entry to output stream. zipOutputStream.putNextEntry(new ZipEntry(excelFilename)); // Transfer bytes from the file to the ZIP file int len; while ((len = bis.read(buf)) > 0) { zipOutputStream.write(buf, 0, len); } // Complete the entry //excelOutputStream.close();//关闭excel输出流 zipOutputStream.closeEntry(); bis.close(); is.close(); // Complete the ZIP file } catch (IOException e) { e.printStackTrace(); } }

使用浏览器下载方式进行压缩

ServletOutputStream sos = response.getOutputStream(); ZipOutputStream zipOutputStream = new ZipOutputStream(sos); //获取名字 String zipname = "压缩包名字.zip"; response.reset(); response.setContentType("application/x-download"); response.setHeader("Content-Disposition", "attachment;filename=" + new String((zipname).getBytes(), "iso-8859-1")); try { for (int i = 0; i < 文件循环放入; i++) { RepairDto repairDto = repairDtoList.get(i); ByteArrayOutputStream baos = new ByteArrayOutputStream(); //拿取字节存储的输出流,将docx的文件解读写入到流中,并返回文件名称 String filename = "a"+i+".docx"; exportDocx(repairDto, baos); compressFileToZipStream(zipOutputStream, baos, filename); baos.close(); } zipOutputStream.flush(); zipOutputStream.close(); sos.close();

------------恢复内容开始------------

导出word主模块

public void exportDocx() { FileOutputStream os = null; FileInputStream fs = null; String fileName = null; try { //填充结果 Map<String, Object> map = new HashMap<>(); map.put("orgname", "aa"); map.put("name", "bb"); map.put("no", "aa"); map.put("faultAnalysis", "aa"); map.put("area", "aa"); map.put("descripted", "aa"); map.put("repairno", "aa"); String path = FilePathEnum.REPAIR_DOC.getPath(); fileName = String.format(FilePathEnum.REPAIR_DOC.getName(), "aaa"); InputStream resourceAsStream = this.getClass().getResourceAsStream(path); Path res = WrodExport.getInstance().convertWord(resourceAsStream, map, fileName); fs = new FileInputStream(res.toString());//用字节的形式进行读写 os = new FileOutputStream("F:\\测试\\a.docx"); int len; byte[] bytes = new byte[1024]; while ((len = fs.read(bytes)) != -1) { os.write(bytes, 0, len); } os.flush(); } catch (IOException e) { e.printStackTrace(); } finally { try { if (os != null) { os.close(); } if (fs != null) { fs.close(); } } catch (IOException e) { e.printStackTrace(); } } }

解读word模板

public class WrodExport { public static WrodExport getInstance() { return new WrodExport(); } public Path convertWord(InputStream in, Map<String, Object> params, String fileName) throws IOException { Assert.notNull(in, "参数不能为空"); Assert.notNull(fileName, "参数不能为空"); Assert.notNull(params, "参数不能为空"); Map<String, Object> newParams = new HashMap(); params.forEach((k, v) -> { newParams.put("${" + k + "}", v); }); Path path = Paths.get(System.getProperty("java.io.tmpdir"), fileName); try { OutputStream out = Files.newOutputStream(path); Throwable var7 = null; try { XWPFDocument doc = new XWPFDocument(in); this.getParamTable(doc, params, false); this.replaceInPara((XWPFDocument)doc, newParams); this.replaceInTable(doc, newParams); doc.write(out); } catch (Throwable var17) { var7 = var17; throw var17; } finally { if (out != null) { if (var7 != null) { try { out.close(); } catch (Throwable var16) { var7.addSuppressed(var16); } } else { out.close(); } } } } catch (Exception var19) { var19.printStackTrace(); } return path; } public Path convertWord(InputStream in, Map<String, Object> params, String fileName, boolean horizontal) throws IOException { Assert.notNull(in, "参数不能为空"); Assert.notNull(fileName, "参数不能为空"); Assert.notNull(params, "参数不能为空"); Map<String, Object> newParams = new HashMap(); params.forEach((k, v) -> { newParams.put("${" + k + "}", v); }); Path path = Paths.get(System.getProperty("java.io.tmpdir"), fileName); try { OutputStream out = Files.newOutputStream(path); Throwable var8 = null; try { XWPFDocument doc = new XWPFDocument(in); this.getParamTable(doc, params, horizontal); this.replaceInPara((XWPFDocument)doc, newParams); this.replaceInTable(doc, newParams); doc.write(out); } catch (Throwable var18) { var8 = var18; throw var18; } finally { if (out != null) { if (var8 != null) { try { out.close(); } catch (Throwable var17) { var8.addSuppressed(var17); } } else { out.close(); } } } } catch (Exception var20) { var20.printStackTrace(); } return path; } private WrodExport() { } public void getParamTable(XWPFDocument doc, Map<String, Object> params, boolean horizontal) throws Exception { List<Object> list = null; Set<String> checkKey = new HashSet(); Map<String, Object> resVal = new HashMap(); Iterator var7 = params.entrySet().iterator(); while(true) { Entry entry = null; String objType; do { do { if (!var7.hasNext()) { if (list == null) { return; } if (list.isEmpty()) { return; } XWPFTable table = (XWPFTable)doc.getTables().get(0); if (horizontal) { CTSectPr ctSectPr = doc.getDocument().getBody().getSectPr(); CTPageSz pgSz = ctSectPr.getPgSz(); pgSz.setW(BigInteger.valueOf(16840L)); pgSz.setH(BigInteger.valueOf(11907L)); pgSz.setOrient(STPageOrientation.LANDSCAPE); } List<XWPFTableRow> rows = table.getRows(); int i = 0; XWPFTableRow ins = null; Map<String, Integer> cellMap = new HashMap(); Iterator var27 = rows.iterator(); while(var27.hasNext()) { XWPFTableRow row = (XWPFTableRow)var27.next(); List<XWPFTableCell> tableCells = row.getTableCells(); int j = 0; for(Iterator var16 = tableCells.iterator(); var16.hasNext(); ++j) { XWPFTableCell cell = (XWPFTableCell)var16.next(); String text = (String)cell.getParagraphs().stream().map(XWPFParagraph::getRuns).flatMap(Stream::of).map((x) -> { return x.toString(); }).collect(Collectors.joining()); String reText = text.replaceAll(" ", "").replaceAll(",", "").replace("[", "").replace("]", "").replaceAll("\n", "").trim(); if (checkKey.contains(reText)) { if (ins == null) { ins = row; } cellMap.put(reText, j); } } if (ins == null) { ++i; } } for(int l = 0; l < list.size(); ++l) { Iterator var30 = cellMap.entrySet().iterator(); while(var30.hasNext()) { Entry<String, Integer> entry2 = (Entry)var30.next(); ins.getCell((Integer)entry2.getValue()).removeParagraph(0); ins.getCell((Integer)entry2.getValue()).addParagraph().createRun().setText(String.valueOf(resVal.get(l + "." + (String)entry.getKey()))); } table.addRow(ins, i + l); } table.removeRow(i + list.size() - 1); return; } entry = (Entry)var7.next(); } while(entry.getValue() == null); objType = entry.getValue().getClass().getSimpleName(); } while(!"ArrayList".equals(objType)); list = (List)entry.getValue(); int i = 0; for(Iterator var11 = list.iterator(); var11.hasNext(); ++i) { Object obj = var11.next(); Map<String, Object> map = getObjectToMap(obj); Iterator var14 = map.entrySet().iterator(); while(var14.hasNext()) { Entry<String, Object> item = (Entry)var14.next(); checkKey.add("${" + (String)entry.getKey() + "." + (String)item.getKey() + "}"); resVal.put(i + ".${" + (String)entry.getKey() + "." + (String)item.getKey() + "}", item.getValue()); } } } } public static Map<String, Object> getObjectToMap(Object obj) throws IllegalAccessException { Map<String, Object> map = new LinkedHashMap(); Class<?> clazz = obj.getClass(); Field[] var3 = clazz.getDeclaredFields(); int var4 = var3.length; for(int var5 = 0; var5 < var4; ++var5) { Field field = var3[var5]; field.setAccessible(true); String fieldName = field.getName(); Object value = field.get(obj); if (value == null) { value = ""; } map.put(fieldName, value); } return map; } private void replaceInPara(XWPFDocument doc, Map<String, Object> params) { Iterator iterator = doc.getParagraphsIterator(); while(iterator.hasNext()) { XWPFParagraph para = (XWPFParagraph)iterator.next(); this.replaceInPara(para, params); } } private void replaceInPara(XWPFParagraph para, Map<String, Object> params) { if (this.matcher(para.getParagraphText()).find()) { List<XWPFRun> runs = para.getRuns(); int start = -1; int end = -1; String str = ""; String color = null; int fontSize = 0; UnderlinePatterns underlinePatterns = null; int i; String runText; for(i = 0; i < runs.size(); ++i) { XWPFRun run = (XWPFRun)runs.get(i); if (fontSize == 0) { fontSize = run.getFontSize(); } if (underlinePatterns == null) { underlinePatterns = run.getUnderline(); } if (color == null) { color = run.getColor(); } runText = run.toString(); if (runText.length() == 1 && '$' == runText.charAt(0)) { start = i; } else if (runText.length() > 1 && '$' == runText.charAt(0) && '{' == runText.charAt(1)) { start = i; } if (start != -1) { str = str + runText; } if ('}' == runText.charAt(runText.length() - 1) && start != -1) { end = i; break; } } for(i = start; i <= end; ++i) { para.removeRun(i); --i; --end; } Iterator var17 = params.keySet().iterator(); while(var17.hasNext()) { String key = (String)var17.next(); if (str.equals(key)) { runText = null; if (params.get(key) != null) { runText = params.get(key).getClass().getSimpleName(); } if ("InputStream".equals(runText)) { try { para.createRun().addPicture((InputStream)params.get(key), 5, "qianming", Units.toEMU(100.0D), Units.toEMU(60.0D)); } catch (Exception var15) { var15.printStackTrace(); } } else if (params.get(key) != null) { XWPFRun run = para.createRun(); run.setFontSize(fontSize); run.setColor(color); run.setUnderline(underlinePatterns); run.setText(String.valueOf(params.get(key)), 0); } break; } } } } private void replaceInPara1(XWPFParagraph para, Map<String, Object> params) { String runText = ""; String color = null; int fontSize = 0; UnderlinePatterns underlinePatterns = null; if (this.matcher(para.getParagraphText()).find()) { List<XWPFRun> runs = para.getRuns(); if (runs.size() > 0) { int j = runs.size(); for(int i = 0; i < j; ++i) { XWPFRun run = (XWPFRun)runs.get(0); String i1 = run.toString(); runText = runText + i1; para.removeRun(0); } } Matcher matcher = this.matcher(runText); if (matcher.find()) { while((matcher = this.matcher(runText)).find()) { runText = matcher.replaceFirst(String.valueOf(params.get(matcher.group(1)))); } XWPFRun run = para.createRun(); run.setText(runText, 0); run.setFontSize(fontSize); run.setUnderline((UnderlinePatterns)underlinePatterns); } } } private void replaceInTable(XWPFDocument doc, Map<String, Object> params) { Iterator iterator = doc.getTablesIterator(); while(iterator.hasNext()) { XWPFTable table = (XWPFTable)iterator.next(); List<XWPFTableRow> rows = table.getRows(); Iterator var8 = rows.iterator(); while(var8.hasNext()) { XWPFTableRow row = (XWPFTableRow)var8.next(); List<XWPFTableCell> cells = row.getTableCells(); Iterator var10 = cells.iterator(); while(var10.hasNext()) { XWPFTableCell cell = (XWPFTableCell)var10.next(); List<XWPFParagraph> paras = cell.getParagraphs(); Iterator var12 = paras.iterator(); while(var12.hasNext()) { XWPFParagraph para = (XWPFParagraph)var12.next(); this.replaceInPara(para, params); } } } } } private Matcher matcher(String str) { Pattern pattern = Pattern.compile("\\$\\{(.+?)\\}", 2); Matcher matcher = pattern.matcher(str); return matcher; } private void close(InputStream is) { if (is != null) { try { is.close(); } catch (IOException var3) { var3.printStackTrace(); } } } private void close(OutputStream os) { if (os != null) { try { os.close(); } catch (IOException var3) { var3.printStackTrace(); } } } }

模板位置

public enum FilePathEnum { REPAIR_DOC("/template/equ_repair_exp.docx","维修工单导出%s.docx") ; private String path; private String name; public String getPath() { return path; } public String getName() { return name; } FilePathEnum(String path, String name) { this.path = path; this.name = name; } }

word模板
在这里插入图片描述

压缩代码模板

public void compressFileToZipStream(ZipOutputStream zipOutputStream, ByteArrayOutputStream excelOutputStream, String excelFilename) { byte[] buf = new byte[1024]; try { // Compress the files byte[] content = excelOutputStream.toByteArray(); ByteArrayInputStream is = new ByteArrayInputStream(content); BufferedInputStream bis = new BufferedInputStream(is); // Add ZIP entry to output stream. zipOutputStream.putNextEntry(new ZipEntry(excelFilename)); // Transfer bytes from the file to the ZIP file int len; while ((len = bis.read(buf)) > 0) { zipOutputStream.write(buf, 0, len); } // Complete the entry //excelOutputStream.close();//关闭excel输出流 zipOutputStream.closeEntry(); bis.close(); is.close(); // Complete the ZIP file } catch (IOException e) { e.printStackTrace(); } }

使用浏览器下载方式进行压缩

ServletOutputStream sos = response.getOutputStream(); ZipOutputStream zipOutputStream = new ZipOutputStream(sos); //获取名字 String zipname = "压缩包名字.zip"; response.reset(); response.setContentType("application/x-download"); response.setHeader("Content-Disposition", "attachment;filename=" + new String((zipname).getBytes(), "iso-8859-1")); try { for (int i = 0; i < 文件循环放入; i++) { RepairDto repairDto = repairDtoList.get(i); ByteArrayOutputStream baos = new ByteArrayOutputStream(); //拿取字节存储的输出流,将docx的文件解读写入到流中,并返回文件名称 String filename = "a"+i+".docx"; exportDocx(repairDto, baos); compressFileToZipStream(zipOutputStream, baos, filename); baos.close(); } zipOutputStream.flush(); zipOutputStream.close(); sos.close();

------------恢复内容结束------------


__EOF__

本文作者杰的博客
本文链接https://www.cnblogs.com/sj1027523/p/15905285.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   杰的博客#  阅读(126)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示