java导出word简单实例(值,图片和动态循环列表)

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

1.制作一个word模板,需要加入值的地方制作成表单域



2.将word另存为xml文件,将标签里的数据改成${},并对应属性名


3.将xml文件改为ftl文件放到src下的template文件夹下。

java导出word简单实例(值,图片和动态循环列表)_第1张图片

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 dataMap = new HashMap();
		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 personList = new ArrayList();
        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

你可能感兴趣的:(java导出word简单实例(值,图片和动态循环列表))