Java 動態生成復雜 Word
閱讀目錄
1. 制作 Word 模版,將你需要動態生成的字段用${}替換。
2. 將 Word文檔保存為 xml 。
3. 引入項目。
項目中需要用 java 程序生成doc 文件,百度一番,發現FreeMarker 的評價比較高。
FreeMarker是一個用Java語言編寫的模板引擎,它基於模板來生成文本輸出,至於想詳細了解 FreeMarker 的請自行百度。
1. 制作 Word 模版,將你需要動態生成的字段用${}替換。如:${name}、${age}

2. 將 Word文檔保存為 xml。

3. 引入項目。
將 xml 文件更改后綴名 為 .ftl, 然后引用到你的項目中。
需要注意的問題:
a. word 版本不能低於 2003 ,因為 2003 才開始支持 xml。
實現的代碼如下:
package word; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.util.HashMap; import java.util.Map; import freemarker.template.Configuration; import freemarker.template.Template; public class WordTest { private Configuration configuration = null; public WordTest() { configuration = new Configuration(); configuration.setDefaultEncoding("UTF-8"); } public void createWord() { Map<String, Object> dataMap = new HashMap<String, Object>(); try { dataMap.put("name", "guoxp"); dataMap.put("sex", "男"); configuration.setClassForTemplateLoading(this.getClass(), "/template"); // FTL文件所存在的位置 Template template = configuration.getTemplate("fz.ftl"); File outFile = new File("D:/temp2/wordTest2.doc");// D:/temp2這個路徑下的temp2文件夾是手動創建的 Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8")); template.process(dataMap, out); out.close(); } catch (Exception e) { e.printStackTrace(); } } public static void main(String[] args) { WordTest test = new WordTest(); test.createWord(); } }
目錄結構以及效果圖如下:


備注:
a. template.process(),接受一個 Map 和 輸入流做為入參,Map 既是你需要動態生成到 doc 里面的數據,字段名必須與你在 .ftl 里面定義的一致;
b. 如果你想利用這段代碼,需要有一個 .ftl 文件,並且在你的項目 src 目錄下面新建 template 目錄;
c.輔助文件"FreeMarker.jar 、實例項目的.ftl "。
