什么是 Apache POI?
Apache POI 是一个开源的 Java API,用于读写 Microsoft Office 格式文件,包括 Word(.doc/.docx)、Excel(.xls/.xlsx)和 PowerPoint(.ppt/.pptx)。其中,XWPF 组件用于处理 .docx 文件。
HTML 转 Word 的挑战
POI 本身不直接支持解析 HTML。因此,要实现 HTML 转 Word,通常需要:
- 先解析 HTML 结构(如使用 Jsoup)
- 再将解析后的文本、标题、列表等元素映射到 Word 段落、样式中
注意:复杂样式(如 CSS 布局、图片定位)无法完全保留。
简单示例代码
以下是一个基础示例,展示如何将简单 HTML 转换为 Word 文档:
import org.apache.poi.xwpf.usermodel.*;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.io.FileOutputStream;
import java.io.IOException;
public class HtmlToWord {
public static void main(String[] args) throws IOException {
String html = "<h1>标题</h1><p>这是一个段落。</p>";
Document doc = Jsoup.parse(html);
XWPFDocument wordDoc = new XWPFDocument();
for (Element element : doc.body().children()) {
XWPFParagraph para = wordDoc.createParagraph();
XWPFRun run = para.createRun();
if ("h1".equals(element.tagName())) {
run.setBold(true);
run.setFontSize(16);
}
run.setText(element.text());
}
try (FileOutputStream out = new FileOutputStream("output.docx")) {
wordDoc.write(out);
}
wordDoc.close();
}
}
注意事项
- 需添加依赖:
poi-ooxml和jsoup - 仅支持基本 HTML 标签(如 p, h1~h6, ul/ol/li 等)
- 图片、表格、CSS 样式需额外处理
替代方案推荐
若需更完整的 HTML 渲染效果,可考虑以下方式:
- 使用浏览器引擎(如 Puppeteer)先转 PDF,再转 Word
- 使用专业文档转换服务或库(如 Aspose.Words)
- 结合在线工具快速完成转换(见下方链接)