poi java 删除word的空白页

开发的时候遇到的问题,特此记录一下

使用Apache POI(Java库)删除Word文档中的空白页时,需针对不同场景处理。以下是具体实现方法和代码示例:

  1. 基础删除(段落/分页符)‌

通过删除多余段落标记或分页符实现:

XWPFDocument doc = new XWPFDocument(new FileInputStream("input.docx"));

List paragraphs = doc.getParagraphs();

for (XWPFParagraph para : paragraphs) {

if (para.getText().trim().isEmpty()) {

doc.removeBodyElement(doc.getPosOfParagraph(para));

}

}

FileOutputStream out = new FileOutputStream("output.docx");

doc.write(out);

适用于简单空白页(由空段落引起)‌

  1. 处理分节符/分页符‌

显式删除分节符或分页符:

for (XWPFSection sect : doc.getSections()) {

if (sect.getParagraphs().isEmpty()) {

doc.removeBodyElement(doc.getPosOfSection(sect));

}

}

需结合CTP和CTSectPr处理XML底层标签‌

  1. 表格后的空白页‌

调整段落行距以隐藏不可删的标记:

XWPFParagraph lastPara = doc.getLastParagraph();

if (lastPara != null) {

lastPara.setSpacingBetween(1, LineSpacingRule.EXACT);

}

解决表格末尾自动生成的段落标记导致的空白页‌

  1. 批量替换(高级)‌

使用正则替换删除隐藏符号:

Pattern pattern = Pattern.compile("(\f|\b\s{2,}\b)");

for (XWPFParagraph para : paragraphs) {

String text = para.getText();

text = pattern.matcher(text).replaceAll("");

para.replaceText(text);

}

处理分页符(\f)和连续空格‌

注意事项‌

有些方法会把插入的图片也会当空白页一起清掉,注意多测试!