JAVA 使用 Apache POI 库导出 Word 简历

使用 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 转换则适合复杂格式设计。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值