使用easypoi导出多图片多Word压缩包
使用模板生成Word
链接: 参考poi api.
新建模板
模板语法
图片:
代码
public XWPFDocument imageWordExport(byte[] imgdata,byte[] backImgData) {
Map<String, Object> map = new HashMap<String, Object>();
//身份证正面图
WordImageEntity image = new WordImageEntity();
image.setHeight(300);
image.setWidth(500);
image.setData(imgdata);
image.setType(WordImageEntity.Data);
map.put("img", image);
//身份证反面图
WordImageEntity backImg = new WordImageEntity();
backImg.setHeight(300);
backImg.setWidth(500);
backImg.setData(backImgData);
backImg.setType(WordImageEntity.Data);
map.put("backImg", backImg);
try {
XWPFDocument doc = WordExportUtil.exportWord07("export/template/IDcardImg.docx", map);
return doc;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
这里我使用的是根据byte[],也可以根据路径,例如
backImg.setUrl(url);
backImg.setType(WordImageEntity.URL);
组装压缩包
String codedFileName = "班组成员身份证图片.zip";
//设置响应头
if ((request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0
|| request.getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true : false) {
codedFileName = java.net.URLEncoder.encode(codedFileName, "UTF8");
} else {
codedFileName = new String(codedFileName.getBytes("UTF-8"), "ISO-8859-1");
}
response.setHeader("content-disposition", "attachment;filename=" + codedFileName);
ServletOutputStream responseOutputStream=response.getOutputStream();
ZipOutputStream zipOutputStream = new ZipOutputStream(responseOutputStream);
OutputStream outputStream = new BufferedOutputStream(zipOutputStream);
int i =0;
for (Map<String, Object> map : findWorkerMasterList) {
//将网络图片转为byte[]数组
ByteArrayOutputStream imgdata = WordUtils.putImageToOutputStream(String.valueOf(map.get("idcard_numberimg")), request);
ByteArrayOutputStream backImgData = WordUtils.putImageToOutputStream(String.valueOf(map.get("idcard_number_backimg")), request);
//生成Word对象
XWPFDocument word = imageWordExport(imgdata.toByteArray(), backImgData.toByteArray());
if (word!= null) {
//压缩包内的文件名不能重复,所以加个数字
zipOutputStream.putNextEntry(new ZipEntry("身份证图片"+i+".docx"));
ByteArrayOutputStream bos=new ByteArrayOutputStream();
word.write(bos);
byte[] content=bos.toByteArray();
//将Word转为字节数组写入response输出流中
outputStream.write(content);
i++;
}
}
outputStream.close();
zipOutputStream.close();
responseOutputStream.flush();
记得关闭流
/**
* 将网络图片写入到OutputStream中
* imgfile 网络图片路径
*/
public static java.io.ByteArrayOutputStream putImageToOutputStream(String imgFile) {
InputStream input = null;
java.io.ByteArrayOutputStream swapStream = new java.io.ByteArrayOutputStream();
try {
if (imgFile.contains("http")) {
URL url = new URL(imgFile);
URLConnection con = url.openConnection();
con.setConnectTimeout(5*1000);
input = con.getInputStream();
byte[] b = new byte[1024];
int n;
while ((n = input.read(b)) != -1) {
swapStream.write(b, 0, n);
}
input.close();
}
}
catch (FileNotFoundException ex1) {
ex1.printStackTrace();
}
catch (IOException ex1) {
ex1.printStackTrace();
}
return swapStream;
}
最终效果如下
如有不对请指正