使用 Apache POI 库导出 Word 简历
Apache POI 是一个流行的 Java 库,用于处理 Microsoft Office 文档。通过 Apache POI,可以创建和修改 Word 文档(.docx 格式)。
添加 Apache POI 依赖(Maven 项目)
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
创建简历文档的代码示例
import org.apache.poi.xwpf.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
public class ResumeGenerator {
public static void main(String[] args) throws IOException {
XWPFDocument document = new XWPFDocument();
// 创建标题
XWPFParagraph title = document.createParagraph();
title.setAlignment(ParagraphAlignment.CENTER);
XWPFRun titleRun = title.createRun();
titleRun.setText("个人简历");
titleRun.setBold(true);
titleRun.setFontSize(20);
// 添加个人信息
addSection(document, "个人信息");
addContent(document, "姓名: 张三");
addContent(document, "电话: 13800138000");
addContent(document, "邮箱: zhangsan@example.com");
// 添加教育背景
addSection(document, "教育背景");
addContent(document, "2015-2019 北京大学 计算机科学与技术 学士");
// 添加工作经历
addSection(document, "工作经历");
addContent(document, "2019-至今 字节跳动 高级Java开发工程师");
// 保存文档
FileOutputStream out = new FileOutputStream("个人简历.docx");
document.write(out);
out.close();
document.close();
}
private static void addSection(XWPFDocument document, String sectionTitle) {
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText(sectionTitle);
run.setBold(true);
run.setFontSize(14);
paragraph.setSpacingAfter(100);
}
private static void addContent(XWPFDocument document, String content) {
XWPFParagraph paragraph = document.createParagraph();
XWPFRun run = paragraph.createRun();
run.setText(content);
paragraph.setSpacingAfter(100);
}
}
使用模板引擎生成简历
更复杂的简历可以使用模板引擎生成,如 Freemarker 或 Thymeleaf。
Freemarker 示例
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
创建模板文件 resume_template.ftl
${title}
${separator}
个人信息:
姓名: ${personalInfo.name}
电话: ${personalInfo.phone}
邮箱: ${personalInfo.email}
教育背景:
${education.school} ${education.major} ${education.degree} (${education.year})
工作经历:
<#list workExperience as job>
${job.company} ${job.position} (${job.duration})
</#list>
生成文档的 Java 代码
import freemarker.template.*;
import java.io.*;
import java.util.*;
public class FreemarkerResumeGenerator {
public static void main(String[] args) throws Exception {
Configuration cfg = new Configuration(Configuration.VERSION_2_3_31);
cfg.setDirectoryForTemplateLoading(new File("templates"));
cfg.setDefaultEncoding("UTF-8");
Map<String, Object> data = new HashMap<>();
data.put("title", "个人简历");
data.put("separator", "------------------------");
Map<String, String> personalInfo = new HashMap<>();
personalInfo.put("name", "张三");
personalInfo.put("phone", "13800138000");
personalInfo.put("email", "zhangsan@example.com");
data.put("personalInfo", personalInfo);
Map<String, String> education = new HashMap<>();
education.put("school", "北京大学");
education.put("major", "计算机科学与技术");
education.put("degree", "学士");
education.put("year", "2015-2019");
data.put("education", education);
List<Map<String, String>> workExperience = new ArrayList<>();
Map<String, String> job1 = new HashMap<>();
job1.put("company", "字节跳动");
job1.put("position", "高级Java开发工程师");
job1.put("duration", "2019-至今");
workExperience.add(job1);
data.put("workExperience", workExperience);
Template template = cfg.getTemplate("resume_template.ftl");
Writer out = new OutputStreamWriter(new FileOutputStream("resume.txt"));
template.process(data, out);
out.close();
}
}
使用第三方库 Docx4j
Docx4j 是另一个强大的 Java 库,专门用于处理 Word 文档。
添加依赖
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j</artifactId>
<version>11.4.4</version>
</dependency>
生成简历的示例代码
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import org.docx4j.openpackaging.parts.WordprocessingML.MainDocumentPart;
import org.docx4j.wml.*;
public class Docx4jResumeGenerator {
public static void main(String[] args) throws Exception {
WordprocessingMLPackage wordPackage = WordprocessingMLPackage.createPackage();
MainDocumentPart mainPart = wordPackage.getMainDocumentPart();
// 添加标题
mainPart.addStyledParagraphOfText("Title", "个人简历");
// 添加个人信息
mainPart.addParagraphOfText("个人信息:");
mainPart.addParagraphOfText("姓名: 张三");
mainPart.addParagraphOfText("电话: 13800138000");
mainPart.addParagraphOfText("邮箱: zhangsan@example.com");
// 保存文档
wordPackage.save(new java.io.File("resume_docx4j.docx"));
}
}
将 HTML 转换为 Word 文档
如果需要更丰富的格式,可以先用 HTML 设计简历,然后转换为 Word 文档。
使用 Flying Saucer 库将 HTML 转换为 DOCX
<dependency>
<groupId>org.xhtmlrenderer</groupId>
<artifactId>flying-saucer-pdf</artifactId>
<version>9.1.22</version>
</dependency>
<dependency>
<groupId>org.docx4j</groupId>
<artifactId>docx4j</artifactId>
<version>11.4.4</version>
</dependency>
示例代码
import org.docx4j.convert.in.xhtml.XHTMLImporterImpl;
import org.docx4j.openpackaging.packages.WordprocessingMLPackage;
import java.io.FileInputStream;
public class HtmlToDocx {
public static void main(String[] args) throws Exception {
WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
XHTMLImporterImpl XHTMLImporter = new XHTMLImporterImpl(wordMLPackage);
FileInputStream htmlFile = new FileInputStream("resume.html");
wordMLPackage.getMainDocumentPart().getContent().addAll(
XHTMLImporter.convert(htmlFile, null)
);
wordMLPackage.save(new java.io.File("resume_from_html.docx"));
}
}
以上方法提供了多种生成 Word 简历的途径,可以根据项目需求选择合适的技术方案。Apache POI 适合简单文档,模板引擎适合动态内容,Docx4j 提供更专业的 Word 操作,而 HTML 转换则适合复杂格式设计。