1. 示例代码
示例代码中详细介绍了如何读取word中的标题大纲。
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import java.io.FileInputStream;
import java.util.List;
public class App1 {
public static void main(String[] args) throws Exception {
FileInputStream inputStream = new FileInputStream("demo2.docx");
XWPFDocument doc = new XWPFDocument(inputStream);
//获取所有段落
List<XWPFParagraph> list = doc.getParagraphs();
for (XWPFParagraph paragraph : list) {
int titleLevel = WordUtils.getTitleLevel(doc, paragraph);
// System.out.println("titleLevel = " + titleLevel);
switch (titleLevel) {
case 1:
System.out.println("<h1>" + paragraph.getText() + "</h1>");
break;
case 2:
System.out.println("<h2>" + paragraph.getText() + "</h2>");
break;
case 3:
System.out.println("<h3>" + paragraph.getText() + "</h3>");
break;
// todo
case 4:
case 5:
case 6:
case 7:
default:
// 当成正文处理
System.out.println("<p>" + paragraph.getText() + "</p>");
}
}
inputStream.close();
}
}
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
public class WordUtils {
private WordUtils() {
// nop
}
/**
* Word中的大纲级别,可以通过getPPr().getOutlineLvl()直接提取,
* 但需要注意,Word中段落级别,通过如下三种方式定义:
* 1、直接对段落进行定义;
* 2、对段落的样式进行定义;
* 3、对段落样式的基础样式进行定义。
* 因此,在通过“getPPr().getOutlineLvl()”提取时,需要依次在如上三处读取。
*
* @param doc
* @param para
* @return 返回级别数字,1代表一级标题,2代表二级标题,0代表正文
*/
public static int getTitleLevel(XWPFDocument doc, XWPFParagraph para) {
try {
//判断该段落是否设置了大纲级别
if (para.getCTP().getPPr().getOutlineLvl() != null) {
return para.getCTP().getPPr().getOutlineLvl().getVal().intValue() + 1;
}
} catch (Exception e) {
// nop
}
try {
//判断该段落的样式是否设置了大纲级别
if (doc.getStyles().getStyle(para.getStyle()).getCTStyle().getPPr().getOutlineLvl() != null) {
return doc.getStyles().getStyle(para.getStyle()).getCTStyle().getPPr().getOutlineLvl()
.getVal().intValue() + 1;
}
} catch (Exception e) {
// nop
}
try {
//判断该段落的样式的基础样式是否设置了大纲级别
if (doc.getStyles().getStyle(doc.getStyles().getStyle(para.getStyle()).getCTStyle().getBasedOn().getVal())
.getCTStyle().getPPr().getOutlineLvl() != null) {
String styleName = doc.getStyles().getStyle(para.getStyle()).getCTStyle().getBasedOn().getVal();
return doc.getStyles().getStyle(styleName).getCTStyle().getPPr()
.getOutlineLvl().getVal().intValue() + 1;
}
} catch (Exception e) {
// nop
}
return 0;
}
}
2. 待读取的word文档
内容如下: