用 Freemarker 生成 word 文档
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                用 Freemarker 生成 word 文档
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.                        
                                
                            
                            
                            
 
 
  
 
3.?????? 
用代碼生成: 
  ? 
  
 
 
 
 
  
 
 
回到頂部
 
                            
                        
                        
                        閱讀目錄
- 添加圖片
- 自定義載入模板
1.?????? 用word寫一個需要導出的word模板,然后存為xml格式。
2.?????? 將xml中需要動態(tài)修改內容的地方,換成freemarker的標識符,例如:
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <w:p wsp:rsidR="00D02906" wsp:rsidRDefault="00FA4C58" wsp:rsidP="00FA4C58"> ?????????<w:pPr> ?????????????<w:jc w:val="center"/> ?????????????<w:rPr> ?????????????????<w:rFonts w:hint="fareast"/> ?????????????</w:rPr> ?????????</w:pPr> ?????????<w:r> ?????????????<w:t>${year}</w:t> ?????????</w:r> ?????????<w:r> ?????????????<w:rPr> ?????????????????<wx:font wx:val="宋體"/> ?????????????</w:rPr> ?????????????<w:t>年度工作報告</w:t> ?????????</w:r><span style="line-height:22px;font-family:'Courier New';" class="Apple-style-span"><span style="color:#0000ff;"></</span><span style="color:#800000;">w:p</span><span style="color:#0000ff;">></span></span> | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | import freemarker.template.Configuration; ?import freemarker.template.Template; ?? ?import java.io.*; ?import java.util.HashMap; ?import java.util.Map; ?? ?/** ??* @Class name:??? CreateDoc ??* <p/> ??* Short description on the purpose of the program. ??* @author : youfeng ??* @modified : 8/29/11 ??*/ ?public class CreateDoc { ?? ?????private Configuration configuration = null; ?? ?????public CreateDoc() { ?????????configuration = new Configuration(); ?????????configuration.setDefaultEncoding("utf-8"); ?????} ?? ?????public void create() throws Exception { ?????????Map<String, Object> map = new HashMap<String, Object>(); ?????????map.put("date", "2011"); ?????????map.put("modifyDate", "2011/8/29"); ?????????map.put("modifyUser", "Zhu You Feng"); ?? ?????????configuration.setClassForTemplateLoading(this.getClass(), "/docTemplate/"); ?????????Template t = configuration.getTemplate("doc1.ftl"); ?????????File outFile = new File("D:/outFile.doc"); ?????????Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile))); ?????????t.process(map, out); ?????} ?? ?????public static void main(String[] args) throws Exception { ?????????new CreateDoc().create(); ?? ?????} ?} | 
添加圖片
如果你需要在word中添加圖片,那你就在第一步制作模板時,加入一張圖片占位,然后打開xml文檔,可以看到如下的一片base64編碼后的代碼:
1?<w:binData?w:name="wordml://03000001.png"?xml:space="preserve">iVBORw0…(很省略很省略)…CC</w:binData>只要將base64的代碼替換成例如:${image},如下:
1?<w:binData?w:name="wordml://03000001.png"?xml:space="preserve">${image}</w:binData>這里要注意“>${image}<”這尖括號中間不能加任何其他的諸如空格,tab,換行等符號。
然后用代碼生成:
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | import freemarker.template.Configuration; ?import freemarker.template.Template; ?import sun.misc.BASE64Encoder; ?? ?import java.io.*; ?import java.util.HashMap; ?import java.util.Map; ?? ?/** ??* @Class name:??? CreateDoc ??* @author: youfeng ??* @modified: 8/29/11 ??*/ ?public class CreateDocWithImage { ?? ?????private Configuration configuration = null; ?? ?????public CreateDocWithImage() { ?????????configuration = new Configuration(); ?????????configuration.setDefaultEncoding("utf-8"); ?????} ?? ?????public void create() throws Exception { ?????????Map<String, Object> map = new HashMap<String, Object>(); ?????????map.put("year", "2011"); ?????????map.put("person", "Zhu You Feng"); ?????????map.put("image", getImageStr()); ?? ?????????configuration.setClassForTemplateLoading(this.getClass(), "/docTemplate/"); ?????????Template t = configuration.getTemplate("doc2.ftl"); ?????????File outFile = new File("D:/outFile.doc"); ?????????Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile))); ?????????t.process(map, out); ?????} ?? ?????private String getImageStr() { ?????????String imgFile = "d:/test.jpg"; ?????????InputStream in = null; ?????????byte[] data = null; ?????????try { ?????????????in = new FileInputStream(imgFile); ?????????????data = new byte[in.available()]; ?????????????in.read(data); ?????????????in.close(); ?????????} catch (IOException e) { ?????????????e.printStackTrace(); ?????????} ?????????BASE64Encoder encoder = new BASE64Encoder(); ?????????return encoder.encode(data); ?????} ?? ?????public static void main(String[] args) throws Exception { ?????????new CreateDocWithImage().create(); ?? ?????} ?} | 
自定義載入模板
?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | import freemarker.cache.TemplateLoader; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; import sun.misc.BASE64Encoder; import java.io.*; import java.util.HashMap; import java.util.Map; public class DocumentGenerator { ????private Configuration configuration = null; ????public static void main(String[] args) throws Exception { ????????Map<String, Object> map = new HashMap<String, Object>(); ????????map.put("date", "2012"); ????????map.put("modifyDate", "2011/8/29"); ????????map.put("modifyUser", "Zhu You Feng"); ????????new DocumentGenerator().createDoc("", "D:/outFile2.doc", map); ????} ????public DocumentGenerator() { ????????configuration = new Configuration(); ????????configuration.setDefaultEncoding("utf-8"); ????????configuration.setClassicCompatible(true); ????????configuration.setTemplateLoader(new ByteArrayStreamTemplateLoader(new ByteArrayInputStream( ????????????????????????getBytesFromFile(new File("D:/ownProject/freemarkerToDoc/src/main/resources/docTemplate/doc1.ftl")) ????????????????))); ????} ????/** ?????* @param fileName ?????* @param outFileName ?????* @param dataMap ?????*/ ????public void createDoc(String fileName, String outFileName, Map dataMap) { ????????Template t = null; ????????try { ????????????t = configuration.getTemplate(fileName); ????????} catch (IOException e) { ????????????e.printStackTrace(); ????????} ????????File outFile = new File(outFileName); ????????Writer out = null; ????????try { ????????????out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile))); ????????} catch (FileNotFoundException e1) { ????????????e1.printStackTrace(); ????????} ????????try { ????????????t.process(dataMap, out); ????????} catch (TemplateException e) { ????????????e.printStackTrace(); ????????} catch (IOException e) { ????????????e.printStackTrace(); ????????} ????} ????public byte[] getBytesFromFile(File f) { ????????if (f == null) { ????????????return null; ????????} ????????try { ????????????FileInputStream stream = new FileInputStream(f); ????????????ByteArrayOutputStream out = new ByteArrayOutputStream(1000); ????????????byte[] b = new byte[1000]; ????????????int n; ????????????while ((n = stream.read(b)) != -1) ????????????????out.write(b, 0, n); ????????????stream.close(); ????????????out.close(); ????????????return out.toByteArray(); ????????} catch (IOException e) { ????????????e.printStackTrace(); ????????} ????????return null; ????} } class ByteArrayStreamTemplateLoader implements TemplateLoader { ????InputStream in = null; ????public ByteArrayStreamTemplateLoader(ByteArrayInputStream inputStream) { ????????in = inputStream; ????} ????public Object findTemplateSource(String name) throws IOException { ????????System.out.println("findTemplateSource"); ????????return in; ????} ????public long getLastModified(Object templateSource) { ????????return 0; ????} ????public Reader getReader(Object templateSource, String encoding) throws IOException { ????????System.out.println("getReader"); ????????return new InputStreamReader(in); ????} ????public void closeTemplateSource(Object templateSource) throws IOException { ????????System.out.println("closeTemplateSource"); ????????if (in != null) { ????????????in.close(); ????????} ????} } | 
總結
以上是生活随笔為你收集整理的用 Freemarker 生成 word 文档的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 悟空理财回款中什么意思
- 下一篇: 信用卡销户5年征信还没消除 注销时不能
