poi java 删除word的空白页
开发的时候遇到的问题,特此记录一下
使用Apache POI(Java库)删除Word文档中的空白页时,需针对不同场景处理。以下是具体实现方法和代码示例:
- 基础删除(段落/分页符)
通过删除多余段落标记或分页符实现:
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);
适用于简单空白页(由空段落引起)
- 处理分节符/分页符
显式删除分节符或分页符:
for (XWPFSection sect : doc.getSections()) {
if (sect.getParagraphs().isEmpty()) {
doc.removeBodyElement(doc.getPosOfSection(sect));
}
}
需结合CTP和CTSectPr处理XML底层标签
- 表格后的空白页
调整段落行距以隐藏不可删的标记:
XWPFParagraph lastPara = doc.getLastParagraph();
if (lastPara != null) {
lastPara.setSpacingBetween(1, LineSpacingRule.EXACT);
}
解决表格末尾自动生成的段落标记导致的空白页
- 批量替换(高级)
使用正则替换删除隐藏符号:
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)和连续空格
注意事项
有些方法会把插入的图片也会当空白页一起清掉,注意多测试!