**freemaker 导出word 基本步骤
1.准备好原word文档
2.将word文档存储为xml文件
3.用文档编辑器打开xml文档,将要动态展示的数据用${name}的形式替换,其中“name”对应返回的动态数据的名称
4.xml文档另存为ftl文档
5.利用freemaker<#list>标签分页,每一页作为list中的一项
以下是具体实现:
要求:每一页的文档都是这样,自动分页,页码自加**

XML文档部分(只标注word的body部分)

*<#assign pageNo =0><#list zmlList as zmlInfo><#assign pageNo = pageNo+1>*<w:body><w:p w:rsidR="006A55E9" w:rsidRDefault="00B604BB"><w:pPr><w:snapToGrid w:val="0"/><w:spacing w:line="580" w:lineRule="exact"/><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体"/><w:b/><w:bCs/><w:spacing w:val="20"/><w:sz w:val="52"/></w:rPr></w:pPr><w:bookmarkStart w:id="0" w:name="OLE_LINK1"/><w:bookmarkStart w:id="1" w:name="OLE_LINK2"/><w:bookmarkStart w:id="2" w:name="OLE_LINK3"/><w:bookmarkStart w:id="3" w:name="OLE_LINK4"/><w:bookmarkStart w:id="4" w:name="OLE_LINK5"/><w:bookmarkStart w:id="5" w:name="OLE_LINK6"/><w:bookmarkStart w:id="6" w:name="OLE_LINK8"/><w:bookmarkStart w:id="7" w:name="OLE_LINK9"/><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/><w:b/><w:bCs/><w:spacing w:val="20"/><w:sz w:val="52"/></w:rPr><w:t>XX目录</w:t></w:r></w:p><w:p w:rsidR="006A55E9" w:rsidRDefault="00B604BB"><w:pPr><w:snapToGrid w:val="0"/><w:spacing w:line="580" w:lineRule="exact"/><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体"/><w:spacing w:val="20"/><w:sz w:val="24"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/><w:spacing w:val="20"/><w:sz w:val="24"/></w:rPr><w:t>[${zmlInfo.nd}]年${zmlInfo.js}卷                                  第${pageNo}页</w:t></w:r></w:p><w:tbl><w:tblPr><w:tblW w:w="10428" w:type="dxa"/><w:jc w:val="center"/><w:tblInd w:w="-157" w:type="dxa"/><w:tblBorders><w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tblBorders><w:tblLayout w:type="fixed"/><w:tblLook w:val="04A0" w:firstRow="1" w:lastRow="0" w:firstColumn="1" w:lastColumn="0" w:noHBand="0" w:noVBand="1"/></w:tblPr><w:tblGrid><w:gridCol w:w="1026"/><w:gridCol w:w="2138"/><w:gridCol w:w="1242"/><w:gridCol w:w="3171"/><w:gridCol w:w="1281"/><w:gridCol w:w="843"/><w:gridCol w:w="727"/></w:tblGrid><w:tr w:rsidR="006A55E9" w:rsidTr="00B604BB"><w:trPr><w:trHeight w:val="592"/><w:jc w:val="center"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="1026" w:type="dxa"/><w:tcBorders><w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="18" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tcBorders><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="006A55E9" w:rsidRDefault="00B604BB"><w:pPr><w:spacing w:line="580" w:lineRule="exact"/><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体"/><w:szCs w:val="21"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/><w:szCs w:val="21"/></w:rPr><w:t>顺序号</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="2138" w:type="dxa"/><w:tcBorders><w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tcBorders><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="006A55E9" w:rsidRDefault="00B604BB"><w:pPr><w:spacing w:line="580" w:lineRule="exact"/><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体"/><w:sz w:val="24"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/><w:sz w:val="24"/></w:rPr><w:t>编号</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1242" w:type="dxa"/><w:tcBorders><w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tcBorders><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="006A55E9" w:rsidRDefault="00B604BB"><w:pPr><w:spacing w:line="580" w:lineRule="exact"/><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体"/><w:sz w:val="24"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/><w:sz w:val="24"/></w:rPr><w:t>责 任 者</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="3171" w:type="dxa"/><w:tcBorders><w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tcBorders><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="006A55E9" w:rsidRDefault="00B604BB"><w:pPr><w:spacing w:line="580" w:lineRule="exact"/><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体"/><w:sz w:val="24"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/><w:sz w:val="24"/></w:rPr><w:t>名称</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1281" w:type="dxa"/><w:tcBorders><w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tcBorders><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="006A55E9" w:rsidRDefault="00B604BB"><w:pPr><w:spacing w:line="580" w:lineRule="exact"/><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体"/><w:sz w:val="24"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/><w:sz w:val="24"/></w:rPr><w:t>所属期限</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="843" w:type="dxa"/><w:tcBorders><w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tcBorders><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="006A55E9" w:rsidRDefault="00B604BB"><w:pPr><w:spacing w:line="580" w:lineRule="exact"/><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体"/><w:sz w:val="24"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/><w:sz w:val="24"/></w:rPr><w:t>页数</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="727" w:type="dxa"/><w:tcBorders><w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="18" w:space="0" w:color="auto"/></w:tcBorders><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="006A55E9" w:rsidRDefault="00B604BB"><w:pPr><w:spacing w:line="580" w:lineRule="exact"/><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体"/><w:sz w:val="24"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/><w:sz w:val="24"/></w:rPr><w:t>备注</w:t></w:r></w:p></w:tc></w:tr><#list zmlInfo.mlList as mlInfo><w:tr w:rsidR="006A55E9" w:rsidTr="00B604BB"><w:trPr><w:trHeight w:hRule="exact" w:val="454"/><w:jc w:val="center"/></w:trPr><w:tc><w:tcPr><w:tcW w:w="1026" w:type="dxa"/><w:tcBorders><w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="18" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tcBorders><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="006A55E9" w:rsidRDefault="00B604BB"><w:pPr><w:widowControl/><w:jc w:val="center"/><w:textAlignment w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体"/><w:sz w:val="18"/><w:szCs w:val="18"/></w:rPr></w:pPr><w:bookmarkStart w:id="8" w:name="OLE_LINK7" w:colFirst="4" w:colLast="4"/><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体" w:hint="eastAsia"/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="18"/><w:szCs w:val="18"/><w:lang w:bidi="ar"/></w:rPr><w:t>${mlInfo.xh}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="2138" w:type="dxa"/><w:tcBorders><w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tcBorders><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="006A55E9" w:rsidRDefault="00B604BB"><w:pPr><w:widowControl/><w:jc w:val="center"/><w:textAlignment w:val="center"/><w:rPr><w:sz w:val="18"/><w:szCs w:val="18"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体" w:hint="eastAsia"/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="18"/><w:szCs w:val="18"/><w:lang w:bidi="ar"/></w:rPr><w:t>${mlInfo.nsrsbh}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1242" w:type="dxa"/><w:tcBorders><w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tcBorders><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="006A55E9" w:rsidRDefault="00B604BB"><w:pPr><w:widowControl/><w:jc w:val="center"/><w:textAlignment w:val="center"/><w:rPr><w:sz w:val="18"/><w:szCs w:val="18"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体" w:hint="eastAsia"/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="18"/><w:szCs w:val="18"/><w:lang w:bidi="ar"/></w:rPr><w:t>${mlInfo.zrz}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="3171" w:type="dxa"/><w:tcBorders><w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tcBorders><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="006A55E9" w:rsidRDefault="00B604BB"><w:pPr><w:widowControl/><w:jc w:val="center"/><w:textAlignment w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体"/><w:sz w:val="18"/><w:szCs w:val="18"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体" w:hint="eastAsia"/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="18"/><w:szCs w:val="18"/><w:lang w:bidi="ar"/></w:rPr><w:t>${mlInfo.zlmc}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="1281" w:type="dxa"/><w:tcBorders><w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tcBorders><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="006A55E9" w:rsidRDefault="00B604BB"><w:pPr><w:widowControl/><w:jc w:val="center"/><w:textAlignment w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体"/><w:sz w:val="18"/><w:szCs w:val="18"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体" w:hint="eastAsia"/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="18"/><w:szCs w:val="18"/><w:lang w:bidi="ar"/></w:rPr><w:t>${mlInfo.ssq}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="843" w:type="dxa"/><w:tcBorders><w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/></w:tcBorders><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="006A55E9" w:rsidRDefault="00B604BB"><w:pPr><w:widowControl/><w:jc w:val="center"/><w:textAlignment w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体"/><w:sz w:val="18"/><w:szCs w:val="18"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:cs="宋体" w:hint="eastAsia"/><w:color w:val="000000"/><w:kern w:val="0"/><w:sz w:val="18"/><w:szCs w:val="18"/><w:lang w:bidi="ar"/></w:rPr><w:t>${mlInfo.ym}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW w:w="727" w:type="dxa"/><w:tcBorders><w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/><w:right w:val="single" w:sz="18" w:space="0" w:color="auto"/></w:tcBorders><w:vAlign w:val="center"/></w:tcPr><w:p w:rsidR="006A55E9" w:rsidRDefault="000E48CB"><w:pPr><w:spacing w:line="400" w:lineRule="exact"/><w:jc w:val="center"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体"/><w:sz w:val="18"/><w:szCs w:val="18"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/><w:sz w:val="18"/><w:szCs w:val="18"/></w:rPr><w:t>${mlInfo.bz}</w:t></w:r><w:bookmarkStart w:id="9" w:name="_GoBack"/><w:bookmarkEnd w:id="9"/></w:p></w:tc></w:tr><#--<#if len==pageno></span><w:br w:type="page"/></span></#if>--></#list><w:bookmarkEnd w:id="8"/></w:tbl><w:p w:rsidR="00B604BB" w:rsidRDefault="00B604BB"><w:pPr><w:spacing w:line="580" w:lineRule="exact"/><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体"/><w:sz w:val="30"/></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:ascii="宋体" w:hAnsi="宋体" w:hint="eastAsia"/><w:sz w:val="30"/></w:rPr><w:t xml:space="preserve">    填制人:${zmlInfo.tzr}  审核人:${zmlInfo.shr}    装订人:${zmlInfo.zdr}</w:t></w:r><w:bookmarkEnd w:id="0"/><w:bookmarkEnd w:id="1"/><w:bookmarkEnd w:id="2"/><w:bookmarkEnd w:id="3"/><w:bookmarkEnd w:id="4"/><w:bookmarkEnd w:id="5"/><w:bookmarkEnd w:id="6"/><w:bookmarkEnd w:id="7"/></w:p><w:sectPr w:rsidR="00B604BB"><w:pgSz w:w="11906" w:h="16838"/><w:pgMar w:top="1440" w:right="1800" w:bottom="1440" w:left="1800" w:header="851" w:footer="992" w:gutter="0"/><w:cols w:space="425"/><w:docGrid w:type="lines" w:linePitch="312"/></w:sectPr></w:body></#list> 

解析数据部分

private void getData(Map<String, Object> dataMap,@RequestParam Map<String, Object> pMap) {  List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();  List<Map<String,Object>> mllist =  new ArrayList<Map<String,Object>>();List<Map<String,Object>> list1 =  new ArrayList<Map<String,Object>>();Map<String, Object> mlMap = new HashMap<String,Object>();  List rows = null ;int len =0;int zys = 0;String zdr="";String shr="";String tzr="";String js = "";try {logger.info("request========"+JSON.toJSONString(pMap));String rtnResult = baseService.executeProc("XX", JSON.toJSONString(pMap));//调用存储过程从数据库返回数据logger.info("response= " + rtnResult);DbRtnDataGrid dbRtnDataGrid = JSONArray.parseObject(rtnResult, DbRtnDataGrid.class);rows = dbRtnDataGrid.getRows();len = rows.size();if(len%25 !=0){zys = (int)len/25 +1;}else{zys = (int)len/25;}} catch(Exception e) {/*resultJSONObj.put("returnCode", "099");resultJSONObj.put("returnMessage", "加载列表失败!");*/logger.error( "加载列表失败!" + e.getMessage());}for(int k =0; k<zys;k++){/*根据总页数循环*/list = new ArrayList<Map<String,Object>>();  mlMap = new HashMap<String,Object>();  Calendar calendar = Calendar.getInstance();// 取当前日期。String year = String.valueOf(calendar.get(1) );JSONObject btObject= JSONObject.parseObject(rows.get(0).toString());mlMap.put("nd", pMap.get("nd").toString());  mlMap.put("tzr", btObject.get("tzr")); mlMap.put("shr", btObject.get("shr")); mlMap.put("zdr", btObject.get("zdr")); /* mlMap.put("page", k+1);  */mlMap.put("js", btObject.get("js"));  mlMap.put("len", zys); int maxLen = 0;if (len<(k+1)*25){maxLen =len;}else{maxLen = (k+1)*25;}for(int i = k*25;i<maxLen;i++){Map<String,Object> map = new HashMap<String,Object>();  JSONObject jsonObject = JSONObject.parseObject(rows.get(i).toString());map.put("nsrsbh", jsonObject.get("nsrsbh"));  map.put("zlmc", jsonObject.get("zlmc"));  map.put("zrz", jsonObject.get("zrz")); map.put("ym", jsonObject.get("ym"));map.put("ssq", jsonObject.get("ssq"));map.put("bz", jsonObject.get("bz"));map.put("xh", jsonObject.get("xh"));list.add(map);  }  if(k==zys-1){if(len<(k+1)*25){int blankTr =25-len%25;for(int j =0; j<blankTr;j++){Map<String,Object> map = new HashMap<String,Object>();  map.put("nsrsbh", " ");  map.put("zlmc", " ");  map.put("zrz", " "); map.put("ym", " ");map.put("ssq", " ");map.put("bz", " ");map.put("xh", " ");list.add(map);  }} }mlMap.put("mlList", list) ;    mllist.add(k, mlMap);}dataMap.put("zmlList", mllist);    }

调用导出

/*** 生成导出word*/@RequestMapping("/dcWord1")public @ResponseBody void dcWord1(@RequestParam Map<String, Object> pMap,HttpServletRequest request,HttpServletResponse response){Map<String, Object> dataMap = new HashMap<String, Object>(); if(pMap!=null){try {String filename = "";//文件名getData(dataMap,pMap);//获取数据WordUtil.exportMillCertificateWord(request,response,dataMap,filename,"mb.ftl");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}    }}

导出word到本地通用

package com.nss.framework.util;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.URLEncoder;
import java.util.Date;
import java.util.Map;import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import freemarker.template.Configuration;
import freemarker.template.Template;public class WordUtil {//配置信息,代码本身写的还是很可读的,就不过多注解了  private static Configuration configuration = null;  //这里注意的是利用WordUtils的类加载器动态获得模板文件的位置  // private static final String templateFolder = WordUtils.class.getClassLoader().getResource("../../").getPath() + "WEB-INF/templetes/";  private static final String templateFolder = WordUtil.class.getResource("").getPath().toString();static {  configuration = new Configuration();  configuration.setDefaultEncoding("utf-8");  try {  //configuration.setDirectoryForTemplateLoading(new File(templateFolder)); configuration.setClassForTemplateLoading(WordUtil.class, "/com/nss/framework/util");} catch (Exception e) {  e.printStackTrace();  }  }  private WordUtil() {  throw new AssertionError();  }  public static void exportMillCertificateWord(HttpServletRequest request, HttpServletResponse response, Map map,String title,String ftlFile) throws IOException {  Template freemarkerTemplate = configuration.getTemplate(ftlFile);  File file = null;  InputStream fin = null;  ServletOutputStream out = null;  try {  // 调用工具类的createDoc方法生成Word文档  file = createDoc(map,freemarkerTemplate);  fin = new FileInputStream(file);  response.setCharacterEncoding("utf-8");  response.setContentType("application/msword");  // 设置浏览器以下载的方式处理该文件名  //String fileName = title+DateUtil.getStrDate("yyyyMMddHHmmss") + ".doc";  response.setHeader("Content-Disposition", "attachment;filename="  .concat(String.valueOf(URLEncoder.encode(title+".doc", "UTF-8"))));  out = response.getOutputStream();  byte[] buffer = new byte[512];  // 缓冲区  int bytesToRead = -1;  // 通过循环将读入的Word文件的内容输出到浏览器中  while((bytesToRead = fin.read(buffer)) != -1) {  out.write(buffer, 0, bytesToRead);  }  } finally {  if(fin != null) fin.close();  if(out != null) out.close();  if(file != null) file.delete(); // 删除临时文件  }  }  private static File createDoc(Map<?, ?> dataMap, Template template) {  String name =  "sellPlan.doc";  File f = new File(name);  Template t = template;  try {  // 这个地方不能使用FileWriter因为需要指定编码类型否则生成的Word文档会因为有无法识别的编码而无法打开  Writer w = new OutputStreamWriter(new FileOutputStream(f), "utf-8");  t.process(dataMap, w);  w.close();  } catch (Exception ex) {  ex.printStackTrace();  throw new RuntimeException(ex);  }  return f;  }
}

freemaker 导出自动分页word文档相关推荐

  1. 基于xdocreport导出复杂word文档,专业避坑指南

    如果你要先问我为什么要导出word?那么请你走开,你个杠精! 在完成这个功能时花费了大量的时间查阅资料,发现能满足导出复杂word文档的工具只有xdocreport,如果有其他的工具欢迎分享.废话不多 ...

  2. 将HTML导出生成word文档

    前言: 项目开发中遇到了需要将HTML页面的内容导出为一个word文档,所以有了这边随笔. 当然,项目开发又时间有点紧迫,第一时间想到的是用插件,所以百度了下.下面就介绍两个导出word文档的方法. ...

  3. 导出备忘录Word文档

    这里写自定义目录标题 /*** 导出备忘录Word文档** @param id* @return*/@Overridepublic String exportWordMemo(Long id) thr ...

  4. js将html转为word文档,js将html导出到word文档(含echarts图表)

    需求 在开发项目途中遇到了一个需求,就是将一个整个HTML界面导出到word文档,其中包含了echarts图表,经过一番折腾,终于完成了~~~(鸡肋),过程中用到了几个插件,总结了一下几个步骤,希望可 ...

  5. HTML导出生成Word文档

    前言 在某某夜黑风高的一天即将下班的时候,老板召集公司大神们,进行了一个紧急会议,此会议主要目的是老板的客户提出了一些小需求, 有一个前端小 需求,需要将前端HTML导出为Word文档,因为没有做过此 ...

  6. js将HTML导出生成word文档

    在项目开发中中,遇到将HTML导出生成word文档,刚开始在网上找了很多资料,基本都是jQuery中的插件jquery.wordexport.js,刚开始是不想用这个的,这个要引用另一个插件FileS ...

  7. 用js将HTML文本导出生成word文档

    在项目开发中中,遇到将HTML导出生成word文档,刚开始在网上找了很多资料,基本都是jQuery中的插件jquery.wordexport.js,刚开始是不想用这个的,这个要引用另一个插件FileS ...

  8. 前端报表导出成word文档(含echarts图表)

    前端报表导出成word文档(含echarts图表) 一.问题背景: 前端vue做的各种维度的报表,原来是通过前端整体截屏导出成PDF,但部分报表在遇到跨页时会被截断,客户体验极差.然后又考虑客户可能需 ...

  9. 前端实现HTML导出为word文档

    需求:将页面或者页面上所需要的部分导出为word文档 基本导出 修改样式 修改图片大小 修改导出文档名称 修改导出默认方式 准备工作: jquery FileSaver.js jquery.worde ...

最新文章

  1. php和css一样吗,php和css一样吗
  2. 一个很不错的让ie6的js兼容 ie7,ie8的库
  3. SAP CRM BCSet activation debug
  4. 【计算机算法设计与分析】——排序
  5. Acwing 309. 装饰围栏
  6. 01let和const
  7. 数字电路中的建立时间与保持时间
  8. 无失真压缩法可以减少冗余_CVPR 2020 论文概述:基于深度学习的层级式视频压缩方法...
  9. vnpy学习11_增加测试评估指标
  10. 算法不会,尚能饭否之折半查找(Binary search)
  11. ubuntu gif 制作工具
  12. STM32:红外遥控接收模块
  13. word文档图片画红线_word文档怎么画线条
  14. 温莎计算机应用硕士是针对国际学生的吗,留学温莎大学
  15. 如何建立英文字符的哈希表
  16. 面试题:数据库优化的方法
  17. Zabbix监控平台部署+监控客户端
  18. oCPC实践录 | 糟糕,广告主成本超了!
  19. 1471_TC275的内核种类以及ID判断
  20. 学Python该看什么书?所有方向的精华好书推荐,18年老程序员倾囊相授!

热门文章

  1. 第26周-window程序设计(基础篇)-第5章(图形基础)-边界框及LINDEMO.C
  2. 深信服 2019校园招聘 研发试卷-2018.09.21
  3. 如何用计算机计算log除法,电脑系统自带科学计算器使用方法
  4. Android实现自定义铃音
  5. 华为G520联通版刷机包 高仿三星S5 UI风格美化 B老师作品
  6. 零知识证明之什么是QAP?什么是P/NP、NP完全问题(NPC问题)、NP hard问题?多项式时间
  7. Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译
  8. 瑞思教育被认定为“公共空壳”公司,要参与电动汽车业务?
  9. [bat] cmd命令进入用户登录界面和屏幕保护程序
  10. NOJ [1509] 挖宝