导出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;
}
}
压缩代码模板
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;
}
}
压缩代码模板
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 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/sj1027523/p/15905285.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了