实现Freemarker生成word文档,内容可二次写入
2017-01-10 17:30
471 查看
1. 需求场景
最近项目有需要做一个导出word文档的功能,但由于数据量的问题,数据不能从后台一次性获取到,需要多次查询获取。2. 技术选型
生成word文档涉及各种样式,使用freemarker模板来实现最好不过。3. 逻辑思路
编写2个ftl模板,一个子模板,一个父模板,父类模板中include子类模板。程序运行中读取子ftl模板生成子ftl文件,然后读取父ftl模板生成result.ftl文件,此时result.ftl文件已经包含了子类的ftl内容,最后将result.ftl文件生成doc文件。
4. 代码
工具类 ToDoc.java:package com.** import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.Map; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; public class ToDoc { private Configuration configuration = null; @SuppressWarnings("deprecation") public ToDoc() { configuration = new Configuration(); configuration.setDefaultEncoding("utf-8"); } @SuppressWarnings("deprecation") public void createDoc(Map<Object, Object> dataMap,String docurl,String ftlurl,String ftlName) throws Exception{ Template t = null; try { configuration.setDirectoryForTemplateLoading(new File(ftlurl)); t = configuration.getTemplate(ftlName); t.setEncoding("utf-8"); } catch (IOException e) { e.printStackTrace(); throw new Exception(e); } File outFile = new File(docurl); Writer out = null; try { out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8")); } catch (Exception e1) { e1.printStackTrace(); throw new Exception(e1); } try { t.process(dataMap, out); out.flush(); out.close(); } catch (TemplateException e) { e.printStackTrace(); throw new Exception(e); } catch (IOException e) { e.printStackTrace(); throw new Exception(e); } } @SuppressWarnings("deprecation") public void createFtl(Map<Object, Object> dataMap,String outFtlUrl,int index,String ftlurl,String ftlName) throws Exception{ Template t = null; try { configuration.setDirectoryForTemplateLoading(new File(ftlurl)); t = configuration.getTemplate(ftlName); t.setEncoding("utf-8"); } catch (IOException e) { e.printStackTrace(); throw new Exception(e); } //文件夹创建 File fileFolder =new File(outFtlUrl); if(!fileFolder.exists()){ fileFolder.mkdir(); } File outFile = new File(outFtlUrl + File.separator + Integer.toString(index) + ".ftl"); Writer out = null; try { out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8")); } catch (Exception e1) { e1.printStackTrace(); throw new Exception(e1); } try { t.process(dataMap, out); out.flush(); out.close(); } catch (TemplateException e) { e.printStackTrace(); throw new Exception(e); } catch (IOException e) { e.printStackTrace(); throw new Exception(e); } } }
逻辑类 ExportWord.java
package com.** import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.ServletContext; import org.apache.struts2.ServletActionContext; import com.**.ToDoc; import com.**.DateUtil; public class ExportWord { //生成子ftl文件 @SuppressWarnings("unchecked") private void CreateFtlFile(Object idxObject, int index, String folderName) throws Exception{ ToDoc toDoc = new ToDoc(); //单个子模板-发布服务器路径 String ftlPath = getServletContext().getRealPath("/")+"dev"+File.separator+"ftl"+File.separator; String ftlName = "FM_MD_001.ftl"; //输出路径 String outFtlUrl = getServletContext().getRealPath("/") + folderName; //创建子ftl文件 toDoc.createFtl((Map<Object, Object>)idxObject, outFtlUrl, index, ftlPath,ftlName); } //子+父>>result.ftl @SuppressWarnings("unchecked") private void CreateFtlFileSecond(List<Map<String,Object>> folderObject, String folderName) throws Exception{ ToDoc toDoc = new ToDoc(); //父模板-发布服务器路径 String ftlPath = getServletContext().getRealPath("/")+"dev"+File.separator+"ftl"+File.separator; String ftlName = "FM_MD_000.ftl"; //输出文件名 String fileName = "result.ftl"; //输出的ftl路径 String outFtlUrl = getServletContext().getRealPath("/") + folderName + File.separator + fileName; Map<Object, Object> map = new HashMap<Object, Object>(); int index = 0; for(int i=0;i<folderObject.size();i++){ List<Map<String,Object>> lb = (List<Map<String,Object>>)folderObject.get(i).get("spinfoList"); folderObject.get(i).put("index", i+1); for(int j=0;j<lb.size();j++){ index++; lb.get(j).put("include_path", "<#include \"" + Integer.toString(index) + ".ftl" + "\">"); } } map.put("folderList", folderObject); toDoc.createDoc(map, outFtlUrl,ftlPath,ftlName); } private void CreateDocFile(List<Map<String,Object>> folderObject, String folderName, String docName) throws Exception{ ToDoc toDoc = new ToDoc(); //单个指标模板-发布服务器路径 String ftlPath = getServletContext().getRealPath("/") + folderName + File.separator; String ftlName = "result.ftl"; //输出的doc路径 上一级+时间目录 String outDocFolder = getServletContext().getRealPath("/") + DateUtil.getToday() + File.separator; String outDocUrl = outDocFolder + docName; //文件夹创建 File fileFolder =new File(outDocFolder); if(!fileFolder.exists()){ fileFolder.mkdir(); } Map<Object, Object> map = new HashMap<Object, Object>(); //因为result.ftl中的都是已经加载后的值了,所以再不需要添加内容对象了,folderObject是空的; //思考:CreateDocFile这一步可能可以省略,直接将result.ftl改下后缀名result.doc。。 map.put("folderList", folderObject); toDoc.createDoc(map, outDocUrl,ftlPath,ftlName); } public ServletContext getServletContext() { return ServletActionContext.getServletContext(); } }
子模板 FM_MD_001.ftl
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?mso-application progid="Word.Document"?> <w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve"> <o:DocumentProperties> <o:Author>ZHOU</o:Author> <o:LastAuthor>ZHOU</o:LastAuthor> <o:Revision>2</o:Revision> <o:Created>2014-10-29T12:08:00Z</o:Created> <o:LastSaved>2017-01-09T08:17:09Z</o:LastSaved> <o:Bytes>0</o:Bytes> <o:Pages>1</o:Pages> <o:Words>24</o:Words> <o:Characters>142</o:Characters> <o:Lines>1</o:Lines> <o:Paragraphs>1</o:Paragraphs> <o:CharactersWithSpaces>165</o:CharactersWithSpaces> </o:DocumentProperties> <o:CustomDocumentProperties> <o:KSOProductBuildVer dt:dt="string">2052-10.1.0.6135</o:KSOProductBuildVer> </o:CustomDocumentProperties> <w:fonts> <w:defaultFonts w:ascii="Times New Roman" w:fareast="宋体" w:h-ansi="Times New Roman" w:cs="Times New Roman"/> <w:font w:name="Times New Roman"> <w:panose-1 w:val="02020603050405020304"/> <w:charset w:val="00"/> <w:family w:val="Auto"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="E0002AFF" w:usb-1="C0007841" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF" w:csb-1="FFFF0000"/> </w:font> <w:font w:name="宋体"> <w:panose-1 w:val="02010600030101010101"/> <w:charset w:val="86"/> <w:family w:val="Auto"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="00000003" w:usb-1="288F0000" w:usb-2="00000006" w:usb-3="00000000" w:csb-0="00040001" w:csb-1="00000000"/> </w:font> <w:font w:name="Wingdings"> <w:panose-1 w:val="05000000000000000000"/> <w:charset w:val="02"/> <w:family w:val="Auto"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000" w:csb-1="00000000"/> </w:font> <w:font w:name="Arial"> <w:panose-1 w:val="020B0604020202020204"/> <w:charset w:val="01"/> <w:family w:val="SWiss"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="E0002AFF" w:usb-1="C0007843" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF" w:csb-1="FFFF0000"/> </w:font> <w:font w:name="黑体"> <w:panose-1 w:val="02010609060101010101"/> <w:charset w:val="86"/> <w:family w:val="Auto"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="800002BF" w:usb-1="38CF7CFA" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="00040001" w:csb-1="00000000"/> </w:font> <w:font w:name="Courier New"> <w:panose-1 w:val="02070309020205020404"/> <w:charset w:val="01"/> <w:family w:val="Modern"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="E0002AFF" w:usb-1="C0007843" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF" w:csb-1="FFFF0000"/> </w:font> <w:font w:name="Symbol"> <w:panose-1 w:val="05050102010706020507"/> <w:charset w:val="02"/> <w:family w:val="Roman"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000" w:csb-1="00000000"/> </w:font> <w:font w:name="Cambria"> <w:panose-1 w:val="02040503050406030204"/> <w:charset w:val="00"/> <w:family w:val="Roman"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="E00002FF" w:usb-1="400004FF" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="2000019F" w:csb-1="00000000"/> </w:font> <w:font w:name="Calibri"> <w:panose-1 w:val="020F0502020204030204"/> <w:charset w:val="00"/> <w:family w:val="SWiss"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="E00002FF" w:usb-1="4000ACFF" w:usb-2="00000001" w:usb-3="00000000" w:csb-0="2000019F" w:csb-1="00000000"/> </w:font> <w:font w:name="Calibri Light"> <w:panose-1 w:val="020F0302020204030204"/> <w:charset w:val="00"/> <w:family w:val="SWiss"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="A00002EF" w:usb-1="4000207B" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="2000019F" w:csb-1="00000000"/> </w:font> <w:font w:name="微软雅黑"> <w:panose-1 w:val="020B0503020204020204"/> <w:charset w:val="86"/> <w:family w:val="Auto"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="80000287" w:usb-1="280F3C52" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="0004001F" w:csb-1="00000000"/> </w:font> <w:font w:name="Wingdings"> <w:panose-1 w:val="05000000000000000000"/> <w:charset w:val="00"/> <w:family w:val="Auto"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000" w:csb-1="00000000"/> </w:font> </w:fonts> <w:lists> <w:listDef w:listDefId="0"> <w:plt w:val="SingleLevel"/> <w:lvl w:ilvl="0"> <w:start w:val="1"/> <w:nfc w:val="23"/> <w:lvlText w:val=""/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="420" w:hanging="420" w:first-line-chars="0"/> </w:pPr> <w:rPr> <w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:cs="Wingdings" w:hint="default"/> <w:color w:val="2E75B5"/> </w:rPr> </w:lvl> </w:listDef> <w:listDef w:listDefId="1"> <w:plt w:val="Multilevel"/> <w:lvl w:ilvl="0"> <w:start w:val="1"/> <w:lvlText w:val="%1."/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="425" w:hanging="425"/> </w:pPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:lvl> <w:lvl w:ilvl="1"> <w:start w:val="1"/> <w:lvlText w:val="%1.%2."/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="567" w:hanging="567"/> </w:pPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:lvl> <w:lvl w:ilvl="2"> <w:start w:val="1"/> <w:lvlText w:val="%1.%2.%3."/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="709" w:hanging="709"/> </w:pPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:lvl> <w:lvl w:ilvl="3"> <w:start w:val="1"/> <w:lvlText w:val="%1.%2.%3.%4."/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="850" w:hanging="850"/> </w:pPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:lvl> <w:lvl w:ilvl="4"> <w:start w:val="1"/> <w:lvlText w:val="%1.%2.%3.%4.%5."/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="991" w:hanging="991"/> </w:pPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:lvl> <w:lvl w:ilvl="5"> <w:start w:val="1"/> <w:lvlText w:val="%1.%2.%3.%4.%5.%6."/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="1134" w:hanging="1134"/> </w:pPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:lvl> <w:lvl w:ilvl="6"> <w:start w:val="1"/> <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7."/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="1275" w:hanging="1275"/> </w:pPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:lvl> <w:lvl w:ilvl="7"> <w:start w:val="1"/> <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8."/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="1418" w:hanging="1418"/> </w:pPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:lvl> <w:lvl w:ilvl="8"> <w:start w:val="1"/> <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9."/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="1558" w:hanging="1558"/> </w:pPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:lvl> </w:listDef> <w:list w:ilfo="1"> <w:ilst w:val="1"/> </w:list> <w:list w:ilfo="2"> <w:ilst w:val="0"/> </w:list> </w:lists> <w:styles> <w:latentStyles w:defLockedState="off" w:latentStyleCount="260"> <w:lsdException w:name="Normal"/> <w:lsdException w:name="heading 1"/> <w:lsdException w:name="heading 2"/> <w:lsdException w:name="heading 3"/> <w:lsdException w:name="heading 4"/> <w:lsdException w:name="heading 5"/> <w:lsdException w:name="heading 6"/> <w:lsdException w:name="heading 7"/> <w:lsdException w:name="heading 8"/> <w:lsdException w:name="heading 9"/> <w:lsdException w:name="index 1"/> <w:lsdException w:name="index 2"/> <w:lsdException w:name="index 3"/> <w:lsdException w:name="index 4"/> <w:lsdException w:name="index 5"/> <w:lsdException w:name="index 6"/> <w:lsdException w:name="index 7"/> <w:lsdException w:name="index 8"/> <w:lsdException w:name="index 9"/> <w:lsdException w:name="toc 1"/> <w:lsdException w:name="toc 2"/> <w:lsdException w:name="toc 3"/> <w:lsdException w:name="toc 4"/> <w:lsdException w:name="toc 5"/> <w:lsdException w:name="toc 6"/> <w:lsdException w:name="toc 7"/> <w:lsdException w:name="toc 8"/> <w:lsdException w:name="toc 9"/> <w:lsdException w:name="Normal Indent"/> <w:lsdException w:name="footnote text"/> <w:lsdException w:name="annotation text"/> <w:lsdException w:name="header"/> <w:lsdException w:name="footer"/> <w:lsdException w:name="index heading"/> <w:lsdException w:name="caption"/> <w:lsdException w:name="table of figures"/> <w:lsdException w:name="envelope address"/> <w:lsdException w:name="envelope return"/> <w:lsdException w:name="footnote reference"/> <w:lsdException w:name="annotation reference"/> <w:lsdException w:name="line number"/> <w:lsdException w:name="page number"/> <w:lsdException w:name="endnote reference"/> <w:lsdException w:name="endnote text"/> <w:lsdException w:name="table of authorities"/> <w:lsdException w:name="macro"/> <w:lsdException w:name="toa heading"/> <w:lsdException w:name="List"/> <w:lsdException w:name="List Bullet"/> <w:lsdException w:name="List Number"/> <w:lsdException w:name="List 2"/> <w:lsdException w:name="List 3"/> <w:lsdException w:name="List 4"/> <w:lsdException w:name="List 5"/> <w:lsdException w:name="List Bullet 2"/> <w:lsdException w:name="List Bullet 3"/> <w:lsdException w:name="List Bullet 4"/> <w:lsdException w:name="List Bullet 5"/> <w:lsdException w:name="List Number 2"/> <w:lsdException w:name="List Number 3"/> <w:lsdException w:name="List Number 4"/> <w:lsdException w:name="List Number 5"/> <w:lsdException w:name="Title"/> <w:lsdException w:name="Closing"/> <w:lsdException w:name="Signature"/> <w:lsdException w:name="Default Paragraph Font"/> <w:lsdException w:name="Body Text"/> <w:lsdException w:name="Body Text Indent"/> <w:lsdException w:name="List Continue"/> <w:lsdException w:name="List Continue 2"/> <w:lsdException w:name="List Continue 3"/> <w:lsdException w:name="List Continue 4"/> <w:lsdException w:name="List Continue 5"/> <w:lsdException w:name="Message Header"/> <w:lsdException w:name="Subtitle"/> <w:lsdException w:name="Salutation"/> <w:lsdException w:name="Date"/> <w:lsdException w:name="Body Text First Indent"/> <w:lsdException w:name="Body Text First Indent 2"/> <w:lsdException w:name="Note Heading"/> <w:lsdException w:name="Body Text 2"/> <w:lsdException w:name="Body Text 3"/> <w:lsdException w:name="Body Text Indent 2"/> <w:lsdException w:name="Body Text Indent 3"/> <w:lsdException w:name="Block Text"/> <w:lsdException w:name="Hyperlink"/> <w:lsdException w:name="FollowedHyperlink"/> <w:lsdException w:name="Strong"/> <w:lsdException w:name="Emphasis"/> <w:lsdException w:name="Document Map"/> <w:lsdException w:name="Plain Text"/> <w:lsdException w:name="E-mail Signature"/> <w:lsdException w:name="Normal (Web)"/> <w:lsdException w:name="HTML Acronym"/> <w:lsdException w:name="HTML Address"/> <w:lsdException w:name="HTML Cite"/> <w:lsdException w:name="HTML Code"/> <w:lsdException w:name="HTML Definition"/> <w:lsdException w:name="HTML Keyboard"/> <w:lsdException w:name="HTML Preformatted"/> <w:lsdException w:name="HTML Sample"/> <w:lsdException w:name="HTML Typewriter"/> <w:lsdException w:name="HTML Variable"/> <w:lsdException w:name="Normal Table"/> <w:lsdException w:name="annotation subject"/> <w:lsdException w:name="Table Simple 1"/> <w:lsdException w:name="Table Simple 2"/> <w:lsdException w:name="Table Simple 3"/> <w:lsdException w:name="Table Classic 1"/> <w:lsdException w:name="Table Classic 2"/> <w:lsdException w:name="Table Classic 3"/> <w:lsdException w:name="Table Classic 4"/> <w:lsdException w:name="Table Colorful 1"/> <w:lsdException w:name="Table Colorful 2"/> <w:lsdException w:name="Table Colorful 3"/> <w:lsdException w:name="Table Columns 1"/> <w:lsdException w:name="Table Columns 2"/> <w:lsdException w:name="Table Columns 3"/> <w:lsdException w:name="Table Columns 4"/> <w:lsdException w:name="Table Columns 5"/> <w:lsdException w:name="Table Grid 1"/> <w:lsdException w:name="Table Grid 2"/> <w:lsdException w:name="Table Grid 3"/> <w:lsdException w:name="Table Grid 4"/> <w:lsdException w:name="Table Grid 5"/> <w:lsdException w:name="Table Grid 6"/> <w:lsdException w:name="Table Grid 7"/> <w:lsdException w:name="Table Grid 8"/> <w:lsdException w:name="Table List 1"/> <w:lsdException w:name="Table List 2"/> <w:lsdException w:name="Table List 3"/> <w:lsdException w:name="Table List 4"/> <w:lsdException w:name="Table List 5"/> <w:lsdException w:name="Table List 6"/> <w:lsdException w:name="Table List 7"/> <w:lsdException w:name="Table List 8"/> <w:lsdException w:name="Table 3D effects 1"/> <w:lsdException w:name="Table 3D effects 2"/> <w:lsdException w:name="Table 3D effects 3"/> <w:lsdException w:name="Table Contemporary"/> <w:lsdException w:name="Table Elegant"/> <w:lsdException w:name="Table Professional"/> <w:lsdException w:name="Table Subtle 1"/> <w:lsdException w:name="Table Subtle 2"/> <w:lsdException w:name="Table Web 1"/> <w:lsdException w:name="Table Web 2"/> <w:lsdException w:name="Table Web 3"/> <w:lsdException w:name="Balloon Text"/> <w:lsdException w:name="Table Grid"/> <w:lsdException w:name="Table Theme"/> <w:lsdException w:name="Light Shading"/> <w:lsdException w:name="Light List"/> <w:lsdException w:name="Light Grid"/> <w:lsdException w:name="Medium Shading 1"/> <w:lsdException w:name="Medium Shading 2"/> <w:lsdException w:name="Medium List 1"/> <w:lsdException w:name="Medium List 2"/> <w:lsdException w:name="Medium Grid 1"/> <w:lsdException w:name="Medium Grid 2"/> <w:lsdException w:name="Medium Grid 3"/> <w:lsdException w:name="Dark List"/> <w:lsdException w:name="Colorful Shading"/> <w:lsdException w:name="Colorful List"/> <w:lsdException w:name="Colorful Grid"/> <w:lsdException w:name="Light Shading Accent 1"/> <w:lsdException w:name="Light List Accent 1"/> <w:lsdException w:name="Light Grid Accent 1"/> <w:lsdException w:name="Medium Shading 1 Accent 1"/> <w:lsdException w:name="Medium Shading 2 Accent 1"/> <w:lsdException w:name="Medium List 1 Accent 1"/> <w:lsdException w:name="Medium List 2 Accent 1"/> <w:lsdException w:name="Medium Grid 1 Accent 1"/> <w:lsdException w:name="Medium Grid 2 Accent 1"/> <w:lsdException w:name="Medium Grid 3 Accent 1"/> <w:lsdException w:name="Dark List Accent 1"/> <w:lsdException w:name="Colorful Shading Accent 1"/> <w:lsdException w:name="Colorful List Accent 1"/> <w:lsdException w:name="Colorful Grid Accent 1"/> <w:lsdException w:name="Light Shading Accent 2"/> <w:lsdException w:name="Light List Accent 2"/> <w:lsdException w:name="Light Grid Accent 2"/> <w:lsdException w:name="Medium Shading 1 Accent 2"/> <w:lsdException w:name="Medium Shading 2 Accent 2"/> <w:lsdException w:name="Medium List 1 Accent 2"/> <w:lsdException w:name="Medium List 2 Accent 2"/> <w:lsdException w:name="Medium Grid 1 Accent 2"/> <w:lsdException w:name="Medium Grid 2 Accent 2"/> <w:lsdException w:name="Medium Grid 3 Accent 2"/> <w:lsdException w:name="Dark List Accent 2"/> <w:lsdException w:name="Colorful Shading Accent 2"/> <w:lsdException w:name="Colorful List Accent 2"/> <w:lsdException w:name="Colorful Grid Accent 2"/> <w:lsdException w:name="Light Shading Accent 3"/> <w:lsdException w:name="Light List Accent 3"/> <w:lsdException w:name="Light Grid Accent 3"/> <w:lsdException w:name="Medium Shading 1 Accent 3"/> <w:lsdException w:name="Medium Shading 2 Accent 3"/> <w:lsdException w:name="Medium List 1 Accent 3"/> <w:lsdException w:name="Medium List 2 Accent 3"/> <w:lsdException w:name="Medium Grid 1 Accent 3"/> <w:lsdException w:name="Medium Grid 2 Accent 3"/> <w:lsdException w:name="Medium Grid 3 Accent 3"/> <w:lsdException w:name="Dark List Accent 3"/> <w:lsdException w:name="Colorful Shading Accent 3"/> <w:lsdException w:name="Colorful List Accent 3"/> <w:lsdException w:name="Colorful Grid Accent 3"/> <w:lsdException w:name="Light Shading Accent 4"/> <w:lsdException w:name="Light List Accent 4"/> <w:lsdException w:name="Light Grid Accent 4"/> <w:lsdException w:name="Medium Shading 1 Accent 4"/> <w:lsdException w:name="Medium Shading 2 Accent 4"/> <w:lsdException w:name="Medium List 1 Accent 4"/> <w:lsdException w:name="Medium List 2 Accent 4"/> <w:lsdException w:name="Medium Grid 1 Accent 4"/> <w:lsdException w:name="Medium Grid 2 Accent 4"/> <w:lsdException w:name="Medium Grid 3 Accent 4"/> <w:lsdException w:name="Dark List Accent 4"/> <w:lsdException w:name="Colorful Shading Accent 4"/> <w:lsdException w:name="Colorful List Accent 4"/> <w:lsdException w:name="Colorful Grid Accent 4"/> <w:lsdException w:name="Light Shading Accent 5"/> <w:lsdException w:name="Light List Accent 5"/> <w:lsdException w:name="Light Grid Accent 5"/> <w:lsdException w:name="Medium Shading 1 Accent 5"/> <w:lsdException w:name="Medium Shading 2 Accent 5"/> <w:lsdException w:name="Medium List 1 Accent 5"/> <w:lsdException w:name="Medium List 2 Accent 5"/> <w:lsdException w:name="Medium Grid 1 Accent 5"/> <w:lsdException w:name="Medium Grid 2 Accent 5"/> <w:lsdException w:name="Medium Grid 3 Accent 5"/> <w:lsdException w:name="Dark List Accent 5"/> <w:lsdException w:name="Colorful Shading Accent 5"/> <w:lsdException w:name="Colorful List Accent 5"/> <w:lsdException w:name="Colorful Grid Accent 5"/> <w:lsdException w:name="Light Shading Accent 6"/> <w:lsdException w:name="Light List Accent 6"/> <w:lsdException w:name="Light Grid Accent 6"/> <w:lsdException w:name="Medium Shading 1 Accent 6"/> <w:lsdException w:name="Medium Shading 2 Accent 6"/> <w:lsdException w:name="Medium List 1 Accent 6"/> <w:lsdException w:name="Medium List 2 Accent 6"/> <w:lsdException w:name="Medium Grid 1 Accent 6"/> <w:lsdException w:name="Medium Grid 2 Accent 6"/> <w:lsdException w:name="Medium Grid 3 Accent 6"/> <w:lsdException w:name="Dark List Accent 6"/> <w:lsdException w:name="Colorful Shading Accent 6"/> <w:lsdException w:name="Colorful List Accent 6"/> <w:lsdException w:name="Colorful Grid Accent 6"/> </w:latentStyles> <w:style w:type="paragraph" w:styleId="a1" w:default="on"> <w:name w:val="Normal"/> <w:pPr> <w:widowControl w:val="off"/> <w:jc w:val="both"/> </w:pPr> <w:rPr> <w:rFonts w:ascii="Calibri" w:h-ansi="Calibri" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/> <w:kern w:val="2"/> <w:sz w:val="21"/> <w:sz-cs w:val="24"/> <w:lang w:val="EN-US" w:fareast="ZH-CN"/> </w:rPr> </w:style> <w:style w:type="paragraph" w:styleId="2"> <w:name w:val="heading 2"/> <w:basedOn w:val="a1"/> <w:next w:val="a1"/> <w:pPr> <w:spacing w:before-autospacing="on" w:after-autospacing="on"/> <w:jc w:val="left"/> <w:outlineLvl w:val="1"/> </w:pPr> <w:rPr> <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="fareast"/> <w:b/> <w:kern w:val="0"/> <w:sz w:val="36"/> <w:sz-cs w:val="36"/> </w:rPr> </w:style> <w:style w:type="paragraph" w:styleId="3"> <w:name w:val="heading 3"/> <w:basedOn w:val="a1"/> <w:next w:val="a1"/> <w:pPr> <w:spacing w:before-autospacing="on" w:after-autospacing="on"/> <w:jc w:val="left"/> <w:outlineLvl w:val="2"/> </w:pPr> <w:rPr> <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="fareast"/> <w:b/> <w:kern w:val="0"/> <w:sz w:val="27"/> <w:sz-cs w:val="27"/> </w:rPr> </w:style> <w:style w:type="character" w:styleId="a4" w:default="on"> <w:name w:val="Default Paragraph Font"/> </w:style> <w:style w:type="table" w:styleId="a5" w:default="on"> <w:name w:val="Normal Table"/> <w:tblPr> <w:tblCellMar> <w:top w:w="0" w:type="dxa"/> <w:left w:w="108" w:type="dxa"/> <w:bottom w:w="0" w:type="dxa"/> <w:right w:w="108" w:type="dxa"/> </w:tblCellMar> </w:tblPr> </w:style> <w:style w:type="paragraph" w:styleId="a6"> <w:name w:val="List Paragraph"/> <w:basedOn w:val="a1"/> <w:pPr> <w:ind w:first-line="420" w:first-line-chars="200"/> </w:pPr> </w:style> </w:styles> <w:bgPict> <w:background/> <v:background id="_x0000_s1025"> <v:fill on="f" focussize="0,0"/> </v:background> </w:bgPict> <w:docPr> <w:view w:val="print"/> <w:zoom w:percent="100"/> <w:characterSpacingControl w:val="CompressPunctuation"/> <w:documentProtection w:enforcement="off"/> <w:defaultTabStop w:val="420"/> <w:drawingGridVerticalSpacing w:val="156"/> <w:displayHorizontalDrawingGridEvery w:val="1"/> <w:displayVerticalDrawingGridEvery w:val="1"/> <w:compat> <w:adjustLineHeightInTable/> <w:doNotExpandShiftReturn/> <w:balanceSingleByteDoubleByteWidth/> <w:useFELayout/> <w:spaceForUL/> <w:breakWrappedTables/> <w:dontGrowAutofit/> <w:useFELayout/> </w:compat> </w:docPr> <w:body> <wx:sect> <#list folderList as fl> <w:p> <w:pPr> <w:pStyle w:val="2"/> <w:widowControl/> <w:listPr> <w:ilvl w:val="0"/> <w:ilfo w:val="1"/> </w:listPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:pPr> <w:r> <w:t>${fl.folderName}</w:t> </w:r> </w:p> <#list fl.spiderIdxInfoList as sl> <w:p> <w:pPr> <w:pStyle w:val="2"/> <w:widowControl/> <w:listPr> <w:ilvl w:val="1"/> <w:ilfo w:val="1"/> </w:listPr> <w:rPr> <w:rFonts w:hint="default"/> <w:color w:val="0000FF"/> <w:sz w:val="28"/> <w:sz-cs w:val="28"/> </w:rPr> </w:pPr> <w:r> <w:rPr> <w:color w:val="0000FF"/> <w:sz w:val="28"/> <w:sz-cs w:val="28"/> </w:rPr> <w:t>${sl.idxName}</w:t> </w:r> </w:p> ${sl.include_path} </#list> </#list> <w:p> <w:pPr> <w:rPr> <w:rFonts w:hint="fareast"/> </w:rPr> </w:pPr> </w:p> <w:p> <w:pPr> <w:widowControl/> <w:rPr> <w:rFonts w:hint="fareast"/> </w:rPr> </w:pPr> </w:p> <w:sectPr> <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:line-pitch="312"/> </w:sectPr> </wx:sect> </w:body> </w:wordDocument>
父模板 FM_MD_000.ftl
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <?mso-application progid="Word.Document"?> <w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core" xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no" xml:space="preserve"> <o:DocumentProperties> <o:Author>ZHOU</o:Author> <o:LastAuthor>ZHOU</o:LastAuthor> <o:Revision>2</o:Revision> <o:Created>2014-10-29T12:08:00Z</o:Created> <o:LastSaved>2017-01-09T08:17:09Z</o:LastSaved> <o:Bytes>0</o:Bytes> <o:Pages>1</o:Pages> <o:Words>24</o:Words> <o:Characters>142</o:Characters> <o:Lines>1</o:Lines> <o:Paragraphs>1</o:Paragraphs> <o:CharactersWithSpaces>165</o:CharactersWithSpaces> </o:DocumentProperties> <o:CustomDocumentProperties> <o:KSOProductBuildVer dt:dt="string">2052-10.1.0.6135</o:KSOProductBuildVer> </o:CustomDocumentProperties> <w:fonts> <w:defaultFonts w:ascii="Times New Roman" w:fareast="宋体" w:h-ansi="Times New Roman" w:cs="Times New Roman"/> <w:font w:name="Times New Roman"> <w:panose-1 w:val="02020603050405020304"/> <w:charset w:val="00"/> <w:family w:val="Auto"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="E0002AFF" w:usb-1="C0007841" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF" w:csb-1="FFFF0000"/> </w:font> <w:font w:name="宋体"> <w:panose-1 w:val="02010600030101010101"/> <w:charset w:val="86"/> <w:family w:val="Auto"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="00000003" w:usb-1="288F0000" w:usb-2="00000006" w:usb-3="00000000" w:csb-0="00040001" w:csb-1="00000000"/> </w:font> <w:font w:name="Wingdings"> <w:panose-1 w:val="05000000000000000000"/> <w:charset w:val="02"/> <w:family w:val="Auto"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000" w:csb-1="00000000"/> </w:font> <w:font w:name="Arial"> <w:panose-1 w:val="020B0604020202020204"/> <w:charset w:val="01"/> <w:family w:val="SWiss"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="E0002AFF" w:usb-1="C0007843" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF" w:csb-1="FFFF0000"/> </w:font> <w:font w:name="黑体"> <w:panose-1 w:val="02010609060101010101"/> <w:charset w:val="86"/> <w:family w:val="Auto"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="800002BF" w:usb-1="38CF7CFA" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="00040001" w:csb-1="00000000"/> </w:font> <w:font w:name="Courier New"> <w:panose-1 w:val="02070309020205020404"/> <w:charset w:val="01"/> <w:family w:val="Modern"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="E0002AFF" w:usb-1="C0007843" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF" w:csb-1="FFFF0000"/> </w:font> <w:font w:name="Symbol"> <w:panose-1 w:val="05050102010706020507"/> <w:charset w:val="02"/> <w:family w:val="Roman"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000" w:csb-1="00000000"/> </w:font> <w:font w:name="Cambria"> <w:panose-1 w:val="02040503050406030204"/> <w:charset w:val="00"/> <w:family w:val="Roman"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="E00002FF" w:usb-1="400004FF" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="2000019F" w:csb-1="00000000"/> </w:font> <w:font w:name="Calibri"> <w:panose-1 w:val="020F0502020204030204"/> <w:charset w:val="00"/> <w:family w:val="SWiss"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="E00002FF" w:usb-1="4000ACFF" w:usb-2="00000001" w:usb-3="00000000" w:csb-0="2000019F" w:csb-1="00000000"/> </w:font> <w:font w:name="Calibri Light"> <w:panose-1 w:val="020F0302020204030204"/> <w:charset w:val="00"/> <w:family w:val="SWiss"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="A00002EF" w:usb-1="4000207B" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="2000019F" w:csb-1="00000000"/> </w:font> <w:font w:name="微软雅黑"> <w:panose-1 w:val="020B0503020204020204"/> <w:charset w:val="86"/> <w:family w:val="Auto"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="80000287" w:usb-1="280F3C52" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="0004001F" w:csb-1="00000000"/> </w:font> <w:font w:name="Wingdings"> <w:panose-1 w:val="05000000000000000000"/> <w:charset w:val="00"/> <w:family w:val="Auto"/> <w:pitch w:val="Default"/> <w:sig w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000" w:csb-1="00000000"/> </w:font> </w:fonts> <w:lists> <w:listDef w:listDefId="0"> <w:plt w:val="SingleLevel"/> <w:lvl w:ilvl="0"> <w:start w:val="1"/> <w:nfc w:val="23"/> <w:lvlText w:val=""/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="420" w:hanging="420" w:first-line-chars="0"/> </w:pPr> <w:rPr> <w:rFonts w:ascii="Wingdings" w:h-ansi="Wingdings" w:cs="Wingdings" w:hint="default"/> <w:color w:val="2E75B5"/> </w:rPr> </w:lvl> </w:listDef> <w:listDef w:listDefId="1"> <w:plt w:val="Multilevel"/> <w:lvl w:ilvl="0"> <w:start w:val="1"/> <w:lvlText w:val="%1."/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="425" w:hanging="425"/> </w:pPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:lvl> <w:lvl w:ilvl="1"> <w:start w:val="1"/> <w:lvlText w:val="%1.%2."/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="567" w:hanging="567"/> </w:pPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:lvl> <w:lvl w:ilvl="2"> <w:start w:val="1"/> <w:lvlText w:val="%1.%2.%3."/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="709" w:hanging="709"/> </w:pPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:lvl> <w:lvl w:ilvl="3"> <w:start w:val="1"/> <w:lvlText w:val="%1.%2.%3.%4."/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="850" w:hanging="850"/> </w:pPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:lvl> <w:lvl w:ilvl="4"> <w:start w:val="1"/> <w:lvlText w:val="%1.%2.%3.%4.%5."/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="991" w:hanging="991"/> </w:pPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:lvl> <w:lvl w:ilvl="5"> <w:start w:val="1"/> <w:lvlText w:val="%1.%2.%3.%4.%5.%6."/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="1134" w:hanging="1134"/> </w:pPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:lvl> <w:lvl w:ilvl="6"> <w:start w:val="1"/> <w:lvlText w:v 1c6f7 al="%1.%2.%3.%4.%5.%6.%7."/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="1275" w:hanging="1275"/> </w:pPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:lvl> <w:lvl w:ilvl="7"> <w:start w:val="1"/> <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8."/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="1418" w:hanging="1418"/> </w:pPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:lvl> <w:lvl w:ilvl="8"> <w:start w:val="1"/> <w:lvlText w:val="%1.%2.%3.%4.%5.%6.%7.%8.%9."/> <w:lvlJc w:val="left"/> <w:pPr> <w:ind w:left="1558" w:hanging="1558"/> </w:pPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:lvl> </w:listDef> <w:list w:ilfo="1"> <w:ilst w:val="1"/> </w:list> <w:list w:ilfo="2"> <w:ilst w:val="0"/> </w:list> </w:lists> <w:styles> <w:latentStyles w:defLockedState="off" w:latentStyleCount="260"> <w:lsdException w:name="Normal"/> <w:lsdException w:name="heading 1"/> <w:lsdException w:name="heading 2"/> <w:lsdException w:name="heading 3"/> <w:lsdException w:name="heading 4"/> <w:lsdException w:name="heading 5"/> <w:lsdException w:name="heading 6"/> <w:lsdException w:name="heading 7"/> <w:lsdException w:name="heading 8"/> <w:lsdException w:name="heading 9"/> <w:lsdException w:name="index 1"/> <w:lsdException w:name="index 2"/> <w:lsdException w:name="index 3"/> <w:lsdException w:name="index 4"/> <w:lsdException w:name="index 5"/> <w:lsdException w:name="index 6"/> <w:lsdException w:name="index 7"/> <w:lsdException w:name="index 8"/> <w:lsdException w:name="index 9"/> <w:lsdException w:name="toc 1"/> <w:lsdException w:name="toc 2"/> <w:lsdException w:name="toc 3"/> <w:lsdException w:name="toc 4"/> <w:lsdException w:name="toc 5"/> <w:lsdException w:name="toc 6"/> <w:lsdException w:name="toc 7"/> <w:lsdException w:name="toc 8"/> <w:lsdException w:name="toc 9"/> <w:lsdException w:name="Normal Indent"/> <w:lsdException w:name="footnote text"/> <w:lsdException w:name="annotation text"/> <w:lsdException w:name="header"/> <w:lsdException w:name="footer"/> <w:lsdException w:name="index heading"/> <w:lsdException w:name="caption"/> <w:lsdException w:name="table of figures"/> <w:lsdException w:name="envelope address"/> <w:lsdException w:name="envelope return"/> <w:lsdException w:name="footnote reference"/> <w:lsdException w:name="annotation reference"/> <w:lsdException w:name="line number"/> <w:lsdException w:name="page number"/> <w:lsdException w:name="endnote reference"/> <w:lsdException w:name="endnote text"/> <w:lsdException w:name="table of authorities"/> <w:lsdException w:name="macro"/> <w:lsdException w:name="toa heading"/> <w:lsdException w:name="List"/> <w:lsdException w:name="List Bullet"/> <w:lsdException w:name="List Number"/> <w:lsdException w:name="List 2"/> <w:lsdException w:name="List 3"/> <w:lsdException w:name="List 4"/> <w:lsdException w:name="List 5"/> <w:lsdException w:name="List Bullet 2"/> <w:lsdException w:name="List Bullet 3"/> <w:lsdException w:name="List Bullet 4"/> <w:lsdException w:name="List Bullet 5"/> <w:lsdException w:name="List Number 2"/> <w:lsdException w:name="List Number 3"/> <w:lsdException w:name="List Number 4"/> <w:lsdException w:name="List Number 5"/> <w:lsdException w:name="Title"/> <w:lsdException w:name="Closing"/> <w:lsdException w:name="Signature"/> <w:lsdException w:name="Default Paragraph Font"/> <w:lsdException w:name="Body Text"/> <w:lsdException w:name="Body Text Indent"/> <w:lsdException w:name="List Continue"/> <w:lsdException w:name="List Continue 2"/> <w:lsdException w:name="List Continue 3"/> <w:lsdException w:name="List Continue 4"/> <w:lsdException w:name="List Continue 5"/> <w:lsdException w:name="Message Header"/> <w:lsdException w:name="Subtitle"/> <w:lsdException w:name="Salutation"/> <w:lsdException w:name="Date"/> <w:lsdException w:name="Body Text First Indent"/> <w:lsdException w:name="Body Text First Indent 2"/> <w:lsdException w:name="Note Heading"/> <w:lsdException w:name="Body Text 2"/> <w:lsdException w:name="Body Text 3"/> <w:lsdException w:name="Body Text Indent 2"/> <w:lsdException w:name="Body Text Indent 3"/> <w:lsdException w:name="Block Text"/> <w:lsdException w:name="Hyperlink"/> <w:lsdException w:name="FollowedHyperlink"/> <w:lsdException w:name="Strong"/> <w:lsdException w:name="Emphasis"/> <w:lsdException w:name="Document Map"/> <w:lsdException w:name="Plain Text"/> <w:lsdException w:name="E-mail Signature"/> <w:lsdException w:name="Normal (Web)"/> <w:lsdException w:name="HTML Acronym"/> <w:lsdException w:name="HTML Address"/> <w:lsdException w:name="HTML Cite"/> <w:lsdException w:name="HTML Code"/> <w:lsdException w:name="HTML Definition"/> <w:lsdException w:name="HTML Keyboard"/> <w:lsdException w:name="HTML Preformatted"/> <w:lsdException w:name="HTML Sample"/> <w:lsdException w:name="HTML Typewriter"/> <w:lsdException w:name="HTML Variable"/> <w:lsdException w:name="Normal Table"/> <w:lsdException w:name="annotation subject"/> <w:lsdException w:name="Table Simple 1"/> <w:lsdException w:name="Table Simple 2"/> <w:lsdException w:name="Table Simple 3"/> <w:lsdException w:name="Table Classic 1"/> <w:lsdException w:name="Table Classic 2"/> <w:lsdException w:name="Table Classic 3"/> <w:lsdException w:name="Table Classic 4"/> <w:lsdException w:name="Table Colorful 1"/> <w:lsdException w:name="Table Colorful 2"/> <w:lsdException w:name="Table Colorful 3"/> <w:lsdException w:name="Table Columns 1"/> <w:lsdException w:name="Table Columns 2"/> <w:lsdException w:name="Table Columns 3"/> <w:lsdException w:name="Table Columns 4"/> <w:lsdException w:name="Table Columns 5"/> <w:lsdException w:name="Table Grid 1"/> <w:lsdException w:name="Table Grid 2"/> <w:lsdException w:name="Table Grid 3"/> <w:lsdException w:name="Table Grid 4"/> <w:lsdException w:name="Table Grid 5"/> <w:lsdException w:name="Table Grid 6"/> <w:lsdException w:name="Table Grid 7"/> <w:lsdException w:name="Table Grid 8"/> <w:lsdException w:name="Table List 1"/> <w:lsdException w:name="Table List 2"/> <w:lsdException w:name="Table List 3"/> <w:lsdException w:name="Table List 4"/> <w:lsdException w:name="Table List 5"/> <w:lsdException w:name="Table List 6"/> <w:lsdException w:name="Table List 7"/> <w:lsdException w:name="Table List 8"/> <w:lsdException w:name="Table 3D effects 1"/> <w:lsdException w:name="Table 3D effects 2"/> <w:lsdException w:name="Table 3D effects 3"/> <w:lsdException w:name="Table Contemporary"/> <w:lsdException w:name="Table Elegant"/> <w:lsdException w:name="Table Professional"/> <w:lsdException w:name="Table Subtle 1"/> <w:lsdException w:name="Table Subtle 2"/> <w:lsdException w:name="Table Web 1"/> <w:lsdException w:name="Table Web 2"/> <w:lsdException w:name="Table Web 3"/> <w:lsdException w:name="Balloon Text"/> <w:lsdException w:name="Table Grid"/> <w:lsdException w:name="Table Theme"/> <w:lsdException w:name="Light Shading"/> <w:lsdException w:name="Light List"/> <w:lsdException w:name="Light Grid"/> <w:lsdException w:name="Medium Shading 1"/> <w:lsdException w:name="Medium Shading 2"/> <w:lsdException w:name="Medium List 1"/> <w:lsdException w:name="Medium List 2"/> <w:lsdException w:name="Medium Grid 1"/> <w:lsdException w:name="Medium Grid 2"/> <w:lsdException w:name="Medium Grid 3"/> <w:lsdException w:name="Dark List"/> <w:lsdException w:name="Colorful Shading"/> <w:lsdException w:name="Colorful List"/> <w:lsdException w:name="Colorful Grid"/> <w:lsdException w:name="Light Shading Accent 1"/> <w:lsdException w:name="Light List Accent 1"/> <w:lsdException w:name="Light Grid Accent 1"/> <w:lsdException w:name="Medium Shading 1 Accent 1"/> <w:lsdException w:name="Medium Shading 2 Accent 1"/> <w:lsdException w:name="Medium List 1 Accent 1"/> <w:lsdException w:name="Medium List 2 Accent 1"/> <w:lsdException w:name="Medium Grid 1 Accent 1"/> <w:lsdException w:name="Medium Grid 2 Accent 1"/> <w:lsdException w:name="Medium Grid 3 Accent 1"/> <w:lsdException w:name="Dark List Accent 1"/> <w:lsdException w:name="Colorful Shading Accent 1"/> <w:lsdException w:name="Colorful List Accent 1"/> <w:lsdException w:name="Colorful Grid Accent 1"/> <w:lsdException w:name="Light Shading Accent 2"/> <w:lsdException w:name="Light List Accent 2"/> <w:lsdException w:name="Light Grid Accent 2"/> <w:lsdException w:name="Medium Shading 1 Accent 2"/> <w:lsdException w:name="Medium Shading 2 Accent 2"/> <w:lsdException w:name="Medium List 1 Accent 2"/> <w:lsdException w:name="Medium List 2 Accent 2"/> <w:lsdException w:name="Medium Grid 1 Accent 2"/> <w:lsdException w:name="Medium Grid 2 Accent 2"/> <w:lsdException w:name="Medium Grid 3 Accent 2"/> <w:lsdException w:name="Dark List Accent 2"/> <w:lsdException w:name="Colorful Shading Accent 2"/> <w:lsdException w:name="Colorful List Accent 2"/> <w:lsdException w:name="Colorful Grid Accent 2"/> <w:lsdException w:name="Light Shading Accent 3"/> <w:lsdException w:name="Light List Accent 3"/> <w:lsdException w:name="Light Grid Accent 3"/> <w:lsdException w:name="Medium Shading 1 Accent 3"/> <w:lsdException w:name="Medium Shading 2 Accent 3"/> <w:lsdException w:name="Medium List 1 Accent 3"/> <w:lsdException w:name="Medium List 2 Accent 3"/> <w:lsdException w:name="Medium Grid 1 Accent 3"/> <w:lsdException w:name="Medium Grid 2 Accent 3"/> <w:lsdException w:name="Medium Grid 3 Accent 3"/> <w:lsdException w:name="Dark List Accent 3"/> <w:lsdException w:name="Colorful Shading Accent 3"/> <w:lsdException w:name="Colorful List Accent 3"/> <w:lsdException w:name="Colorful Grid Accent 3"/> <w:lsdException w:name="Light Shading Accent 4"/> <w:lsdException w:name="Light List Accent 4"/> <w:lsdException w:name="Light Grid Accent 4"/> <w:lsdException w:name="Medium Shading 1 Accent 4"/> <w:lsdException w:name="Medium Shading 2 Accent 4"/> <w:lsdException w:name="Medium List 1 Accent 4"/> <w:lsdException w:name="Medium List 2 Accent 4"/> <w:lsdException w:name="Medium Grid 1 Accent 4"/> <w:lsdException w:name="Medium Grid 2 Accent 4"/> <w:lsdException w:name="Medium Grid 3 Accent 4"/> <w:lsdException w:name="Dark List Accent 4"/> <w:lsdException w:name="Colorful Shading Accent 4"/> <w:lsdException w:name="Colorful List Accent 4"/> <w:lsdException w:name="Colorful Grid Accent 4"/> <w:lsdException w:name="Light Shading Accent 5"/> <w:lsdException w:name="Light List Accent 5"/> <w:lsdException w:name="Light Grid Accent 5"/> <w:lsdException w:name="Medium Shading 1 Accent 5"/> <w:lsdException w:name="Medium Shading 2 Accent 5"/> <w:lsdException w:name="Medium List 1 Accent 5"/> <w:lsdException w:name="Medium List 2 Accent 5"/> <w:lsdException w:name="Medium Grid 1 Accent 5"/> <w:lsdException w:name="Medium Grid 2 Accent 5"/> <w:lsdException w:name="Medium Grid 3 Accent 5"/> <w:lsdException w:name="Dark List Accent 5"/> <w:lsdException w:name="Colorful Shading Accent 5"/> <w:lsdException w:name="Colorful List Accent 5"/> <w:lsdException w:name="Colorful Grid Accent 5"/> <w:lsdException w:name="Light Shading Accent 6"/> <w:lsdException w:name="Light List Accent 6"/> <w:lsdException w:name="Light Grid Accent 6"/> <w:lsdException w:name="Medium Shading 1 Accent 6"/> <w:lsdException w:name="Medium Shading 2 Accent 6"/> <w:lsdException w:name="Medium List 1 Accent 6"/> <w:lsdException w:name="Medium List 2 Accent 6"/> <w:lsdException w:name="Medium Grid 1 Accent 6"/> <w:lsdException w:name="Medium Grid 2 Accent 6"/> <w:lsdException w:name="Medium Grid 3 Accent 6"/> <w:lsdException w:name="Dark List Accent 6"/> <w:lsdException w:name="Colorful Shading Accent 6"/> <w:lsdException w:name="Colorful List Accent 6"/> <w:lsdException w:name="Colorful Grid Accent 6"/> </w:latentStyles> <w:style w:type="paragraph" w:styleId="a1" w:default="on"> <w:name w:val="Normal"/> <w:pPr> <w:widowControl w:val="off"/> <w:jc w:val="both"/> </w:pPr> <w:rPr> <w:rFonts w:ascii="Calibri" w:h-ansi="Calibri" w:fareast="宋体" w:cs="Times New Roman" w:hint="default"/> <w:kern w:val="2"/> <w:sz w:val="21"/> <w:sz-cs w:val="24"/> <w:lang w:val="EN-US" w:fareast="ZH-CN"/> </w:rPr> </w:style> <w:style w:type="paragraph" w:styleId="2"> <w:name w:val="heading 2"/> <w:basedOn w:val="a1"/> <w:next w:val="a1"/> <w:pPr> <w:spacing w:before-autospacing="on" w:after-autospacing="on"/> <w:jc w:val="left"/> <w:outlineLvl w:val="1"/> </w:pPr> <w:rPr> <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="fareast"/> <w:b/> <w:kern w:val="0"/> <w:sz w:val="36"/> <w:sz-cs w:val="36"/> </w:rPr> </w:style> <w:style w:type="paragraph" w:styleId="3"> <w:name w:val="heading 3"/> <w:basedOn w:val="a1"/> <w:next w:val="a1"/> <w:pPr> <w:spacing w:before-autospacing="on" w:after-autospacing="on"/> <w:jc w:val="left"/> <w:outlineLvl w:val="2"/> </w:pPr> <w:rPr> <w:rFonts w:ascii="宋体" w:h-ansi="宋体" w:fareast="宋体" w:cs="Times New Roman" w:hint="fareast"/> <w:b/> <w:kern w:val="0"/> <w:sz w:val="27"/> <w:sz-cs w:val="27"/> </w:rPr> </w:style> <w:style w:type="character" w:styleId="a4" w:default="on"> <w:name w:val="Default Paragraph Font"/> </w:style> <w:style w:type="table" w:styleId="a5" w:default="on"> <w:name w:val="Normal Table"/> <w:tblPr> <w:tblCellMar> <w:top w:w="0" w:type="dxa"/> <w:left w:w="108" w:type="dxa"/> <w:bottom w:w="0" w:type="dxa"/> <w:right w:w="108" w:type="dxa"/> </w:tblCellMar> </w:tblPr> </w:style> <w:style w:type="paragraph" w:styleId="a6"> <w:name w:val="List Paragraph"/> <w:basedOn w:val="a1"/> <w:pPr> <w:ind w:first-line="420" w:first-line-chars="200"/> </w:pPr> </w:style> </w:styles> <w:bgPict> <w:background/> <v:background id="_x0000_s1025"> <v:fill on="f" focussize="0,0"/> </v:background> </w:bgPict> <w:docPr> <w:view w:val="print"/> <w:zoom w:percent="100"/> <w:characterSpacingControl w:val="CompressPunctuation"/> <w:documentProtection w:enforcement="off"/> <w:defaultTabStop w:val="420"/> <w:drawingGridVerticalSpacing w:val="156"/> <w:displayHorizontalDrawingGridEvery w:val="1"/> <w:displayVerticalDrawingGridEvery w:val="1"/> <w:compat> <w:adjustLineHeightInTable/> <w:doNotExpandShiftReturn/> <w:balanceSingleByteDoubleByteWidth/> <w:useFELayout/> <w:spaceForUL/> <w:breakWrappedTables/> <w:dontGrowAutofit/> <w:useFELayout/> </w:compat> </w:docPr> <w:body> <wx:sect> <#list folderList as fl> <w:p> <w:pPr> <w:pStyle w:val="2"/> <w:widowControl/> <w:listPr> <w:ilvl w:val="0"/> <w:ilfo w:val="1"/> </w:listPr> <w:rPr> <w:rFonts w:hint="default"/> </w:rPr> </w:pPr> <w:r> <w:t>${fl.folderName}</w:t> </w:r> </w:p> <#list fl.spiderIdxInfoList as sl> <w:p> <w:pPr> <w:pStyle w:val="2"/> <w:widowControl/> <w:listPr> <w:ilvl w:val="1"/> <w:ilfo w:val="1"/> </w:listPr> <w:rPr> <w:rFonts w:hint="default"/> <w:color w:val="0000FF"/> <w:sz w:val="28"/> <w:sz-cs w:val="28"/> </w:rPr> </w:pPr> <w:r> <w:rPr> <w:color w:val="0000FF"/> <w:sz w:val="28"/> <w:sz-cs w:val="28"/> </w:rPr> <w:t>${sl.idxName}</w:t> </w:r> </w:p> ${sl.include_path} </#list> </#list> <w:p> <w:pPr> <w:rPr> <w:rFonts w:hint="fareast"/> </w:rPr> </w:pPr> </w:p> <w:p> <w:pPr> <w:widowControl/> <w:rPr> <w:rFonts w:hint="fareast"/> </w:rPr> </w:pPr> </w:p> <w:sectPr> <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:line-pitch="312"/> </w:sectPr> </wx:sect> </w:body> </w:wordDocument>
5. 总结
freemarker生成文档的主要工作还是在ftl模板的编写,需要细心和调试。其次就是输入输出文件的路径,本地windows环境和服务器linux环境路径还是需要注意的。
最后注意一点,configuration.getTemplate(ftlName)中ftlName写个文件名就可,路径使用configuration.setDirectoryForTemplateLoading(new File(ftlurl))来定义。
有问题请留言,大家一起讨论。
相关文章推荐
- 利用FreeMarker实现网页到Word文档的生成
- 利用freemarker 在模板里面写入动态数据,动态表格,图片插入并生成word文档
- 利用freemarker 在模板里面写入动态数据,动态表格,图片插入并生成word文档
- C#:简单实现动态数据生成Word文档并保存
- 如何把数据库的内容写入到Word文档中?
- 沫沫金:使用Java模版引擎FreeMarker生成复杂的Word文档
- Java根据word模板生成word文档之后台解析和实现及部分代码(三)C
- ASP 把数据库内容生成Word文档保存到目录下
- C#编程实现动态生成Word文档
- C#:简单实现动态数据生成Word文档并保存
- (转)C#编程实现动态生成Word文档
- Java根据word模板生成word文档之后台解析和实现及部分代码(三)B
- 用C#实现生成PDF文档和将WORD转换为PDF
- 用C#实现动态生成Word文档,在Word文档中插入表格,并将读出的数据填入到表格中
- 用C#.NET实现生成PDF文档和将WORD转换为PDF
- 用C#实现生成PDF文档和将WORD转换为PDF
- 实现动态生成Word文档
- Java根据word模板生成word文档之后台解析和实现及部分代码(三)A
- 用C#.NET实现生成PDF文档和将WORD转换为PDF
- C#实现WORD文档的内容复制和替换