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);
}
}
}