<!--添加freeMarker--> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.20</version> </dependency>
下一步咱們要作的是先好咱們的word模板而後將模板轉換爲xml文件。在word模板中須要定義好咱們的佔位符哦,使用${string}的方式。「string」根據本身的愛好定義就行了。java
過程以下:程序員
word文檔:數據庫
而後將咱們的word文檔另存爲xml文檔。編程
將咱們的xml文檔的後綴改成ftl,而後用能夠打開ftl文件的軟件打開咱們的ftl文件。在這裏咱們有幾個須要注意的地方。編程語言
第一,定義的佔位符可能會被分開了。就像下面這樣:工具
咱們須要作的就是刪掉多餘的部分,圖中我定義的是${userName}.因此我就把多餘的刪掉,變成${userName}就能夠了。編碼
第二,咱們須要注意的就是在咱們的表格部分須要本身添加freeMarker標籤。在表格代碼間用自定的標籤括起來。定義的參數要和咱們在方法中定義的一致,不然沒法取到值。spa
表格開始:
code
結束:</list>orm
package czc.sup.system.model.six; import freemarker.template.Configuration; import freemarker.template.Template; import java.io.*; import java.util.Map; public class WordUtil { /** * 生成word文件 * @param dataMap word中須要展現的動態數據,用map集合來保存 * @param templateName word模板名稱,例如:test.ftl * @param filePath 文件生成的目標路徑,例如:D:/wordFile/ * @param fileName 生成的文件名稱,例如:test.doc */ @SuppressWarnings("unchecked") public static void createWord(Map dataMap,String templateName,String filePath,String fileName){ try { //建立配置實例 Configuration configuration = new Configuration(); //設置編碼 configuration.setDefaultEncoding("UTF-8"); //ftl模板文件 configuration.setClassForTemplateLoading(WordUtil.class,"/"); //獲取模板 Template template = configuration.getTemplate(templateName); //輸出文件 File outFile = new File(filePath+File.separator+fileName); //若是輸出目標文件夾不存在,則建立 if (!outFile.getParentFile().exists()){ outFile.getParentFile().mkdirs(); } //將模板和數據模型合併生成文件 Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile),"UTF-8")); //生成文件 template.process(dataMap, out); //關閉流 out.flush(); out.close(); } catch (Exception e) { e.printStackTrace(); } } }
public static void main(String[] args) { /** 用於組裝word頁面須要的數據 */ Map<String, Object> dataMap = new HashMap<String, Object>(); DataWord dataWord = new DataWord("model", "name", "designCode", "code", "met", "date", "temp", "humi", "hly"); List<Object> datas = new ArrayList<>(); for(int i=0;i<10;i++){ Data data = new Data("1","檢測名"+i, "norm", "result", "remark"); datas.add(data); } dataMap.put("product",dataWord); dataMap.put("datas",datas); String filePath = ""; if (IsWhatSystem.whatSystem()) { //文件路徑 filePath = "D:/doc_f/"; }else { filePath = "/doc_f/"; } //文件惟一名稱 String fileOnlyName = "生成Word文檔.doc"; /** 生成word 數據包裝,模板名,文件生成路徑,生成的文件名*/ WordUtil.createWord(dataMap, "quality.ftl", filePath, fileOnlyName); }
而後就在相應的目錄下導出word文檔了