poi使用模板导出word带图片

java 专栏收录该内容
2 篇文章 0 订阅

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文件格式,如下图:


4.然后修改.xml文件的后缀名为.ftl,也就是freemarker格式。


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


  • 0
    点赞
  • 4
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

duofx

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值