package net.aykj.util;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.Version;
import net.aykj.pojo.Educational;
import net.aykj.pojo.PeopleInfo;
import net.aykj.pojo.WorkExperience;
import sun.misc.BASE64Encoder;
/**
* 通過選擇簡歷模板生成簡歷
* @author Add by Bingyong.Wang
*
*/
public class TestCreatePeoleInfoByResumeTemplate {
public static void main(String[] args) throws ParseException {
// String str = "/uploadDir/ftl/20200416/1587017088881.ftl";
// System.out.println(str.substring(0,str.lastIndexOf("/")));
// System.err.println("=========================");
// System.out.println(str.substring(str.lastIndexOf("/") + 1));
autoCreatePeopleInfo();
}
/**
* 通過調用簡歷模板自動生成不帶圖的簡歷和帶圖的簡歷
*
* 正式生成簡歷時:
* 1 會員簡歷信息動態獲取.
* 2 會員動態選取簡歷模板
* 3 生成的簡歷如何存放?存放在哪裏?(這裏生成的放在附件表裏,通過會員ID獲取.)
* @throws ParseException
*/
public static void autoCreatePeopleInfo() throws ParseException{
PeopleInfo peopleInfo = new PeopleInfo();
// 會員
peopleInfo.setMemberId(1);
// 簡歷模板
peopleInfo.setResumeTemplateId(1);
// 姓名
peopleInfo.setName("王容之");
// 性別
//peopleInfo.setSex(1);
peopleInfo.setGender("男");
// 簡歷右側頭像
// 婚姻狀況
peopleInfo.setMaritalStatus("未婚");;
// 電話
peopleInfo.setTel("15812090956");
// 郵箱
peopleInfo.setEmail("[email protected]");
// 工作年限
peopleInfo.setWorkingYears(3);
// 技能名稱
peopleInfo.setSpecialSkill("Java程序開發,前端開發,網頁設計,大數據分析".replace(",", "<w:br/>"));
// 個人優勢
peopleInfo.setPersonalAdvantage("兵臨城下,永不言敗");
// 求職意向
peopleInfo.setCareerObjective("軟件開發工程師");
// 意向城市
peopleInfo.setIntentionCity("昆明");
// 期望薪資
peopleInfo.setPay("10K");
// 目前工作狀況(在職、離職)
peopleInfo.setCurrentWorkingStatus("在職,一個月內到崗");
// 教育背景 start
peopleInfo.setSchool("清華大學");
peopleInfo.setMajor("信息管理與信息系統");
peopleInfo.setEducationStartTime(new SimpleDateFormat("yyyy-MM-dd").parse("2012-08-31"));
peopleInfo.setEducationEndTime(new SimpleDateFormat("yyyy-MM-dd").parse("2016-06-25"));
peopleInfo.setEducationExperience("GPA:X.X / 4.0(專業前X%) 獲得學校一級獎學金");
// 教育背景 end
/** Update 教育背景 start*/
Educational educational = new Educational();
educational.setSchool("羅平一中");
educational.setMajor("理科");
educational.setEducation("高中");
educational.setEducationExperience("好學校");
educational.setEducationStartTime(new SimpleDateFormat("yyyy-MM-dd").parse("2009-08-31"));
educational.setEducationEndTime(new SimpleDateFormat("yyyy-MM-dd").parse("2012-06-25"));
Educational educational2 = new Educational();
educational2.setSchool("武科大");
educational2.setMajor("信息管理與信息系統");
educational2.setEducation("本科");
educational2.setEducationExperience("學習認真負責");
educational2.setEducationStartTime(new SimpleDateFormat("yyyy-MM-dd").parse("2012-08-31"));
educational2.setEducationEndTime(new SimpleDateFormat("yyyy-MM-dd").parse("2016-06-25"));
/** Update 教育背景 end*/
// 工作經驗 start
peopleInfo.setCompany("奧遠科技");
peopleInfo.setHistoryPosts("java開發工程師");
peopleInfo.setStartTime(new SimpleDateFormat("yyyy-MM-dd").parse("2018-05-21"));
peopleInfo.setEndTime(new SimpleDateFormat("yyyy-MM-dd").parse("2020-05-31"));
peopleInfo.setWorkDescription("在職期間任職CMS事業部程序開發職責,主要負責各類個性網站和系統的程序開發,比如醫科大論文系統等,從數據庫設計到最終的調試,都由我負責。");
// 工作經驗 end
/** Update 工作經歷 start */
WorkExperience workExperience = new WorkExperience();
workExperience.setCompany("一心堂");
workExperience.setHistoryPosts("java軟件開發工程師");
workExperience.setWorkDescription("工作認真,克勤克儉");
workExperience.setStartTime(new SimpleDateFormat("yyyy-MM-dd").parse("2016-09-20"));
workExperience.setEndTime(new SimpleDateFormat("yyyy-MM-dd").parse("2018-03-25"));
WorkExperience workExperience2 = new WorkExperience();
workExperience2.setCompany("奧遠科技");
workExperience2.setHistoryPosts("軟件開發工程師");
workExperience2.setWorkDescription("工作認真");
workExperience2.setStartTime(new SimpleDateFormat("yyyy-MM-dd").parse("2018-05-10"));
workExperience2.setEndTime(new SimpleDateFormat("yyyy-MM-dd").parse("2020-06-05"));
/** Update 工作經歷 end */
// 榮譽獎項
peopleInfo.setAwards("計算機四級證書,網絡工程師資格證書等".replace(",", "<w:br/>"));
// 籍貫
peopleInfo.setHometown("雲南曲靖");
// 民族
peopleInfo.setNation("漢");
// 政治面貌
peopleInfo.setPoliticalStatus("團員");
// 學歷
peopleInfo.setEducation("本科");
// 學制
peopleInfo.setAcademicSystem("四年");
// 專業
peopleInfo.setMajor("信息管理與信息系統");
// 婚姻狀況
peopleInfo.setMaritalStatus("未婚");
// 身高
peopleInfo.setHeight("175cm");
// 身體狀況
peopleInfo.setPhysicalConditions("健康");
// 畢業院校
peopleInfo.setSchool("武漢科大");
// 聯繫地址
peopleInfo.setAddress("雲南省昆明市官渡區織布營");
// 郵編
peopleInfo.setPostCode("650200");
// 曾任職務
peopleInfo.setPersonalPosition("無");
// 計算機
peopleInfo.setComputer("無");
// 語言能力
peopleInfo.setLanguageSkills("無");
// 獲獎情況
//peopleInfo.setAwards("都是讀書時期獲的");
// 工作經歷
peopleInfo.setWorkLife("2016年9月-2018年3月,在雲南鴻翔一心堂藥業集團股份有限公司電商事業開發部,任職程序員,"
+ "2018年5月-至今,在昆明奧遠科技有限公司任職java程序員.");
// 興趣特長
peopleInfo.setHobby("跑步 籃球");
// 自我評價
peopleInfo.setContent("性格開朗,爲人正直");
Map<String,Object> dataMap = new HashMap<String, Object>();
try {
// 姓名
dataMap.put("name", peopleInfo.getName());
//日期
//dataMap.put("date", new SimpleDateFormat("yyyy年MM月dd日").format(new SimpleDateFormat("yyyy-MM-dd").parse("2018-09-19")));
// 性別
dataMap.put("gender", peopleInfo.getGender());
// 簡歷右側頭像
dataMap.put("imgUrl", getImageStr());
// 婚姻狀況
dataMap.put("maritalStatus", peopleInfo.getMaritalStatus());
// 電話
dataMap.put("tel", peopleInfo.getTel());
// 郵箱
dataMap.put("email", peopleInfo.getEmail());
// 工作年限
dataMap.put("workingYears", peopleInfo.getWorkingYears());
// 技能名稱
dataMap.put("specialSkill", peopleInfo.getSpecialSkill());
// 個人優勢
dataMap.put("personalAdvantage", peopleInfo.getPersonalAdvantage());
// 求職職位
dataMap.put("careerObjective", peopleInfo.getCareerObjective());
// 意向城市
dataMap.put("intentionCity", peopleInfo.getIntentionCity());
// 期望薪資
dataMap.put("pay", peopleInfo.getPay());
// 目前工作狀況(入職時間)
dataMap.put("currentWorkingStatus", peopleInfo.getCurrentWorkingStatus());
// 教育背景 start
dataMap.put("school", peopleInfo.getSchool());
dataMap.put("major", peopleInfo.getMajor());
dataMap.put("educationStartTime", new SimpleDateFormat("yyyy-MM").format(peopleInfo.getEducationStartTime()));
dataMap.put("educationEndTime", new SimpleDateFormat("yyyy-MM").format(peopleInfo.getEducationEndTime()));
dataMap.put("educationExperience", peopleInfo.getEducationExperience());
// 教育背景 end
/** update 教育背景 start*/
// 獲取當前簡歷下的教育經歷信息
List<Map<String, Object>> eduList = new ArrayList<>();
Map<String, Object> map = new HashMap<>();
map.put("school", educational.getSchool());
map.put("major", educational.getMajor());
map.put("educationExperience", educational.getEducationExperience());
map.put("educationStartTime", new SimpleDateFormat("yyyy-MM").format(educational.getEducationStartTime()));
map.put("educationEndTime", new SimpleDateFormat("yyyy-MM").format(educational.getEducationEndTime()));
map.put("educational", educational);
Map<String, Object> map2 = new HashMap<>();
map2.put("school", educational2.getSchool());
map2.put("major", educational2.getMajor());
map2.put("educationExperience", educational2.getEducationExperience());
map2.put("educationStartTime", new SimpleDateFormat("yyyy-MM").format(educational2.getEducationStartTime()));
map2.put("educationEndTime", new SimpleDateFormat("yyyy-MM").format(educational2.getEducationEndTime()));
map2.put("educational2", educational2);
//eduList.add(map);
eduList.add(map2);
dataMap.put("eduList", eduList);
/** update 教育背景 end*/
// 工作經驗 start
dataMap.put("company", peopleInfo.getCompany());
dataMap.put("historyPosts", peopleInfo.getHistoryPosts());
/*dataMap.put("startTime", new SimpleDateFormat("yyyy-MM").format(peopleInfo.getStartTime()));
dataMap.put("endTime", new SimpleDateFormat("yyyy-MM").format(peopleInfo.getEndTime()));*/
dataMap.put("workDescription", peopleInfo.getWorkDescription());
// 工作經驗 end
/** Update 工作經驗 start */
List<Map<String, Object>> workList = new ArrayList<>();
Map<String, Object> workMap = new HashMap<>();
workMap.put("company", workExperience.getCompany());
workMap.put("historyPosts", workExperience.getHistoryPosts());
workMap.put("workDescription", workExperience.getWorkDescription());
workMap.put("startTime", new SimpleDateFormat("yyyy-MM").format(workExperience.getStartTime()));
workMap.put("endTime", new SimpleDateFormat("yyyy-MM").format(workExperience.getEndTime()));
workMap.put("workExperience", workExperience);
Map<String, Object> workMap2 = new HashMap<>();
workMap2.put("company", workExperience2.getCompany());
workMap2.put("historyPosts", workExperience2.getHistoryPosts());
workMap2.put("workDescription", workExperience2.getWorkDescription());
workMap2.put("startTime", new SimpleDateFormat("yyyy-MM").format(workExperience2.getStartTime()));
workMap2.put("endTime", new SimpleDateFormat("yyyy-MM").format(workExperience2.getEndTime()));
workMap2.put("workExperience2", workExperience2);
//workList.add(workMap);
//workList.add(workMap2);
dataMap.put("workList", workList);
/** Update 工作經驗 end */
// 榮譽獎項
dataMap.put("awards", peopleInfo.getAwards());
// // 出生年月
// dataMap.put("birthday", peopleInfo.getBirthday());
// // 籍貫
// dataMap.put("hometown", peopleInfo.getHometown());
// // 民族
// dataMap.put("nation", peopleInfo.getNation());
// // 政治面貌
// dataMap.put("politicalStatus", peopleInfo.getPoliticalStatus());
// // 學歷
// dataMap.put("education", peopleInfo.getEducation());
// // 學制
// dataMap.put("academicSystem", peopleInfo.getAcademicSystem());
// // 專業
// dataMap.put("major", peopleInfo.getMajor());
// // 身高
// dataMap.put("height", peopleInfo.getHeight());
// // 身體狀況
// dataMap.put("physicalConditions", peopleInfo.getPhysicalConditions());
// // 畢業院校
// dataMap.put("school", peopleInfo.getSchool());
//
// // 聯繫地址
// dataMap.put("address", peopleInfo.getAddress());
// // 郵編
// dataMap.put("postCode", peopleInfo.getPostCode());
//
// // 曾任職務
// dataMap.put("personalPosition", peopleInfo.getPersonalPosition());
// // 求職意向
// dataMap.put("careerObjective", peopleInfo.getCareerObjective());
// // 計算機
// dataMap.put("computer", peopleInfo.getComputer());
// // 語言能力
// dataMap.put("languageSkills", peopleInfo.getLanguageSkills());
// // 獲獎情況
// dataMap.put("awards", peopleInfo.getAwards());
// // 工作經歷
// dataMap.put("workLife", peopleInfo.getWorkLife());
// // 興趣特長
// dataMap.put("hobby", peopleInfo.getHobby());
// // 自我評價
// dataMap.put("content", peopleInfo.getContent());
//Configuration 用於讀取ftl文件
Configuration configuration = new Configuration(new Version("2.3.0"));
configuration.setDefaultEncoding("utf-8");
/**
* 以下是兩種指定ftl文件所在目錄路徑的方式,注意這兩種方式都是
* 指定ftl文件所在目錄的路徑,而不是ftl文件的路徑
*/
//指定路徑的第一種方式(根據某個類的相對路徑指定)
// configuration.setClassForTemplateLoading(this.getClass(), "");
//指定路徑的第二種方式,我的路徑是C:/a.ftl
configuration.setDirectoryForTemplateLoading(new File("d:/"));
//輸出文檔路徑及名稱 (不帶圖)
//File outFile = new File("D:/簡潔不帶圖簡歷.doc");
//輸出文檔路徑及名稱(帶圖)
File outFile = new File("E:/時尚帶圖簡歷.doc");
//以utf-8的編碼讀取ftl文件
//Template template = configuration.getTemplate("簡潔.ftl", "utf-8");
Template template = configuration.getTemplate("時尚(帶圖).ftl", "utf-8");
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240);
template.process(dataMap, out);
out.close();
// ---------- word轉PDF start
//Xml2Word2Pdf.word2Pdf("E:/時尚帶圖簡歷.doc", "D:/new時尚帶圖簡歷.pdf");
// ---------- word轉PDF end
/** 此處使用JAVA-JACOB 技術 處理通過java-FreeMarker模板生成的word文檔在移動端打開爲xml文件 start*/
ActiveXComponent _app = new ActiveXComponent("Word.Application");
_app.setProperty("Visible", Variant.VT_FALSE);
Dispatch documents = _app.getProperty("Documents").toDispatch();
// 打開FreeMarker生成的Word文檔
Dispatch doc = Dispatch.call(documents, "Open", "E:/時尚帶圖簡歷.doc", Variant.VT_FALSE, Variant.VT_TRUE).toDispatch();
// 另存爲新的Word文檔
Dispatch.call(doc, "SaveAs", "D:/new時尚帶圖簡歷.doc", Variant.VT_FALSE, Variant.VT_TRUE);
Dispatch.call(doc, "Close", Variant.VT_FALSE);
_app.invoke("Quit", new Variant[] {});
ComThread.Release();
/** 此處使用JAVA-JACOB 技術 處理通過java-FreeMarker模板生成的word文檔在移動端打開爲xml文件 end*/
// 刪除臨時文件
outFile.delete();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 處理圖片 轉爲圖碼
* 正式生成時,以下圖片爲用戶從自己的照片中選取,程序獲取其路徑即可.
* @return
*/
public static String getImageStr() {
String imgFile = "d:/x.jpg";
InputStream in = null;
byte[] data = null;
try {
in = new FileInputStream(imgFile);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (Exception e) {
e.printStackTrace();
}
// 該代碼需要用到 sun.misc.BASE64Encoder 類,這個類就是JDK中的類,但在eclipse中默認是不訪問的,需要設置一下
// 具體設置如下:
// 項目上右鍵-->Build Path-->Configure Build Path
// 雙擊Access rules,點擊add, 選擇Accessible,下方輸入**, OK , 這樣就可以訪問sun.misc.BASE64Encoder 類了
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);
}
}
/** 下面是實際生成系統下 將一些地址寫活*/
package net.aykj.util;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.text.ParseException;
import java.text.SimpleDateFormat;
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 freemarker.template.Version;
import net.aykj.constants.AykjConstants;
import net.aykj.listener.InitialListener;
import net.aykj.pojo.Annex;
import net.aykj.pojo.Educational;
import net.aykj.pojo.PeopleInfo;
import net.aykj.pojo.WorkExperience;
import net.aykj.service.EducationalService;
import net.aykj.service.WorkExperienceService;
import sun.misc.BASE64Encoder;
/**
* 通過選擇簡歷模板生成簡歷
* @author Add by Bingyong.Wang
*
*/
public class CreatePeoleInfoByResumeTemplate {
// 如下代碼解決異常: java.lang.IllegalStateException: Failed to instantiate standard serializer
private CreatePeoleInfoByResumeTemplate(){}
/**
* 通過調用簡歷模板自動生成不帶圖的簡歷和帶圖的簡歷
*
* 正式生成簡歷時:
* 1 會員簡歷信息動態獲取.
* 2 會員動態選取簡歷模板
* 3 生成的簡歷如何存放?存放在哪裏?(這裏生成的放在附件表裏,通過會員ID獲取.)
* @throws ParseException
*/
public static String autoCreatePeopleInfo(PeopleInfo peopleInfo, Annex annex, String imgUrl) throws ParseException{
Map<String,Object> dataMap = new HashMap<String, Object>();
try {
// 姓名
dataMap.put("name", GeneralUtil.isNotNull(peopleInfo.getName()) ? peopleInfo.getName() : "");
//日期
//dataMap.put("date", new SimpleDateFormat("yyyy年MM月dd日").format(new SimpleDateFormat("yyyy-MM-dd").parse("2018-09-19")));
// 性別
dataMap.put("gender", GeneralUtil.isNotNull(peopleInfo.getGender()) ? peopleInfo.getGender() : "");
// 簡歷右側頭像
dataMap.put("imgUrl", GeneralUtil.isNotNull(getImageStr(imgUrl)) ? getImageStr(imgUrl) : "");
// 婚姻狀況
dataMap.put("maritalStatus", GeneralUtil.isNotNull(peopleInfo.getMaritalStatus()) ? peopleInfo.getMaritalStatus() : "");
// 電話
dataMap.put("tel", GeneralUtil.isNotNull(peopleInfo.getTel()) ? peopleInfo.getTel() : "");
// 郵箱
dataMap.put("email", GeneralUtil.isNotNull(peopleInfo.getEmail()) ? peopleInfo.getEmail() : "");
// 工作年限
dataMap.put("workingYears", GeneralUtil.isNotNull(peopleInfo.getWorkingYears()) ? peopleInfo.getWorkingYears() : "");
// 技能名稱(將會車符轉換爲換行)
dataMap.put("specialSkill", GeneralUtil.isNotNull(peopleInfo.getSpecialSkill()) ? peopleInfo.getSpecialSkill().replace(";", "<w:br/>") : "");
// 個人優勢
dataMap.put("personalAdvantage", GeneralUtil.isNotNull(peopleInfo.getPersonalAdvantage()) ? peopleInfo.getPersonalAdvantage() : "");
// 求職職位
dataMap.put("careerObjective", GeneralUtil.isNotNull(peopleInfo.getCareerObjective()) ? peopleInfo.getCareerObjective() : "");
// 意向城市
dataMap.put("intentionCity", GeneralUtil.isNotNull(peopleInfo.getIntentionCity()) ? peopleInfo.getIntentionCity() : "");
// 期望薪資
dataMap.put("pay", GeneralUtil.isNotNull(peopleInfo.getPay()) ? peopleInfo.getPay() : "");
// 目前工作狀況(入職時間)
dataMap.put("currentWorkingStatus", GeneralUtil.isNotNull(peopleInfo.getCurrentWorkingStatus()) ? peopleInfo.getCurrentWorkingStatus() : "");
// 教育背景 start
/*dataMap.put("school", GeneralUtil.isNotNull(peopleInfo.getSchool()) ? peopleInfo.getSchool() : "");
dataMap.put("major", GeneralUtil.isNotNull(peopleInfo.getMajor()) ? peopleInfo.getMajor() : "");
dataMap.put("educationStartTime", GeneralUtil.isNotNull(peopleInfo.getEducationStartTime()) ? new SimpleDateFormat("yyyy-MM").format(peopleInfo.getEducationStartTime()) : "");
dataMap.put("educationEndTime", GeneralUtil.isNotNull(peopleInfo.getEducationEndTime()) ? new SimpleDateFormat("yyyy-MM").format(peopleInfo.getEducationEndTime()) : "");
dataMap.put("educationExperience", GeneralUtil.isNotNull(peopleInfo.getEducationExperience()) ? peopleInfo.getEducationExperience() : "");*/
// 教育背景 end
/** Update 教育背景 start*/
EducationalService educationalService = new EducationalService();
// 獲取當前簡歷下的教育經歷
List<Educational> educationals = educationalService.queryEducationalListByResumeId(null, peopleInfo.getId());
List<Map<String, Object>> eduList = new ArrayList<>();
Map<String, Object> map = new HashMap<>();
if (GeneralUtil.isNotNull(educationals)) {
for(Educational educational : educationals) {
map.put("school", GeneralUtil.isNotNull(educational.getSchool()) ? educational.getSchool() : "");
map.put("major", GeneralUtil.isNotNull(educational.getMajor()) ? educational.getMajor() : "");
map.put("educationExperience", GeneralUtil.isNotNull(educational.getEducationExperience()) ? educational.getEducationExperience() : "");
map.put("educationStartTime", GeneralUtil.isNotNull(educational.getEducationStartTime()) ? new SimpleDateFormat("yyyy-MM").format(educational.getEducationStartTime()) : "");
map.put("educationEndTime", GeneralUtil.isNotNull(educational.getEducationEndTime()) ? new SimpleDateFormat("yyyy-MM").format(educational.getEducationEndTime()) : "");
eduList.add(map);
}
}
dataMap.put("eduList", eduList);
/** Update 教育背景 end*/
// 工作經驗 start
/*dataMap.put("company", GeneralUtil.isNotNull(peopleInfo.getCompany()) ? peopleInfo.getCompany() : "");
dataMap.put("historyPosts", GeneralUtil.isNotNull(peopleInfo.getHistoryPosts()) ? peopleInfo.getHistoryPosts() : "");
dataMap.put("startTime", GeneralUtil.isNotNull(peopleInfo.getStartTime()) ? new SimpleDateFormat("yyyy-MM").format(peopleInfo.getStartTime()) : "");
dataMap.put("endTime", GeneralUtil.isNotNull(peopleInfo.getEndTime()) ? new SimpleDateFormat("yyyy-MM").format(peopleInfo.getEndTime()) : "");
dataMap.put("workDescription", GeneralUtil.isNotNull(peopleInfo.getWorkDescription()) ? peopleInfo.getWorkDescription() : "");*/
// 工作經驗 end
/** Update 工作經驗 start*/
WorkExperienceService workExperienceService = new WorkExperienceService();
// 獲取當前簡歷下的教育經歷
List<WorkExperience> workExperiences = workExperienceService.queryWorkExperienceListByResumeId(null, peopleInfo.getId());
List<Map<String, Object>> workList = new ArrayList<>();
Map<String, Object> workMap = new HashMap<>();
if (GeneralUtil.isNotNull(workExperiences)) {
for(WorkExperience workExperience : workExperiences) {
workMap.put("company", GeneralUtil.isNotNull(workExperience.getCompany()) ? workExperience.getCompany() : "");
workMap.put("historyPosts", GeneralUtil.isNotNull(workExperience.getHistoryPosts()) ? workExperience.getHistoryPosts() : "");
workMap.put("workDescription", GeneralUtil.isNotNull(workExperience.getWorkDescription()) ? workExperience.getWorkDescription() : "");
workMap.put("startTime", GeneralUtil.isNotNull(workExperience.getStartTime()) ? new SimpleDateFormat("yyyy-MM").format(workExperience.getStartTime()) : "");
workMap.put("endTime", GeneralUtil.isNotNull(workExperience.getEndTime()) ? new SimpleDateFormat("yyyy-MM").format(workExperience.getEndTime()) : "");
workList.add(workMap);
}
}
dataMap.put("workList", workList);
/** Update 工作經驗 end*/
// 榮譽獎項
dataMap.put("awards", GeneralUtil.isNotNull(peopleInfo.getAwards()) ? peopleInfo.getAwards() : "");
//Configuration 用於讀取ftl文件
Configuration configuration = new Configuration(new Version("2.3.0"));
configuration.setDefaultEncoding("utf-8");
/**
* 以下是兩種指定ftl文件所在目錄路徑的方式,注意這兩種方式都是
* 指定ftl文件所在目錄的路徑,而不是ftl文件的路徑
*/
//指定路徑的第一種方式(根據某個類的相對路徑指定)
// configuration.setClassForTemplateLoading(this.getClass(), "");
//指定路徑的第二種方式,獲取改文件存放在web應用的根目錄
//configuration.setDirectoryForTemplateLoading(new File("d:/")); // /uploadDir/ftl/20200416/1587017088881.ftl
configuration.setDirectoryForTemplateLoading(new File(InitialListener.basePath + annex.getPath().substring(0, annex.getPath().lastIndexOf("/"))));
//輸出文檔路徑及名稱 (不帶圖)
//File outFile = new File("D:/簡潔不帶圖簡歷.doc");
// 輸出文檔路徑及名稱(帶圖) 這裏應該 會員生成的word簡歷文檔,放到對應的會員下的“我的簡歷”中。提示生成成功,可到會員中心“我的簡歷中查看”
//File outFile = new File("D:/時尚帶圖簡歷.doc");
//File outFile = new File("D:/時尚帶圖簡歷.doc");
//File outFile = new File(InitialListener.basePath + AykjConstants.PEOPLEINFO_PATH + "/" + new SimpleDateFormat("yyyyMMdd").format(new Date()) + ".doc");
// 防止同一份簡歷生成多個只是名字不同的簡歷(重新生成要刪除老的簡歷)
File outFile = new File(InitialListener.basePath + AykjConstants.PEOPLEINFO_PATH + "/" + (System.currentTimeMillis()/AykjConstants.NAMEDIVISOR) + ".doc");
// 以utf-8的編碼讀取ftl文件
//Template template = configuration.getTemplate("時尚(帶圖).ftl", "utf-8");
Template template = configuration.getTemplate(annex.getPath().substring(annex.getPath().lastIndexOf("/") + 1), "utf-8");
Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outFile), "utf-8"), 10240);
template.process(dataMap, out);
out.close();
/** 此處使用JAVA-JACOB 目前只支持windows 技術 處理通過java-FreeMarker模板生成的word文檔在移動端打開爲xml文件 start*/
/*ActiveXComponent _app = new ActiveXComponent("Word.Application");
_app.setProperty("Visible", Variant.VT_FALSE);
Dispatch documents = _app.getProperty("Documents").toDispatch();
// 打開FreeMarker生成的Word文檔
Dispatch doc = Dispatch.call(documents, "Open", outFile.getPath(), Variant.VT_FALSE, Variant.VT_TRUE).toDispatch();
// 另存爲新的Word文檔
File newFile = new File(InitialListener.basePath + AykjConstants.PEOPLEINFO_PATH + "/" + (System.currentTimeMillis()/AykjConstants.NAMEDIVISOR) + ".doc");
Dispatch.call(doc, "SaveAs", newFile.getPath(), Variant.VT_FALSE, Variant.VT_TRUE);
Dispatch.call(doc, "Close", Variant.VT_FALSE);
_app.invoke("Quit", new Variant[] {});
ComThread.Release();*/
/** 此處使用JAVA-JACOB 技術 處理通過java-FreeMarker模板生成的word文檔在移動端打開爲xml文件 end*/
// 刪除臨時文件
/*outFile.delete();
System.out.println("delete temp filePath ==== " + outFile.getPath());*/
return outFile.getPath().replace(InitialListener.basePath, "\\").replace("\\", "/");
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 處理圖片 轉爲圖碼
* 正式生成時,以下圖片爲用戶從自己的照片中選取,程序獲取其路徑即可.
* @return
*/
public static String getImageStr(String imgUrl) {
String imgFile = InitialListener.basePath + imgUrl;
InputStream in = null;
byte[] data = null;
try {
in = new FileInputStream(imgFile);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (Exception e) {
e.printStackTrace();
}
// 該代碼需要用到 sun.misc.BASE64Encoder 類,這個類就是JDK中的類,但在eclipse中默認是不訪問的,需要設置一下
// 具體設置如下:
// 項目上右鍵-->Build Path-->Configure Build Path
// 雙擊Access rules,點擊add, 選擇Accessible,下方輸入**, OK , 這樣就可以訪問sun.misc.BASE64Encoder 類了
BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);
}
}