导出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();

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

posted @ 2022-02-17 16:37  杰的博客#  阅读(145)  评论(0)    收藏  举报