Согласно вашему скриншоту вы хотите удалить пустые абзацы, которые размещаются сразу после таблиц.
Это возможно, хотя мне интересно, почему эти абзацы есть. После удаления этих абзацев в Word
таблицы не являются более редактируемыми как отдельные таблицы, а только как строки в одной таблице. Это то, что вы хотите?
В любом случае, как говорится, удаление пустых абзацев после таблиц возможно. Для этого вы можете просмотреть элементы body документа. Если сразу за XWPFTable
следует XWPFParagraph
, а в этом XWPFParagraph
нет текста, то удалите этот XWPFParagraph
из документа.
Пример:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.poi.xwpf.usermodel.*;
public class WordRemoveEmptyParagraphs {
public static void main(String[] args) throws Exception {
XWPFDocument document = new XWPFDocument(new FileInputStream("./WordTables.docx"));
int thisBodyElementPos = 0;
int nextBodyElementPos = 1;
IBodyElement thisBodyElement = null;
IBodyElement nextBodyElement = null;
if (document.getBodyElements().size() > 1) { // document must have at least two body elements
do {
thisBodyElement = document.getBodyElements().get(thisBodyElementPos);
nextBodyElement = document.getBodyElements().get(nextBodyElementPos);
if (thisBodyElement instanceof XWPFTable && nextBodyElement instanceof XWPFParagraph) {
XWPFParagraph paragraph = (XWPFParagraph)nextBodyElement;
if (paragraph.getRuns().size() == 0) { // if paragraph does not have any text runs in it
document.removeBodyElement(nextBodyElementPos);
}
}
thisBodyElementPos++;
nextBodyElementPos = thisBodyElementPos + 1;
} while (nextBodyElementPos < document.getBodyElements().size());
}
FileOutputStream out = new FileOutputStream("./WordTablesChanged.docx");
document.write(out);
out.close();
document.close();
}
}