在POI中,根据换行符,将Word分成一个个的段落,
通过获取段落集合,判断段落中的text等属性是否为空,来进行删除
话不多说,见代码
public static void changeText(XWPFDocument document){
//获取文字段落集合
List<XWPFParagraph> paragraphs = document.getParagraphs();
//所有类型集合(文字段落、表格、图片等)
List<IBodyElement> listBe = document.getBodyElements();
List<Integer> runList = new ArrayList<>();
int n = 0;
for(int i = 0; i < listBe.size(); i++){
//BodyElementType.PARAGRAPH : 枚举中的文字段落
//文字为空时,先添加到list中;
//注意picture类型也在PARAGRAPH中,需要校验embeddedPictures的长度是否为0
//为0表示空行,大于0表示有图片,可能还有其他类型,暂时没遇到,各位自行斟酌
if(StringUtils.isEmpty(paragraphs.get(n).getRuns().get(0).text())
&& paragraphs.get(n).getRuns().get(0).getEmbeddedPictures().size() == 0){
runList.add(i);
}
n++;
//非文字段落n-1
if(listBe.get(i).getElementType() != BodyElementType.PARAGRAPH){
n--;
}
}
//遍历list删除
for(int i = runList.size() - 1; i >= 0; i--){
document.removeBodyElement(runList.get(i));
}
}