有人可以分享如何从文本框中删除段落吗

Could someone share how to delete a paragraph form a textbox

我目前正在从事一个项目,用 Apache POI 项目操作 Docx 文件。我已使用 api 从文本框内的 运行 中删除文本,但不知道如何删除文本框内的段落。我假设我需要使用 class CTP 来获取要删除的段落对象。任何例子或建议将不胜感激。

中,我展示了如何替换 Word 文本框内容中的文本。该方法是使用 XmlCursorXPath .//*/w:txbxContent/w:p/w:r 中获取 XML 文本 运行 元素的列表,该 XmlCursor/word/document.xml 中选择该路径。

当然可以使用路径 .//*/w:txbxContent/w:p 来完成同样的操作,它获取文本框内容中的文本段落。有了那些低级别的段落 XML,我们可以将它们转换为 XWPFParagraph 以从中获取纯文本。然后,如果纯文本包含一些标准,我们可以简单地删除段落的 XML.

来源:

代码:

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

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

import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.XmlCursor;

import  org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP;

import java.util.List;
import java.util.ArrayList;

public class WordRemoveParagraphInTextBox {

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

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

  for (XWPFParagraph paragraph : document.getParagraphs()) {
   XmlCursor cursor = paragraph.getCTP().newCursor();
   cursor.selectPath("declare namespace w='http://schemas.openxmlformats.org/wordprocessingml/2006/main' .//*/w:txbxContent/w:p");

   List<XmlObject> ctpsintxtbx = new ArrayList<XmlObject>();

   while(cursor.hasNextSelection()) {
    cursor.toNextSelection();
    XmlObject obj = cursor.getObject();
    ctpsintxtbx.add(obj);
   }
   for (XmlObject obj : ctpsintxtbx) {
    CTP ctp = CTP.Factory.parse(obj.xmlText());
    //CTP ctp = CTP.Factory.parse(obj.newInputStream());
    XWPFParagraph bufferparagraph = new XWPFParagraph(ctp, document);
    String text = bufferparagraph.getText();
    if (text != null && text.contains("remove")) {
     obj.newCursor().removeXml();
    }
   }
  }

  FileOutputStream out = new FileOutputStream("WordRemoveParagraphInTextBoxNew.docx");
  document.write(out);
  out.close();
  document.close();
 }
}

结果: