|
28 | 28 | import java.util.Set; |
29 | 29 | import java.util.Stack; |
30 | 30 |
|
| 31 | +import org.apache.poi.xwpf.usermodel.XWPFAbstractNum; |
31 | 32 | import org.apache.poi.xwpf.usermodel.XWPFDocument; |
| 33 | +import org.apache.poi.xwpf.usermodel.XWPFNum; |
32 | 34 | import org.apache.poi.xwpf.usermodel.XWPFNumbering; |
33 | 35 | import org.eclipse.emf.common.util.URI; |
34 | 36 | import org.eclipse.emf.ecore.resource.URIConverter; |
|
61 | 63 | import org.obeonetwork.m2doc.element.impl.MTableImpl.MCellImpl; |
62 | 64 | import org.obeonetwork.m2doc.element.impl.MTableImpl.MRowImpl; |
63 | 65 | import org.obeonetwork.m2doc.element.impl.MTextImpl; |
64 | | -import org.obeonetwork.m2doc.services.PaginationServices; |
65 | 66 | import org.openxmlformats.schemas.officeDocument.x2006.sharedTypes.STOnOff; |
66 | 67 | import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTAbstractNum; |
67 | 68 | import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDecimalNumber; |
|
71 | 72 | import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTLvl; |
72 | 73 | import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTNum; |
73 | 74 | import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTNumFmt; |
74 | | -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTNumbering; |
75 | 75 | import org.openxmlformats.schemas.wordprocessingml.x2006.main.STJc; |
76 | 76 | import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMultiLevelType; |
77 | 77 | import org.openxmlformats.schemas.wordprocessingml.x2006.main.STNumberFormat; |
@@ -2037,19 +2037,30 @@ private void setOrderedListNumbering(Context context, Element element) { |
2037 | 2037 | * the {@link Context} |
2038 | 2038 | */ |
2039 | 2039 | private void createNumbering(Context context) { |
2040 | | - final CTAbstractNum res; |
2041 | 2040 | final XWPFNumbering numbering = destinationDocument.createNumbering(); |
2042 | | - final CTNumbering ctNumbering = PaginationServices.getCTNumbering(numbering); |
2043 | | - res = ctNumbering.addNewAbstractNum(); |
| 2041 | + |
| 2042 | + // Create CTAbstractNum using the factory to avoid duplicate when creating XWPFAbstractNum |
| 2043 | + CTAbstractNum res = CTAbstractNum.Factory.newInstance(); |
2044 | 2044 | res.addNewMultiLevelType().setVal(STMultiLevelType.HYBRID_MULTILEVEL); |
2045 | | - BigInteger id = BigInteger.valueOf(ctNumbering.sizeOfAbstractNumArray() - 1); |
2046 | | - res.setAbstractNumId(id); |
2047 | | - final CTNum ctNum = ctNumbering.addNewNum(); |
2048 | | - ctNum.setNumId(BigInteger.valueOf(ctNumbering.sizeOfNumArray())); |
2049 | | - ctNum.addNewAbstractNumId().setVal(id); |
| 2045 | + BigInteger abstractNumId = BigInteger.valueOf(numbering.getAbstractNums().size()); |
| 2046 | + res.setAbstractNumId(abstractNumId); |
| 2047 | + XWPFAbstractNum newAbstractNum = new XWPFAbstractNum(res); |
| 2048 | + BigInteger finalAbsId = numbering.addAbstractNum(newAbstractNum); |
| 2049 | + |
| 2050 | + // Update the reference (that was changed through addAbstractNum) |
| 2051 | + res = newAbstractNum.getCTAbstractNum(); |
| 2052 | + newAbstractNum.setNumbering(numbering); |
| 2053 | + |
| 2054 | + final CTNum ctNum = CTNum.Factory.newInstance(); |
| 2055 | + ctNum.addNewAbstractNumId().setVal(finalAbsId); |
| 2056 | + BigInteger numId = BigInteger.valueOf(numbering.getNums().size() + 1); |
| 2057 | + ctNum.setNumId(numId); |
| 2058 | + XWPFNum newNum = new XWPFNum(ctNum); |
| 2059 | + newNum.setNumbering(numbering); |
| 2060 | + numbering.addNum(newNum); |
2050 | 2061 |
|
2051 | 2062 | context.numbering = res; |
2052 | | - context.numberingID = ctNum.getNumId(); |
| 2063 | + context.numberingID = numId; |
2053 | 2064 | } |
2054 | 2065 |
|
2055 | 2066 | /** |
|
0 commit comments