Freemarker模板生成word文档及在Windows系统下(linux系统暂不支持)手机版打开为xml异常处理方法

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("vince@163.com");
		// 工作年限
		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("无");
		
		// 计算机
		people
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于Spring Boot使用Freemarker模板生成Word文档并加密的例子,可以按照以下步骤进行操作: 1. 首先,您需要在pom.xml文件中添加Freemarker和Apache POI的依赖项。在 `<dependencies>` 标签内添加以下代码: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>4.1.2</version> </dependency> ``` 2. 创建一个Freemarker模板文件,例如 `template.ftl`,并在其中编写Word文档的内容,可以使用Freemarker语法进行动态内容替换。 3. 创建一个Controller类,并添加以下代码: ```java import freemarker.template.Configuration; import freemarker.template.Template; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFEncryptor; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; import javax.servlet.http.HttpServletResponse; import java.io.OutputStream; import java.util.HashMap; import java.util.Map; @Controller public class WordController { @Autowired private Configuration freemarkerConfiguration; @GetMapping("/generate-word") public void generateWord(HttpServletResponse response) throws Exception { // 加载Freemarker模板 Template template = freemarkerConfiguration.getTemplate("template.ftl"); // 创建Word文档对象 XWPFDocument document = new XWPFDocument(); // 创建段落对象 XWPFParagraph paragraph = document.createParagraph(); XWPFRun run = paragraph.createRun(); // 填充模板内容 Map<String, Object> data = new HashMap<>(); // 添加模板中需要的数据,可以根据实际需求自行修改 // 渲染模板 run.setText(templateToString(template, data)); // 加密Word文档 XWPFEncryptor encryptor = new XWPFEncryptor(document); encryptor.encrypt("password"); // 替换为您自己的密码 // 设置响应头 response.setHeader("Content-disposition", "attachment; filename=encrypted_word.docx"); response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); // 导出Word文档 OutputStream outputStream = response.getOutputStream(); document.write(outputStream); outputStream.close(); } private String templateToString(Template template, Map<String, Object> data) throws Exception { StringWriter stringWriter = new StringWriter(); template.process(data, stringWriter); return stringWriter.toString(); } } ``` 4. 在Spring Boot的配置文件(例如 `application.properties`)中添加以下配置: ```properties spring.freemarker.template-loader-path=classpath:/templates/ ``` 5. 运行Spring Boot应用程序,并访问 `/generate-word` 路径,即可生成并下载加密的Word文档。 请注意,上述代码仅为示例,您可以根据实际需求进行修改和扩展。同时,为了确保文档的安全性,请根据您的需求修改加密密码和文件名。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值