導出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