/// <summary> /// If this document does not contain a /word/styles.xml add the default one generated by Microsoft Word. /// </summary> /// <param name="package"></param> /// <returns></returns> internal static XDocument AddDefaultStylesXml(Package package) { XDocument stylesDoc; // Create the main document part for this package var word_styles = package.CreatePart(new Uri("/word/styles.xml", UriKind.Relative), "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml", CompressionOption.Maximum); stylesDoc = HelperFunctions.DecompressXMLResource("Xceed.Words.NET.Resources.default_styles.xml.gz"); var lang = stylesDoc.Root.Element(XName.Get("docDefaults", DocX.w.NamespaceName)).Element(XName.Get("rPrDefault", DocX.w.NamespaceName)).Element(XName.Get("rPr", DocX.w.NamespaceName)).Element(XName.Get("lang", DocX.w.NamespaceName)); lang.SetAttributeValue(XName.Get("val", DocX.w.NamespaceName), CultureInfo.CurrentCulture); // Save /word/styles.xml using (TextWriter tw = new StreamWriter(new PackagePartStream(word_styles.GetStream(FileMode.Create, FileAccess.Write)))) { stylesDoc.Save(tw, SaveOptions.None); } var mainDocumentPart = package.GetParts().Single ( p => p.ContentType.Equals(DOCUMENT_DOCUMENTTYPE, StringComparison.CurrentCultureIgnoreCase) || p.ContentType.Equals(TEMPLATE_DOCUMENTTYPE, StringComparison.CurrentCultureIgnoreCase) ); mainDocumentPart.CreateRelationship(word_styles.Uri, TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"); return(stylesDoc); }
internal void CreateNewNumberingNumId(int level = 0, ListItemType listType = ListItemType.Numbered, int?startNumber = null, bool continueNumbering = false) { ValidateDocXNumberingPartExists(); if (Document._numbering.Root == null) { throw new InvalidOperationException("Numbering section did not instantiate properly."); } ListType = listType; var numId = GetMaxNumId() + 1; var abstractNumId = GetMaxAbstractNumId() + 1; XDocument listTemplate; switch (listType) { case ListItemType.Bulleted: listTemplate = HelperFunctions.DecompressXMLResource("Xceed.Words.NET.Resources.numbering.default_bullet_abstract.xml.gz"); break; case ListItemType.Numbered: listTemplate = HelperFunctions.DecompressXMLResource("Xceed.Words.NET.Resources.numbering.default_decimal_abstract.xml.gz"); break; default: throw new InvalidOperationException(string.Format("Unable to deal with ListItemType: {0}.", listType.ToString())); } var abstractNumTemplate = listTemplate.Descendants().Single(d => d.Name.LocalName == "abstractNum"); abstractNumTemplate.SetAttributeValue(DocX.w + "abstractNumId", abstractNumId); var abstractNumXml = GetAbstractNumXml(abstractNumId, numId, startNumber, continueNumbering); var abstractNumNode = Document._numbering.Root.Descendants().LastOrDefault(xElement => xElement.Name.LocalName == "abstractNum"); var numXml = Document._numbering.Root.Descendants().LastOrDefault(xElement => xElement.Name.LocalName == "num"); if (abstractNumNode == null || numXml == null) { Document._numbering.Root.Add(abstractNumTemplate); Document._numbering.Root.Add(abstractNumXml); } else { abstractNumNode.AddAfterSelf(abstractNumTemplate); numXml.AddAfterSelf( abstractNumXml ); } NumId = numId; }