itemsValList, XWPFTable table) throws IOException {
StringBuilder tabaleStringNew = new StringBuilder("");
//将表格转为html字符串
diff --git a/laws-modules/src/main/java/com/jero/modules/split/util/OmmlUtils.java b/laws-modules/src/main/java/com/jero/modules/split/util/OmmlUtils.java
new file mode 100644
index 00000000..8fbcbeaf
--- /dev/null
+++ b/laws-modules/src/main/java/com/jero/modules/split/util/OmmlUtils.java
@@ -0,0 +1,42 @@
+package com.jero.modules.split.util;
+
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+import java.io.File;
+import java.io.IOException;
+import java.io.StringReader;
+import java.io.StringWriter;
+
+/**
+ * @author liJiaRao
+ * @date 2023-11-09 9:51
+ */
+public class OmmlUtils {
+ /**
+ * 将word文档中公式格式为omML转换为mathMl
+ * @param omML
+ * @return
+ */
+ public static String getMathMLFromNode(String omML) {
+ //通过word中的xsl转成器解析omml公式格式
+ //StreamSource xslSource = new StreamSource(new File("src/main/resources/OMML2MML.XSL"));
+ StringWriter writer = new StringWriter();
+ try {
+ Transformer t = TransformerFactory.newInstance().newTransformer();
+ Source sources = new StreamSource(new StringReader(omML));
+ StreamResult result = new StreamResult(writer);
+ t.transform(sources, result);
+ } catch (TransformerException e) {
+ e.printStackTrace();
+ }
+ String mathML = writer.getBuffer().toString();
+ mathML = mathML.replaceAll("xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\"", "");
+ mathML = mathML.replaceAll("xmlns:mml", "xmlns");
+ mathML = mathML.replaceAll("mml:", "");
+ return mathML;
+ }
+}
diff --git a/laws-modules/src/main/java/com/jero/modules/split/util/ParagraphChildOrderManager.java b/laws-modules/src/main/java/com/jero/modules/split/util/ParagraphChildOrderManager.java
new file mode 100644
index 00000000..b025fb4e
--- /dev/null
+++ b/laws-modules/src/main/java/com/jero/modules/split/util/ParagraphChildOrderManager.java
@@ -0,0 +1,87 @@
+package com.jero.modules.split.util;
+
+import org.apache.poi.xwpf.usermodel.XWPFParagraph;
+import org.apache.poi.xwpf.usermodel.XWPFRun;
+import org.apache.xmlbeans.XmlCursor;
+import org.openxmlformats.schemas.officeDocument.x2006.math.CTOMath;
+import org.openxmlformats.schemas.officeDocument.x2006.math.CTOMathPara;
+
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Queue;
+
+/**
+ * 可以把公式和XWPFRun按顺序遍历,用到了以CTP开头的底层方式
+ *
+ * XWPFParagraph中主有两个方法可以分别提出XWPFRun和CTOMath,但是不知道位置
+ * ParagraphChildOrderManager这个类是专门解决这个问题的
+ * @author liJiaRao
+ * @date 2023-11-09 9:24
+ */
+public class ParagraphChildOrderManager {
+ public static int TYPE_RUN = 1;
+ public static int TYPE_OMATH = 2;
+
+ List typeList = new ArrayList();
+ XWPFParagraph p;
+
+ public ParagraphChildOrderManager(XWPFParagraph paragraph) {
+ this.p = paragraph;
+ //using a cursor to go through the paragraph from top to down
+ XmlCursor xmlcursor = paragraph.getCTP().newCursor();
+ while (xmlcursor.hasNextToken()) {
+ XmlCursor.TokenType tokenType = xmlcursor.toNextToken();
+ if (tokenType.isStart()) {
+ if (xmlcursor.getName().getPrefix().equalsIgnoreCase("w") && xmlcursor.getName().getLocalPart().equalsIgnoreCase("r")) {
+ typeList.add(TYPE_RUN);
+ } else if (xmlcursor.getName().getLocalPart().equalsIgnoreCase("oMath")) {
+ typeList.add(TYPE_OMATH);
+ }
+ } else if (tokenType.isEnd()) {
+ xmlcursor.push();
+ xmlcursor.toParent();
+ if (xmlcursor.getName().getLocalPart().equalsIgnoreCase("p")) {
+ break;
+ }
+ xmlcursor.pop();
+ }
+ }
+ }
+
+ public List