Java 動態生成復雜 Word


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 "。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM