package com.shareworx.yjwy.utils; import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.Set; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.usermodel.Range; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.util.IOUtils; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; /** * * @author zhenwei.shi * */ public class ImpAndExpWord { /** * 根據表單導出word文檔 * @author zhenwei.shi * @param map 導入對象的鍵值對 KEY=模板標簽 VALUE=替換模板標簽的內容 * @param temlatePath word模板的全部路徑 如:/templates/supplier/供應商管理表單.docs * 此路徑根據架構師搭建的資源環境而定,一般src/../../xx.docs * @return */ public static void export(Map<String,String> params, String docPath){ String docName = docPath.substring(docPath.lastIndexOf("/")+1, docPath.length()); InputStream is = null; ServletOutputStream out = null; try{ //下面這個MAP 就是上面參數里的MAP 在此為了視覺更清晰 真正實施時 提前通過MAP傳進來,不要在此new params = new HashMap<String, String>(); params.put("AAAA","v1");//word模板上有個字符串叫k1,這里將模板上的k1替換為要賦值v1 params.put("k2","v2");//同上 params.put("k3","v3");//同上 params.put("k4","v4");//同上 params.put("k5","v5");//同上 params.put("k6","v6");//同上 params.put("k7","v7");//同上 is = ImpAndExpWord.class.getResourceAsStream("/"+docPath); POIFSFileSystem pfs = new POIFSFileSystem(is); HWPFDocument hwpf = new HWPFDocument(pfs); Range range = hwpf.getRange(); Set<String> keys = params.keySet(); for(String key: keys){ range.replaceText(key, params.get(key)); } HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse(); response.setCharacterEncoding("UTF-8"); response.setContentType("application/octet-stream; charset=UTF-8"); response.addHeader("Content-Disposition", "attachment; filename=\""+new String(docName.getBytes("GB2312"),"ISO8859-1")+"\";");// out = response.getOutputStream(); hwpf.write(out); out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } finally{ IOUtils.closeQuietly(out); IOUtils.closeQuietly(is); } } }
word 圖片

