обновить XWPFDocument изменения - PullRequest
0 голосов
/ 08 июня 2018

Мне нужно удалить титульную страницу из документа

XWPFDocument document = ...;

if(document.getBodyElements().get(0) instanceof XWPFSDT) {
    document.removeBodyElement(0);
}

При отладке document элемент XWPFSDT правильно удален, но на выходной титульной странице все еще здесь.

Есть ли некоторыеспособ обновить / обновить документ XML, даже если изменения происходят с низкого уровня, как мы можем обновить документы, чтобы поддерживать их актуальность

1 Ответ

0 голосов
/ 08 июня 2018

До apache poi версии 3.17, XWPFDocument.removeBodyElement правильно удаляет только BodyElementType.TABLE или BodyElementType.PARAGRAPH.Ему не хватает CTBody.removeSdt .

Итак, мы должны делать вещи самого низкого уровня:

import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.xwpf.usermodel.*;

public class WordRemoveCoverPage {

 public static void main(String[] args) throws Exception {

  XWPFDocument document = new XWPFDocument(new FileInputStream("WordDocumentWithCoverPage.docx"));

  if(document.getBodyElements().get(0) instanceof XWPFSDT) {
   System.out.println(document.removeBodyElement(0)); // true == success, but low level <w:sdt> is not removed from the XML
   document.getDocument().getBody().removeSdt(0);
  }

  document.write(new FileOutputStream("WordDocumentWithoutCoverPage.docx"));

  document.close();
 }
}
...