diff --git a/src/NPOI.OOXML/XWPF/Usermodel/XWPFNumbering.cs b/src/NPOI.OOXML/XWPF/Usermodel/XWPFNumbering.cs index 1deee85..9b05491 100644 --- a/src/NPOI.OOXML/XWPF/Usermodel/XWPFNumbering.cs +++ b/src/NPOI.OOXML/XWPF/Usermodel/XWPFNumbering.cs @@ -249,6 +249,7 @@ namespace NPOI.XWPF.UserModel int pos = abstractNums.Count; if (abstractNum.GetAbstractNum() != null) { // Use the current CTAbstractNum if it exists + abstractNum.GetAbstractNum().abstractNumId = pos.ToString(); ctNumbering.AddNewAbstractNum().Set(abstractNum.GetAbstractNum()); } else diff --git a/src/NPOI.OOXML/XWPF/Usermodel/XWPFParagraph.cs b/src/NPOI.OOXML/XWPF/Usermodel/XWPFParagraph.cs index 0990e05..ecb7d3b 100644 --- a/src/NPOI.OOXML/XWPF/Usermodel/XWPFParagraph.cs +++ b/src/NPOI.OOXML/XWPF/Usermodel/XWPFParagraph.cs @@ -1340,6 +1340,26 @@ namespace NPOI.XWPF.UserModel return xwpfRun; } + /** + * Appends a new hyperlink run to this paragraph + * + * @return a new hyperlink run + */ + public XWPFHyperlinkRun CreateHyperlinkRun(string rId) + { + CT_R r = new CT_R(); + r.AddNewRPr().rStyle = new CT_String() { val = "Hyperlink" }; + + CT_Hyperlink1 hl = paragraph.AddNewHyperlink(); + hl.history = ST_OnOff.on; + hl.id = rId; + hl.Items.Add(r); + XWPFHyperlinkRun xwpfRun = new XWPFHyperlinkRun(hl, r, this); + runs.Add(xwpfRun); + iRuns.Add(xwpfRun); + return xwpfRun; + } + /** * insert a new Run in RunArray * @param pos diff --git a/src/NPOI.OpenXmlFormats/Wordprocessing/Paragraph.cs b/src/NPOI.OpenXmlFormats/Wordprocessing/Paragraph.cs index 908ecfb..72ed657 100644 --- a/src/NPOI.OpenXmlFormats/Wordprocessing/Paragraph.cs +++ b/src/NPOI.OpenXmlFormats/Wordprocessing/Paragraph.cs @@ -371,6 +371,17 @@ namespace NPOI.OpenXmlFormats.Wordprocessing return r; } + public CT_Hyperlink1 AddNewHyperlink() + { + CT_Hyperlink1 hl = new CT_Hyperlink1(); + lock (this) + { + itemsField.Add(hl); + itemsElementNameField.Add(ParagraphItemsChoiceType.hyperlink); + } + return hl; + } + [XmlElement("ItemsElementName", Order = 2)] [XmlIgnore] public List ItemsElementName