以實現簡單的word導出:
然后將word另存為.xml文件,打開文件,找到title將其修改為${title},后面要替換的內容依次替換掉。然后將.xml文件后綴改為.ftl,導入.ftl模板文件到指定目錄。加載jar包freemarker.jar。
代碼如下:

1 import java.io.BufferedWriter; 2 import java.io.File; 3 import java.io.FileOutputStream; 4 import java.io.OutputStreamWriter; 5 import java.io.Writer; 6 import java.net.URLDecoder; 7 import java.util.HashMap; 8 import java.util.Map; 9 10 import freemarker.template.Configuration; 11 import freemarker.template.Template; 12 import freemarker.template.Version; 13 14 public class WordUtil { 15 16 public static void main(String[] args) { 17 // 替換的數據詞典 18 Map<String, Object> dataMap = new HashMap<String, Object>(); 19 dataMap.put("date", "2020年8月"); 20 dataMap.put("maxTemp", "非洲,南美洲"); 21 dataMap.put("minTemp", "非洲,南美洲sss"); 22 wordOutput(dataMap, "test.ftl", "D:/t.doc"); 23 } 24 25 public static void wordOutput(Map<String, Object> dataMap, String sourceName, String targetPath) { 26 try { 27 // Configuration 用於讀取ftl文件 28 Configuration configuration = new Configuration(new Version("2.3.28")); 29 configuration.setDefaultEncoding("utf-8"); 30 31 /** 32 * 以下是兩種指定ftl文件所在目錄路徑的方式,注意這兩種方式都是 指定ftl文件所在目錄的路徑,而不是ftl文件的路徑 33 */ 34 // 指定路徑的第一種方式(根據當前類的相對路徑指定) 35 // configuration.setClassForTemplateLoading(WordUtil.class, ""); 36 37 // 指定路徑的第二種方式,獲取項目中resources目錄下的文件 38 String resourcesPath = WordUtil.class.getResource("/").getPath(); 39 // 處理路徑中的中文亂碼問題 40 String path = URLDecoder.decode(resourcesPath, "utf-8"); 41 System.out.println(path); 42 configuration.setDirectoryForTemplateLoading(new File(path)); 43 44 // 輸出文檔路徑及名稱 45 File outFile = new File(targetPath); 46 47 // 以utf-8的編碼讀取ftl文件 48 Template template = configuration.getTemplate(sourceName, "utf-8"); 49 Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240); 50 template.process(dataMap, out); 51 out.close(); 52 } catch (Exception e) { 53 e.printStackTrace(); 54 } 55 } 56 }
模板存放位置:文檔模板存放在項目的resource下,方便打包和整潔
這個地方嘗試了很久,才獲取到項目的resource目錄,當然也可以直接指定本地磁盤的目錄
// 指定路徑的第二種方式,獲取項目中resources目錄下的文件 String resourcesPath = WordUtil.class.getResource("/").getPath(); // 處理路徑中的中文亂碼問題 String path = URLDecoder.decode(resourcesPath, "utf-8"); System.out.println(path); configuration.setDirectoryForTemplateLoading(new File(path));
文檔模板存放截圖: