// Extract the styles or stylesWithEffects part from a // word processing document as an XDocument instance. private XDocument ExtractStylesPart(string fileName, bool getStylesWithEffectsPart) { XDocument styles = null; // Open the document for read access and get a reference. using (var document = WordprocessingDocument.Open(fileName, false)) { // Get a reference to the main document part. var docPart = document.MainDocumentPart; // Assign a reference to the appropriate part to the // stylesPart variable. StylesPart stylesPart = null; if (getStylesWithEffectsPart) { stylesPart = docPart.StylesWithEffectsPart; } else { stylesPart = docPart.StyleDefinitionsPart; } // If the part exists, read it into the XDocument. if (stylesPart != null) { using (var reader = XmlNodeReader.Create(stylesPart.GetStream(FileMode.Open, FileAccess.Read))) { styles = XDocument.Load(reader); } } } return(styles); }
//https://docs.microsoft.com/en-us/office/open-xml/how-to-replace-the-styles-parts-in-a-word-processing-document public static void ReplaceStylesPart(WordprocessingDocument document, XDocument newStyles, bool setStylesWithEffectsPart = false) { // Get a reference to the main document part. var docPart = document.MainDocumentPart; // Assign a reference to the appropriate part to the // stylesPart variable. StylesPart stylesPart = null; if (setStylesWithEffectsPart) { stylesPart = docPart.StylesWithEffectsPart; } else { stylesPart = docPart.StyleDefinitionsPart; } // If the part exists, populate it with the new styles. if (stylesPart == null) { return; } newStyles.Save(new StreamWriter(stylesPart.GetStream( FileMode.Create, FileAccess.Write))); //newStyles.Save(new StreamWriter(PrintController.StylesPart.GetStream( // FileMode.Create, FileAccess.Read))); }
// Extract the styles or stylesWithEffects part from a document as an XDocument instance. public static XDocument WDExtractStyles( string fileName, bool getStylesWithEffectsPart = true) { XDocument styles = null; using (var document = WordprocessingDocument.Open(fileName, false)) { var docPart = document.MainDocumentPart; StylesPart stylesPart = null; if (getStylesWithEffectsPart) { stylesPart = docPart.StylesWithEffectsPart; } else { stylesPart = docPart.StyleDefinitionsPart; } if (stylesPart != null) { using (var reader = XmlNodeReader.Create( stylesPart.GetStream(FileMode.Open, FileAccess.Read))) { // Create the XDocument: styles = XDocument.Load(reader); } } } return(styles); }
public static List <Style> GetStylesPart(string path, bool selectAll, bool getStylesWithEffectsPart = false) //выделяем из документа часть, в которой хранятся стили { StylesPart stylesPart = null; List <Style> cs = new List <Style>(); if (path != null) { using (var document = WordprocessingDocument.Open(path, false)) { var docPart = document.MainDocumentPart; if (getStylesWithEffectsPart) { stylesPart = docPart.StylesWithEffectsPart; } else { stylesPart = docPart.StyleDefinitionsPart; } foreach (Style style in stylesPart.RootElement.Elements <Style>()) { if (selectAll) //if we need all styles { cs.Add(style); } else if (style_names.LastIndexOf(style.StyleName.Val.Value) != -1) //если данный стиль есть в списке эталонных стилей { cs.Add(style); } } } } return(cs); }
private static XDocument GetStylesDoc(string path, bool getStylesWithEffectsPart = false) //выделяем из документа часть, в которой хранятся стили { XDocument styles = null; if (path != null) { using (var document = WordprocessingDocument.Open(path, false)) { var docPart = document.MainDocumentPart; StylesPart stylesPart = null; if (getStylesWithEffectsPart) { stylesPart = docPart.StylesWithEffectsPart; } else { stylesPart = docPart.StyleDefinitionsPart; } if (stylesPart != null) { using (var reader = XmlNodeReader.Create( stylesPart.GetStream(FileMode.Open, FileAccess.Read))) { styles = XDocument.Load(reader); } } } } return(styles); }
// Given a file and an XDocument instance that contains the content of // a styles or stylesWithEffects part, replace the styles in the file // with the styles in the XDocument. private void ReplaceStylesPart(string fileName, XDocument newStyles, bool setStylesWithEffectsPart) { // Open the document for write access and get a reference. using (var document = WordprocessingDocument.Open(fileName, true)) { // Get a reference to the main document part. var docPart = document.MainDocumentPart; // Assign a reference to the appropriate part to the // stylesPart variable. StylesPart stylesPart = null; if (setStylesWithEffectsPart) { stylesPart = docPart.StylesWithEffectsPart; } else { stylesPart = docPart.StyleDefinitionsPart; } // If the part exists, populate it with the new styles. if (stylesPart != null) { newStyles.Save(new StreamWriter(stylesPart.GetStream(FileMode.Create, FileAccess.Write))); } } }
private static void UpdateStylesPartForToa(WordprocessingDocument doc) { StylesPart stylesPart = doc.MainDocumentPart.StyleDefinitionsPart; if (stylesPart == null) { return; } UpdatePartForToa(stylesPart); }
private static void UpdateStylesPartForTof(WordprocessingDocument doc) { StylesPart stylesPart = doc.MainDocumentPart.StyleDefinitionsPart; if (stylesPart == null) { throw new OpenXmlPowerToolsException("Document does not contain styles part"); } XDocument stylesXDoc = stylesPart.GetXDocument(); UpdateAStylePartForTof(stylesXDoc); stylesPart.PutXDocument(); }
private void UpdateStylesPartForTof(WordprocessingDocument doc) { StylesPart stylesPart = doc.MainDocumentPart.StyleDefinitionsPart; if (stylesPart == null) { stylesPart = doc.MainDocumentPart.AddNewPart <StyleDefinitionsPart>(); } XDocument stylesXDoc = stylesPart.GetXDocument(); UpdateAStylePartForTof(stylesXDoc); stylesPart.PutXDocument(); }
private static void GenerateStylesPartContent(StylesPart stylesPart) { var styles = new DocumentFormat.OpenXml.Wordprocessing.Styles() { MCAttributes = MarkupCompatibilityAttributes }; Schemas.AddNamespaceDeclarations(styles); Styles.AddStylesDefault(styles); stylesPart.Styles = styles; }
private XDocument ExtractStylesPart(WordprocessingDocument doc) { XDocument styles = null; var docPart = doc.MainDocumentPart; StylesPart stylesPart = docPart.StyleDefinitionsPart; if (stylesPart != null) { using var reader = XmlReader.Create(stylesPart.GetStream(FileMode.Open, FileAccess.Read)); // Create the XDocument. styles = XDocument.Load(reader); } return(styles); }
//gavdcodeend 08 //gavdcodebegin 09 public static void WordOpenXmlFindStyles() { using (WordprocessingDocument myWordDoc = WordprocessingDocument.Open(@"C:\Temporary\WordDoc01.docx", false)) { MainDocumentPart docPart = myWordDoc.MainDocumentPart; StylesPart stylesPart = docPart.StyleDefinitionsPart; using (XmlReader reader = XmlNodeReader.Create( stylesPart.GetStream(FileMode.Open, FileAccess.Read))) { XDocument docStyles = XDocument.Load(reader); Console.WriteLine(docStyles); } } }
void InitDefaultFontInfo() { if (WordDocument.MainDocumentPart.StyleDefinitionsPart != null) { var defaults = WordDocument.MainDocumentPart.StyleDefinitionsPart.Styles.Descendants <DocDefaults>().FirstOrDefault(); if (defaults.RunPropertiesDefault.RunPropertiesBaseStyle.FontSize != null) { DefaultFontSize = Int32.Parse(defaults.RunPropertiesDefault.RunPropertiesBaseStyle.FontSize.Val); if (defaults.RunPropertiesDefault.RunPropertiesBaseStyle.RunFonts.HighAnsi != null) { DefaultFontName = defaults.RunPropertiesDefault.RunPropertiesBaseStyle.RunFonts.HighAnsi; } } } const string wordmlNamespace = "http://schemas.openxmlformats.org/wordprocessingml/2006/main"; XNamespace w = wordmlNamespace; StylesPart stylesPart = WordDocument.MainDocumentPart.StyleDefinitionsPart; if (stylesPart != null) { XDocument styleDoc = null; using (var reader = XmlNodeReader.Create( stylesPart.GetStream(FileMode.Open, FileAccess.Read))) { // Create the XDocument. styleDoc = XDocument.Load(reader); foreach (var style in styleDoc.Descendants(w + "style")) { var s = new Style(style.ToString()); if (s.Default == "1" && s.StyleRunProperties != null) { if (s.StyleRunProperties.FontSize != null) { DefaultFontSize = Int32.Parse(s.StyleRunProperties.FontSize.Val); } if (s.StyleRunProperties.RunFonts != null) { DefaultFontName = s.StyleRunProperties.RunFonts.HighAnsi; } break; } } } } }
private void WriteStylesheet() { CT_RPr rPr = new CT_RPr { RFonts = new CT_Fonts { Ascii_Attr = "Times New Roman", EastAsia_Attr = "Times New Roman", HAnsi_Attr = "Times New Roman", Cs_Attr = "Times New Roman" } }; CT_DocDefaults docDefaults = new CT_DocDefaults { RPrDefault = new CT_RPrDefault { RPr = rPr } }; CT_Style item = new CT_Style { Name = new CT_String { Val_Attr = "EmptyCellLayoutStyle" }, BasedOn = new CT_String { Val_Attr = "Normal" }, RPr = new CT_RPr { Sz = new CT_HpsMeasure { Val_Attr = 2.ToString(CultureInfo.InvariantCulture) } } }; StylesPart stylesPart = new StylesPart(); ((CT_Styles)stylesPart.Root).DocDefaults = docDefaults; ((CT_Styles)stylesPart.Root).Style.Add(item); _manager.WriteStaticPart(stylesPart, "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml", "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles", "word/styles.xml", _manager.GetRootPart()); }
// Given a file and an XDocument containing a full styles or stylesWithEffects part, // replace the styles in the document with the new styles. public static void WDReplaceStyles(string fileName, XDocument newStyles, bool setStylesWithEffectsPart = true) { using (var document = WordprocessingDocument.Open(fileName, true)) { var docPart = document.MainDocumentPart; StylesPart stylesPart = null; if (setStylesWithEffectsPart) { stylesPart = docPart.StylesWithEffectsPart; } else { stylesPart = docPart.StyleDefinitionsPart; } if (stylesPart != null) { newStyles.Save(new StreamWriter(stylesPart.GetStream( FileMode.Create, FileAccess.Write))); } } }
public static void LoadOpenXml(this FlowDocument doc, Stream stream) { using (WordprocessingDocument wdoc = WordprocessingDocument.Open(stream, false)) { //get default style XDocument xstyle, xdoc; StylesPart part = wdoc.MainDocumentPart.StyleDefinitionsPart; if (part == null) { //part = AddStylesPartToPackage(wdoc); xstyle = XDocument.Load(File.OpenRead("styles.xml")); } else { //using (StreamReader sr = new StreamReader(part.GetStream())) //{ xstyle = XDocument.Load(part.GetStream()); } var styles = from style in xstyle .Root .Descendants(w_style) let pPr = style .Elements(w_pPr) .FirstOrDefault() let rPr = style .Elements(w_rPr) .FirstOrDefault() select new { pStyleName = style.Attribute(w_styleId).Value, pName = style.Element(w_name).Attribute(w_val).Value, pPStyle = pPr, pRStyle = rPr }; foreach (var style in styles) { Style pStyle = style.pPStyle.ToWPFStyle(); pStyle.BasedOn = style.pRStyle.ToWPFStyle(); doc.Resources.Add(style.pStyleName, pStyle); } //} //get document using (StreamReader sr = new StreamReader(wdoc.MainDocumentPart.GetStream())) { xdoc = XDocument.Load(sr); var paragraphs = from par in xdoc .Root .Element(w_body) .Descendants(w_p) let par_style = par .Elements(w_pPr) .Elements(w_pStyle) .FirstOrDefault() let par_inline = par .Elements(w_pPr) .FirstOrDefault() let par_list = par .Elements(w_pPr) .Elements(w_numPr) .FirstOrDefault() select new { pElement = par, pStyle = par_style != null?par_style.Attribute(w_val).Value : (from d_style in xstyle .Root .Elements(w_style) where d_style.Attribute(w_type).Value == "paragraph" && d_style.Attribute(w_default).Value == "1" select d_style).First().Attribute(w_styleId).Value, pAttrs = par_inline, pRuns = par.Elements().Where(e => e.Name == w_r || e.Name == w_ins || e.Name == w_link || e.Name == w_numId || e.Name == w_numPr || e.Name == w_ilvl), pList = par_list }; foreach (var par in paragraphs) { Paragraph p = new Paragraph(); Style pStyle = par.pAttrs.ToWPFStyle(); if (par.pStyle != string.Empty) { pStyle.BasedOn = doc.Resources[par.pStyle] as Style; } p.Style = pStyle; var runs = from run in par.pRuns let run_style = run .Elements(w_rPr) .FirstOrDefault() let run_istyle = run .Elements(w_rPr) .Elements(w_rStyle) .FirstOrDefault() let run_graph = run .Elements(w_drawing) select new { pRun = run, pRunType = run.Name.LocalName, pStyle = run_istyle != null?run_istyle.Attribute(w_val).Value : string.Empty, pAttrs = run_style, pText = run.Descendants(w_t), pBB = run.Elements(w_br) != null, pExRelID = run.Name == w_link?run.Attribute(rels_id).Value : string.Empty, pGraphics = run_graph }; foreach (var run in runs) { Run r = new Run(); Style rStyle = run.pAttrs.ToWPFStyle(); if (run.pStyle != string.Empty) { rStyle.BasedOn = doc.Resources[run.pStyle] as Style; } r.Style = rStyle; r.Text = run.pText.ToString(txt => txt.Value); if (run.pRunType == "hyperlink") { ExternalRelationship er = (from rel in wdoc.MainDocumentPart.ExternalRelationships where rel.Id == run.pExRelID select rel).FirstOrDefault() as ExternalRelationship; if (er != null) { Hyperlink hl = new Hyperlink(r); hl.NavigateUri = er.Uri; p.Inlines.Add(hl); } } else { p.Inlines.Add(r); } var graphics = from graph in run.pGraphics let pBlip = graph .Descendants(a_blip) .Where(x => x.Attribute(rels_embed) != null) .FirstOrDefault() let pExtent = graph .Descendants(wp_extent) .FirstOrDefault() select new { pWidth = pExtent != null?pExtent.Attribute("cx").Value : "0", pHeight = pExtent != null?pExtent.Attribute("cy").Value : "0", pExRelID = pBlip != null?pBlip.Attribute(rels_embed).Value : string.Empty }; foreach (var graphic in graphics) { Console.WriteLine(graphic); } } if (par.pList != null) { int level = int.Parse(par.pList.Element(w_ilvl).Attribute(w_val).Value); List lst = doc.Blocks.LastBlock as List; ListItem nli = new ListItem(p); if (lst != null && lst.Tag != null && (int)lst.Tag < level) { List nlst = new List(nli); nlst.Tag = level; lst.ListItems.LastListItem.Blocks.Add(nlst); } else { lst = new List(nli); lst.Tag = level; doc.Blocks.Add(lst); } } else { doc.Blocks.Add(p); } } } } }
/// <summary> /// Saves the DOM into the OpenXML part. /// </summary> /// <param name="openXmlPart">The part to be saved to.</param> public void Save(StylesPart openXmlPart) { SaveToPart(openXmlPart); }
/// <summary> /// Loads the DOM from an OpenXML part. /// </summary> /// <param name="openXmlPart">The part to be loaded.</param> public void Load(StylesPart openXmlPart) { LoadFromPart(openXmlPart); }
/// <summary> /// Styles constructor. /// </summary> /// <param name="ownerPart">The owner part of the Styles.</param> internal Styles(StylesPart ownerPart) : base(ownerPart) { }
/// <summary> /// 複製範本頁尾 /// </summary> /// <param name="srcDocName">來源範本別名</param> /// <param name="isNewChapter">是否帶分節符號(新章節)</param> public void CopyPageFoot(string srcDocName, bool isNewChapter) { WordprocessingDocument sourceDoc = tplDoc[srcDocName]; int index = 0; //取消index參數,只抓第1個 FooterReference[] footer = sourceDoc.MainDocumentPart.RootElement.Descendants <FooterReference>().ToArray(); if (srcDocName != defTplDocName) { string newRefId = string.Format("foot_{0}", Guid.NewGuid().ToString().Substring(0, 8)); string srcRefId = footer[index].Id; footer[index].Id = newRefId; FooterPart elementFoot = sourceDoc.MainDocumentPart.FooterParts .Where( element => sourceDoc.MainDocumentPart.GetIdOfPart(element) == srcRefId ).SingleOrDefault(); outDoc.MainDocumentPart.AddPart(elementFoot, newRefId); FooterPart fp = outDoc.MainDocumentPart.FooterParts .Where( element => outDoc.MainDocumentPart.GetIdOfPart(element) == newRefId ).SingleOrDefault(); ParagraphStyleId pStyle = fp.Footer.Descendants <ParagraphStyleId>().First(); string oldStyleId = pStyle.Val; string newStyleId = string.Format("fs_{0}", Guid.NewGuid().ToString().Substring(0, 8)); pStyle.Val = newStyleId; StylesPart srcPart = sourceDoc.MainDocumentPart.StyleDefinitionsPart; Style st = srcPart.Styles.Descendants <Style>() .Where( element => element.StyleId == oldStyleId ).SingleOrDefault(); st.StyleId = newStyleId; StylesPart outPart = outDoc.MainDocumentPart.StyleDefinitionsPart; outPart.Styles.Append(st.CloneNode(true)); } if (isNewChapter) { if (footer.Length > 0) { //outBody.AppendChild(new Paragraph(new ParagraphProperties(footer[index].Parent.CloneNode(true))));//頁尾+分節符號 outBody.Append(new Paragraph(new ParagraphProperties(footer[index].Parent.CloneNode(true))));//頁尾+分節符號 } else { outBody.Append(new Paragraph(new ParagraphProperties(sourceDoc.MainDocumentPart.RootElement.Descendants <SectionProperties>().FirstOrDefault().CloneNode(true))));//沒有頁尾則copy邊界設定 } } else { if (footer.Length > 0) { outBody.AppendChild(footer[index].Parent.CloneNode(true));//頁尾 } else { outBody.AppendChild(sourceDoc.MainDocumentPart.RootElement.Descendants <SectionProperties>().FirstOrDefault().CloneNode(true));//沒有頁尾則copy邊界設定 } } }
static void Main(string[] args) { string file = "./data/word.docx"; file = "./data/DirectX_9_3D.docx"; const string ROOT = "./OUT/"; string fileMd5 = Utities.GetMd5(Path.GetFileName(file)); string docRoot = Path.Combine(new[] { ROOT, fileMd5 + "/" }); ConvertConfig config = new ConvertConfig { ResourcePath = "./" + fileMd5 + "/" }; if (!Directory.Exists(docRoot)) { Console.WriteLine("Unzip File"); UnZip un = new UnZip(); un.UnZipToDir(file, docRoot); } Console.WriteLine("Convert Word to Html"); OpenXmlHelper helper = new OpenXmlHelper(); Html.Html html = new Html.Html(); HtmlElement meta0 = new HtmlElement("meta", false); meta0.AddAttribute("http-equiv", "X-UA-Compatible"); meta0.AddAttribute("content", "IE=edge,chrome=1"); HtmlElement meta1 = new HtmlElement("meta", false); meta1.AddAttribute("name", "viewport"); meta1.AddAttribute("content", "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"); HtmlElement meta2 = new HtmlElement("meta", false); meta2.AddAttribute("name", "apple-mobile-web-app-capable"); meta2.AddAttribute("content", "yes"); HtmlElement meta3 = new HtmlElement("meta", false); meta3.AddAttribute("http-equiv", "content-type"); meta3.AddAttribute("content", "text/html; charset=UTF-8"); html.AddHeadElement(meta0); html.AddHeadElement(meta1); html.AddHeadElement(meta2); html.AddHeadElement(meta3); CSS css = new CSS(); CssStyle body = new CssStyle("body"); body.AddStyle("background-color", "gray"); CssStyle center = new CssStyle(".center"); center.AddStyle("text-align", "center"); css.AddStyle(body); //css.AddStyle(center); html.AddStyle(css); HtmlElement div = new HtmlElement("div"); HtmlAttribute divClass = new HtmlAttribute("class", "documentbody"); div.AddAttribute(divClass); CssStyle divStyle = new CssStyle(); divStyle.AddStyle("font-family", "'Times New Roman' 宋体"); divStyle.AddStyle("font-size", "10.5pt"); divStyle.AddStyle("margin", "0 auto"); divStyle.AddStyle("width", "600px"); divStyle.AddStyle("padding", "100px 120px"); divStyle.AddStyle("border", "2px solid gray"); divStyle.AddStyle("background-color", "white"); div.AddStyle(divStyle); #region docuemnt WordprocessingDocument doc = WordprocessingDocument.Open(file, false); //StyleParts StylesPart docstyles = doc.MainDocumentPart.StyleDefinitionsPart == null ? doc.MainDocumentPart.StylesWithEffectsPart : (StylesPart)doc.MainDocumentPart.StyleDefinitionsPart; var styles = docstyles.Styles; //styles var styleEl = styles.Elements <Style>(); //var i = __styles.Count(); //生产Style模版对应的CSS Style html.AddStyle(helper.GetStyles(styleEl)); var pps = doc.MainDocumentPart.Document.Body.ChildElements; ElementHandler handler = new ElementHandler(doc); //处理各个Word元素 foreach (var pp in pps) { //Console.WriteLine(pp.GetType().ToString()); div.AddChild(handler.Handle(pp, config)); } #endregion html.AddElement(div); string htmlfile = ROOT + fileMd5 + ".html"; FileStream fs = File.Exists(htmlfile) ? new FileStream(htmlfile, FileMode.Truncate, FileAccess.Write) : new FileStream(htmlfile, FileMode.CreateNew, FileAccess.Write); StreamWriter sw = new StreamWriter(fs); sw.WriteLine(html.ToString()); sw.Close(); fs.Close(); //// //XDocument _styles = null; //if (docstyles != null) //{ // using (var reader = XmlReader.Create(docstyles.GetStream(FileMode.Open, FileAccess.Read))) // { // _styles = XDocument.Load(reader); // } //} //if (_styles != null) //{ // //Console.WriteLine(_styles.ToString()); //} }