java導出word簡單實例(值,圖片和動態循環列表)

導出word有很多方法,我用的是freemarker的方式.

1.製作一個word模板,需要加入值的地方製作成表單域



2.將word另存爲xml文件,將<w:t>標籤裏的數據改成${},並對應屬性名


3.將xml文件改爲ftl文件放到src下的template文件夾下。

4.附代碼。

package 導出word;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import freemarker.template.Configuration;
import freemarker.template.Template;
import sun.misc.BASE64Encoder;

public class WordExportController {

	public static void main(String[] args) {
		WordExportController test = new WordExportController();
		test.createWord();
	}

	private Configuration configuration = null;

	public WordExportController() {
		configuration = new Configuration();
		configuration.setDefaultEncoding("UTF-8");
	}

	public void createWord() {
		Map<String, Object> dataMap = new HashMap<String, Object>();
		User user = new User();
		user.setId(1);
		user.setName("李偉");
		user.setNormalprice(25.0);
		user.setMemberprices(18.0);
		dataMap.put("id", user.getId());
		dataMap.put("name", user.getName());
		dataMap.put("normalprice", user.getNormalprice());
		dataMap.put("memberprices", user.getMemberprices());
		String image=getImageStr("E:/temp/7575198B15CC5EB88031CFEB4D0C4B60.jpg");
		dataMap.put("image", image);
    	List<Person> personList = new ArrayList<Person>();
        for(int i=0;i<10;i++){
        	Person u = new Person();
        	u.setPname("ZhangSan"+i);
        	u.setRealName("張三"+i);
        	u.setCompany("xx公司"+i);
        	u.setPhone("130xxxxxxxx"+i); 
        	personList.add(u);
        }
        dataMap.put("personList", personList);
		try {
			configuration.setClassForTemplateLoading(this.getClass(), "/template"); // FTL文件所存在的位置
			Template template = configuration.getTemplate("test.ftl");
			File outFile = new File("E:/temp/" + user.getName().trim().replaceAll("/", "") + ".doc");
			Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"));
			template.process(dataMap, out);
			out.close();

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private String getImageStr(String path) {
		String imgFile = path;
		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);
	}
}



需要的jar和工具鏈接:https://pan.baidu.com/s/1BoO8rrz6xzEbMSRAnQW_nw 密碼:nste

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章