1.下面是我做的加载模板导出带图片的word的导出方式,使用之前请映入freemarker的jar包,可以从百度下载即可。
2.首先准备到你要导出的word模板,在要填充的模板中填入el表达式,如下图所示。
XXXX公司招聘高校毕业生应聘登记表
姓 名 |
${name} |
性 别 |
${sex} |
出生年月 |
${birthday} |
| ||||||
联系方式 |
${mobile} |
电子邮箱 |
${email} |
籍贯 |
${nativeplace} | |||||||
民族 |
${national} |
户籍所在地 |
${permanreside} |
政治面貌 |
${polity} | |||||||
参加党派时间 |
${joinpolitydate} |
参加工作时间 |
${joinworkdate} |
健康状况 |
${health} | |||||||
计算机水平 |
${computerlevel} |
接受其他工作地点 |
${isacceptreplace} |
可到岗日期 |
${candutydate} | |||||||
职业资格 |
${prof} |
期望工作类型 |
${expect_worktype} |
期望工作地点 |
${expect_workaddr} | |||||||
身份证号 |
${id} |
掌握何种外语及熟练程度 |
${froeignlang} | |||||||||
应聘学历 |
${edu} |
学 位 |
${pk_degree} | |||||||||
熟悉专业(特长) |
${personal} | |||||||||||
自我评价 |
${evaluation} | |||||||||||
学习经历 |
起止时间 |
学历和学位 |
学校名称 |
所学专业或 研究方向 |
是否 全日制 | |||||||
${begindate} |
${education} |
${school} |
${major} |
${studymode} | ||||||||
实践或工作经历 |
起止时间 |
单位 |
职务(岗位) |
具体工作要点 |
证明人 | |||||||
${begindate} |
${workcorp} |
${workjob} |
${workduty} |
${certifier} | ||||||||
获得证书情况 |
证书名称 |
获得时间 |
发证单位 |
级别、成绩 |
证书编号 | |||||||
${vencourmeas} |
${vencourdate} |
${vencourunit} |
${encourrank} |
${vencourtype} | ||||||||
学术成果情况 |
论文(成果) 名称 |
核心期刊或收录机构名称 |
年度及期次 |
作者排序 |
论文索引号 | |||||||
${glbdef1} |
${glbdef2} |
${glbdef3} |
${glbdef4} |
${glbdef5} | ||||||||
获奖情况(奖学金及评优) |
证书名称 |
获得时间 |
发证单位 |
证书编号 |
证书类型 | |||||||
${glbdef1} |
${glbdef2} |
${glbdef3} |
${glbdef4} |
${glbdef5} | ||||||||
主要家庭成员或社会关系 |
称谓 |
姓名 |
出生年月 |
工作单位及职务 (岗位、职称) | ||||||||
${mem_relation} |
${mem_name} |
${mem_birthday} |
${mem_corp} | |||||||||
其他情况说明 |
| |||||||||||
诚信 承诺 |
本人承诺,以上信息均与事实相符,若有虚假,即自愿取消应聘资格。
承诺人: |
注意:如果有图片,要找一张图片先在word中填充,顺便调整好你的图片的样式。这样导出的word的也会按照你设定的样式进行导出word.
3.打开word,选择另存为,保存为xml文件格式,如下图:
5.然后使用文本编辑器打开。最好的如notepad++,UE等。
6.框中的文件保留,横线划掉的删除。注意:图片是如下图格式
将黑色字符替换成${自定义名称}即可。
7.用<#list studylist as stydy></#list>标签将集合循环的<w:tr>包含住,注:studylist 是你返回的map集合的名称,与程序中保持一致。study为变量名,自己自定义命名即可。 格式如图:
8.至此,模板已做好,之后映入我这个类,然后运行即可。
package com.hr.fs.web.controller;
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 nc.bs.framework.common.RuntimeEnv;
import sun.misc.BASE64Encoder;
import com.hr.fs.web.model.FS_RmCorpUserVO;
import com.hr.fs.web.model.base.StaticConfig;
import com.jfinal.core.Controller;
import freemarker.cache.FileTemplateLoader;
import freemarker.cache.TemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class FExportTempleteController extends Controller{
private Configuration configuration = null;
//模板的位置
private String wordtemplate = RuntimeEnv.getInstance().getNCHome()+"\\hotwebs\\fshr\\resumetemplet";
//下载的位置及文件名
private String fileName = RuntimeEnv.getInstance().getNCHome()+"\\hotwebs\\fshr\\file\\个人简历模板.doc";
public FExportTempleteController() {
configuration = new Configuration();
configuration.setDefaultEncoding("utf-8");
}
public void exportWord(){
//获取用户
FS_RmCorpUserVO user = getSessionAttr("user");
String usertype = user.getUsertype();
//新建一个map用来存储
Map<String, Object> dataMap = new HashMap<String, Object>();
//模板的名字
String fileTemplateName ;
if(usertype.equals(StaticConfig.SCHOOLRECRUITSTATUS)){
fileTemplateName = "schoolexport.ftl";
getSchoolData(dataMap);
}else if(usertype.equals(StaticConfig.SOCIETYRECRUITSTATUS)){
fileTemplateName = "societyexport.ftl";
getSchoolData(dataMap);
}else{
fileTemplateName = "innerexport.ftl";
getSchoolData(dataMap);
}
//设置模本装置方法和路径,FreeMarker支持多种模板装载方法。
//这里我们的模板是放在resumetemplet路径下面 使用FileTemplateLoader
TemplateLoader templateLoader=null;
Template t=null;
Writer out = null;
try{
templateLoader=new FileTemplateLoader(new File(wordtemplate));
configuration.setTemplateLoader(templateLoader);
t=configuration.getTemplate(fileTemplateName,"UTF-8");
//输出文档路径及名称
File outFile = new File(fileName);
out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"));
//装载数据
t.process(dataMap, out);
renderFile(outFile);
out.close();
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 生成数据
* @param dataMap
*/
private void getSchoolData(Map map){
try {
/**
* 设置基本信息
*/
map.put("name", "");
map.put("sex", "");
map.put("birthday", "");
map.put("national", "");
map.put("email", "");
map.put("nativeplace", "");
map.put("mobile", "");
map.put("permanreside", "");
map.put("polity", "");
map.put("joinpolitydate", "");
map.put("joinworkdate", "");
map.put("health", "");
map.put("computerlevel", "");
map.put("isacceptreplace", "");
map.put("candutydate", "");
map.put("prof", "");
map.put("expect_worktype", "");
map.put("expect_workaddr", "");
map.put("id", "");
map.put("froeignlang", "");
map.put("edu", "");
map.put("pk_degree", "");
map.put("personal", "");
map.put("evaluation", "");
map.put("img", getImageStr(""));
/**
* 学习经历
*/
List<Map<String, Object>> studyList = new ArrayList<Map<String, Object>>();
Map<String, Object> studymap;
studymap = new HashMap<String, Object>();
studymap.put("begindate", "");
studymap.put("education", "");
studymap.put("school", "");
studymap.put("major", "");
studymap.put("studymode", "");
studyList.add(studymap);
map.put("studylist", studyList);
/**
* 获取工作信息
*/
List<Map<String, Object>> workList = new ArrayList<Map<String, Object>>();
Map<String, Object> workmap;
workmap = new HashMap<String, Object>();
workmap.put("begindate", "");
workmap.put("workcorp", "");
workmap.put("workjob", "");
workmap.put("workduty", "");
workmap.put("certifier", "");
workList.add(workmap);
map.put("worklist", workList);
/**
* 获取证书情况
*/
List<Map<String, Object>> encList = new ArrayList<Map<String, Object>>();
Map<String, Object> encmap;
encmap = new HashMap<String, Object>();
encmap.put("vencourmeas", "");
encmap.put("vencourdate", "");
encmap.put("vencourunit", "");
encmap.put("encourrank", "");
encmap.put("vencourtype", "");
encList.add(encmap);
map.put("certifierlist", encList);
/**
* 获取学术成果
*/
List<Map<String, Object>> scienceList = new ArrayList<Map<String, Object>>();
Map<String, Object> sciencemap;
sciencemap = new HashMap<String, Object>();
sciencemap.put("glbdef1", "");
sciencemap.put("glbdef2", "");
sciencemap.put("glbdef3", "");
sciencemap.put("glbdef4", "");
sciencemap.put("glbdef5", "");
scienceList.add(sciencemap);
map.put("sciencelist", scienceList);
/**
* 获取获奖情况
*/
List<Map<String, Object>> prizeList = new ArrayList<Map<String, Object>>();
Map<String, Object> prizemap;
prizemap = new HashMap<String, Object>();
prizemap.put("glbdef1", "");
prizemap.put("glbdef2", "");
prizemap.put("glbdef3", "");
prizemap.put("glbdef4", "");
prizemap.put("glbdef5", "");
prizeList.add(prizemap);
map.put("prizelist", prizeList);
/**
* 获取家庭情况信息
*/
List<Map<String, Object>> homeList = new ArrayList<Map<String, Object>>();
Map<String, Object> homemap;
homemap = new HashMap<String, Object>();
homemap.put("mem_relation", "");
homemap.put("mem_name", "");
homemap.put("mem_birthday", "");
homemap.put("mem_corp", "");
homeList.add(homemap);
map.put("homelist", homeList);
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 将图片转换为base64存储
*/
private String getImageStr(String pk) {
if(pk.equals("") && pk.length() == 0){
pk="default_headpic.png";
}
String imgfilepath = RuntimeEnv.getInstance().getNCHome()+"\\hotwebs\\fshr\\image\\";
String imgFile = imgfilepath+pk;
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();
if(data==null){
return "";
}else{
return encoder.encode(data);
}
}
}