能否使用Apache POI将格式化HTML内容写入Word文档?
在Apache POI中嵌入带格式的HTML到Word文档
要在Apache POI生成的Word文档中还原HTML的基础格式(列表、粗体、斜体等),可以利用XWPFParagraph的底层CTP对象提供的importXHTML方法,直接将HTML内容导入到指定段落中。
实现步骤及代码示例
- 创建Word文档实例,定位到需要插入HTML的位置(可以是新段落或现有段落)
- 解析HTML内容,通过
CTP.importXHTML方法将HTML结构和样式导入到Word段落中 - 保存文档完成输出
import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; import org.w3c.dom.Document; import org.w3c.dom.Element; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.ByteArrayInputStream; import java.io.FileOutputStream; import java.io.IOException; public class HtmlToWordConverter { public static void main(String[] args) { try (XWPFDocument doc = new XWPFDocument()) { // 添加前置说明段落 XWPFParagraph introPara = doc.createParagraph(); introPara.createRun().setText("以下是从HTML导入的带格式内容:"); // 待导入的HTML示例内容 String htmlContent = "<ul>" + "<li>列表项1:<b>粗体文本</b></li>" + "<li>列表项2:<i>斜体文本</i></li>" + "<li>列表项3:<u>带下划线文本</u></li>" + "</ul>" + "<p>独立段落:包含<strong>加粗</strong>和<em>斜体</em>的混合格式</p>"; // 创建用于承载HTML的段落 XWPFParagraph htmlHostPara = doc.createParagraph(); CTP ctp = htmlHostPara.getCTP(); // 解析HTML并导入到Word段落 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document htmlDoc = builder.parse(new ByteArrayInputStream(htmlContent.getBytes())); Element htmlRoot = htmlDoc.getDocumentElement(); ctp.importXHTML(htmlRoot); // 保存生成的Word文档 try (FileOutputStream out = new FileOutputStream("formatted-content.docx")) { doc.write(out); } } catch (Exception e) { e.printStackTrace(); } } }
依赖配置(Maven)
确保项目中引入以下必要依赖:
<dependencies> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>5.2.5</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.12.2</version> </dependency> </dependencies>
注意事项
- 支持的HTML标签:基础格式标签
<b>,<i>,<u>,<strong>,<em>,列表标签<ul>,<ol>,<li>,段落标签<p>等都能被正确解析 - 复杂CSS样式:POI对复杂CSS的支持有限,若需还原更复杂的样式,可考虑结合docx4j等第三方库
- 特殊字符处理:HTML中的特殊字符(如
<,>)需确保已正确转义,避免解析失败
内容的提问来源于stack exchange,提问作者Mohammad Ali
相关产品推荐
相关产品推荐

