1、首先再work上定義好模板html
2、把定義好的work轉成xmljava
若是出現下圖錯誤,請百度msxml5.0,下載並安裝,功能就能夠正常使用。app
3、打開xml,把對應要編輯的數據改爲freemarker標籤less
4、放入具體代碼中dom
(1)把文件名改成 ftl後綴,並放入對於工程目錄下
this
(2)Java後臺代碼實現數據填充,並輸出url
/** * * <p>【導出doc文檔】</p> * <p>條件:</p> * <p>備註:</p> * <p>例子:</p> * <p>日誌:</p> * * @author:zhu [2016年2月3日 下午5:11:04] */ public void outOfDocGeneral() { Writer out = null; try { //獲取數據,內容不容許有相似HTML的標籤(<p>、<table>),xml轉doc會出錯,必須文本 hdJyList = hdJyService.findAll(); hd = hdService.load(hd.getId()); Configuration configuration = new Configuration(); configuration.setDefaultEncoding("UTF-8"); //configuration.setDirectoryForTemplateLoading(new File("/WEB-INF/docTemplate")); //FTL文件所存在的位置 //個人Action在 com.a.b.c包下,因此須要跳到5層目錄 configuration.setClassForTemplateLoading(this.getClass(), "../../../../../docTemplate"); Map<String, Object> dataMap = new HashMap<String, Object>(); dataMap.put("title", hd.getHdbt()); dataMap.put("creater", hd.getLrr()); dataMap.put("content", hd.getHdnr()); dataMap.put("createTime", hd.getLrsj()); dataMap.put("hdJyList", hdJyList); Template temp = configuration.getTemplate("hdJyList.ftl"); //調試時候用,輸出到指定文件夾下 //File outFile = new File("D:/outFilessa" + Math.random() * 10000 + ".doc"); //out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8")); //super.getWWResponse()獲取的是HttpServletResponse out = super.getWWResponse().getWriter();// 取得輸出流 super.getWWResponse().reset();// 清空輸出流 super.getWWResponse().setHeader("Content-disposition", "attachment; filename=proposal.doc");// 設定輸出文件頭 super.getWWResponse().setContentType("application/vnd.ms-word;charset=UTF-8");// 定義輸出類型 temp.process(dataMap, out); } catch (Exception ex) { ex.printStackTrace(); } finally { if (out != null) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } }
5、頁面
調試
//後綴有個 .doc,頁面就不會打開,自動下載關閉頁面 window.open (url+"/hdAction!outOfDocGeneral.shtml?file=proposal.doc");