// 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)));
                }
            }
        }
Exemple #7
0
        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();
        }
Exemple #10
0
        private static void GenerateStylesPartContent(StylesPart stylesPart)
        {
            var styles = new DocumentFormat.OpenXml.Wordprocessing.Styles()
            {
                MCAttributes = MarkupCompatibilityAttributes
            };

            Schemas.AddNamespaceDeclarations(styles);

            Styles.AddStylesDefault(styles);

            stylesPart.Styles = styles;
        }
Exemple #11
0
        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);
        }
Exemple #12
0
        //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);
                }
            }
        }
Exemple #13
0
        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;
                        }
                    }
                }
            }
        }
Exemple #14
0
        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());
        }
Exemple #15
0
        // 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)));
                }
            }
        }
Exemple #16
0
        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)
 {
 }
Exemple #20
0
    /// <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邊界設定
            }
        }
    }
Exemple #21
0
        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());
            //}
        }