杰瑞科技汇

Java如何用XML生成Word文档?

Java生成Word文档的多种方法

在Java中生成Word文档有几种常见方法,以下是几种主流的实现方式:

Java如何用XML生成Word文档?-图1
(图片来源网络,侵删)

使用Apache POI

Apache POI是Java操作Office文档最常用的库,支持生成Word文档。

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.*;
public class WordGenerator {
    public static void main(String[] args) throws Exception {
        // 创建新文档
        XWPFDocument document = new XWPFDocument();
        // 添加标题
        XWPFParagraph title = document.createParagraph();
        title.setAlignment(ParagraphAlignment.CENTER);
        XWPFRun titleRun = title.createRun();
        titleRun.setText("Java生成的Word文档");
        titleRun.setBold(true);
        titleRun.setFontSize(16);
        // 添加段落
        XWPFParagraph paragraph = document.createParagraph();
        XWPFRun run = paragraph.createRun();
        run.setText("这是一个使用Apache POI生成的Word文档示例。");
        // 添加表格
        XWPFTable table = document.createTable();
        XWPFTableRow row = table.getRow(0);
        row.getCell(0).setText("姓名");
        row.addNewTableCell().setText("年龄");
        row.addNewTableCell().setText("职业");
        row = table.createRow();
        row.getCell(0).setText("张三");
        row.getCell(1).setText("30");
        row.getCell(2).setText("工程师");
        // 保存文档
        try (FileOutputStream out = new FileOutputStream("output.docx")) {
            document.write(out);
        }
    }
}

使用iText

iText主要用于PDF生成,但也支持Word文档操作。

Maven依赖

<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itextpdf</artifactId>
    <version>5.5.13.3</version>
</dependency>
<dependency>
    <groupId>com.itextpdf</groupId>
    <artifactId>itext-asian</artifactId>
    <version>5.2.0</version>
</dependency>

使用docx4j

docx4j专门用于处理Office Open XML格式(如.docx)。

Maven依赖

<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;
public class Docx4jExample {
    public static void main(String[] args) throws Exception {
        // 创建新文档
        WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.createPackage();
        // 获取主文档部分
        MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart();
        // 添加内容
        String xml = "<w:p><w:r><w:t>Hello World!</w:t></w:r></w:p>";
        documentPart.getContents().addObject(xml);
        // 保存文档
        wordMLPackage.save(new File("output.docx"));
    }
}

使用Freemarker模板

对于复杂文档,可以使用Freemarker模板生成Word文档。

Java如何用XML生成Word文档?-图2
(图片来源网络,侵删)

步骤

  1. 创建Word模板(.docx),将需要替换的内容用${variable}标记
  2. 使用Freemarker引擎处理模板

示例代码

import freemarker.template.Configuration;
import freemarker.template.Template;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
public class FreemarkerWordGenerator {
    public static void main(String[] args) throws Exception {
        // 配置Freemarker
        Configuration cfg = new Configuration(Configuration.VERSION_2_3_30);
        cfg.setDirectoryForTemplateLoading(new File("templates"));
        // 准备数据
        Map<String, Object> data = new HashMap<>();
        data.put("title", "报告标题");
        data.put("content", "这是报告内容...");
        // 加载模板
        Template template = cfg.getTemplate("template.docx");
        // 生成输出
        try (Writer out = new FileWriter("output.docx")) {
            template.process(data, out);
        }
    }
}

使用XML直接生成

对于简单需求,可以直接生成XML格式的Word文档。

示例代码

import java.io.FileOutputStream;
import java.io.IOException;
public class XmlWordGenerator {
    public static void main(String[] args) throws IOException {
        String xmlContent = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"
                + "<w:document xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">"
                + "<w:body>"
                + "<w:p><w:r><w:t>Hello World!</w:t></w:r></w:p>"
                + "</w:body>"
                + "</w:document>";
        try (FileOutputStream out = new FileOutputStream("output.docx")) {
            out.write(xmlContent.getBytes());
        }
    }
}

选择建议

  1. 简单文档:Apache POI是最简单直接的选择
  2. 复杂模板:Freemarker模板更灵活
  3. 高性能需求:docx4j功能强大但学习曲线较陡
  4. PDF为主:iText可以同时处理PDF和Word

注意:生成Word文档时,请确保处理了字体、编码等国际化问题,特别是处理中文内容时。

Java如何用XML生成Word文档?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇