freemaker 导出自动分页word文档
**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文档相关推荐
- 基于xdocreport导出复杂word文档,专业避坑指南
如果你要先问我为什么要导出word?那么请你走开,你个杠精! 在完成这个功能时花费了大量的时间查阅资料,发现能满足导出复杂word文档的工具只有xdocreport,如果有其他的工具欢迎分享.废话不多 ...
- 将HTML导出生成word文档
前言: 项目开发中遇到了需要将HTML页面的内容导出为一个word文档,所以有了这边随笔. 当然,项目开发又时间有点紧迫,第一时间想到的是用插件,所以百度了下.下面就介绍两个导出word文档的方法. ...
- 导出备忘录Word文档
这里写自定义目录标题 /*** 导出备忘录Word文档** @param id* @return*/@Overridepublic String exportWordMemo(Long id) thr ...
- js将html转为word文档,js将html导出到word文档(含echarts图表)
需求 在开发项目途中遇到了一个需求,就是将一个整个HTML界面导出到word文档,其中包含了echarts图表,经过一番折腾,终于完成了~~~(鸡肋),过程中用到了几个插件,总结了一下几个步骤,希望可 ...
- HTML导出生成Word文档
前言 在某某夜黑风高的一天即将下班的时候,老板召集公司大神们,进行了一个紧急会议,此会议主要目的是老板的客户提出了一些小需求, 有一个前端小 需求,需要将前端HTML导出为Word文档,因为没有做过此 ...
- js将HTML导出生成word文档
在项目开发中中,遇到将HTML导出生成word文档,刚开始在网上找了很多资料,基本都是jQuery中的插件jquery.wordexport.js,刚开始是不想用这个的,这个要引用另一个插件FileS ...
- 用js将HTML文本导出生成word文档
在项目开发中中,遇到将HTML导出生成word文档,刚开始在网上找了很多资料,基本都是jQuery中的插件jquery.wordexport.js,刚开始是不想用这个的,这个要引用另一个插件FileS ...
- 前端报表导出成word文档(含echarts图表)
前端报表导出成word文档(含echarts图表) 一.问题背景: 前端vue做的各种维度的报表,原来是通过前端整体截屏导出成PDF,但部分报表在遇到跨页时会被截断,客户体验极差.然后又考虑客户可能需 ...
- 前端实现HTML导出为word文档
需求:将页面或者页面上所需要的部分导出为word文档 基本导出 修改样式 修改图片大小 修改导出文档名称 修改导出默认方式 准备工作: jquery FileSaver.js jquery.worde ...
最新文章
- php和css一样吗,php和css一样吗
- 一个很不错的让ie6的js兼容 ie7,ie8的库
- SAP CRM BCSet activation debug
- 【计算机算法设计与分析】——排序
- Acwing 309. 装饰围栏
- 01let和const
- 数字电路中的建立时间与保持时间
- 无失真压缩法可以减少冗余_CVPR 2020 论文概述:基于深度学习的层级式视频压缩方法...
- vnpy学习11_增加测试评估指标
- 算法不会,尚能饭否之折半查找(Binary search)
- ubuntu gif 制作工具
- STM32:红外遥控接收模块
- word文档图片画红线_word文档怎么画线条
- 温莎计算机应用硕士是针对国际学生的吗,留学温莎大学
- 如何建立英文字符的哈希表
- 面试题:数据库优化的方法
- Zabbix监控平台部署+监控客户端
- oCPC实践录 | 糟糕,广告主成本超了!
- 1471_TC275的内核种类以及ID判断
- 学Python该看什么书?所有方向的精华好书推荐,18年老程序员倾囊相授!
热门文章
- 第26周-window程序设计(基础篇)-第5章(图形基础)-边界框及LINDEMO.C
- 深信服 2019校园招聘 研发试卷-2018.09.21
- 如何用计算机计算log除法,电脑系统自带科学计算器使用方法
- Android实现自定义铃音
- 华为G520联通版刷机包 高仿三星S5 UI风格美化 B老师作品
- 零知识证明之什么是QAP?什么是P/NP、NP完全问题(NPC问题)、NP hard问题?多项式时间
- Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译
- 瑞思教育被认定为“公共空壳”公司,要参与电动汽车业务?
- [bat] cmd命令进入用户登录界面和屏幕保护程序
- NOJ [1509] 挖宝