예제 #1
0
        private void importoutxml(Word.Document DOC, string HtmlFileName, EPUB mEpub)
        {
            int p = 0;

            XmlDocument xml        = mEpub.getncxml();
            XmlNode     navMapNode = xml.SelectSingleNode("ncx/navMap");
            string      webfile    = HtmlFileName.Substring(HtmlFileName.LastIndexOf(@"\") + 1);

            try
            {
                object x    = DOC.GetCrossReferenceItems(Microsoft.Office.Interop.Word.WdReferenceType.wdRefTypeHeading);
                Array  strs = (Array)x;
                int    cc   = 0;
                string pstr;
                foreach (Word.Paragraph Paragr in DOC.Paragraphs)
                {
                    int level = (int)Paragr.OutlineLevel;
                    cc   = 0;
                    pstr = "";

                    if (level < 9)
                    {
                        p++;
                        try
                        {
                            Paragr.ID = "_ncx_toc_" + p.ToString();
                            string tstr = ReplaceLowOrderASCIICharacters(Paragr.Range.Text.Trim());
                            if (p == 1)
                            {
                                xml.SelectSingleNode("ncx/docTitle/text").InnerXml = tstr;
                            }

                            for (int i = 0; i < strs.Length; i++)
                            {
                                string hreadingstr = strs.GetValue(i + 1).ToString();
                                if (hreadingstr.IndexOf(tstr) >= 0)
                                {
                                    tstr = hreadingstr;
                                    cc   = hreadingstr.Length - hreadingstr.TrimStart().Length;

                                    for (int pi = i; pi >= 0; pi--)
                                    {
                                        string phreadingstr = strs.GetValue(pi + 1).ToString();
                                        int    pc           = phreadingstr.Length - phreadingstr.TrimStart().Length;
                                        if (pc < cc)
                                        {
                                            pstr = phreadingstr;
                                            break;
                                        }
                                    }
                                    break;
                                }
                            }

                            XmlElement navPointEl = xml.CreateElement("navPoint");
                            navPointEl.Prefix = Paragr.Range.ParagraphStyle.NameLocal.ToString();
                            navPointEl.SetAttribute("id", "navPoint-" + p.ToString());
                            navPointEl.SetAttribute("playOrder", p.ToString());

                            XmlElement subPoint = xml.CreateElement("navLabel");
                            subPoint.InnerXml = "<text>" + tstr.Trim() + "</text>";

                            XmlElement ConPoint = xml.CreateElement("content");
                            ConPoint.SetAttribute("src", "Text/" + mEpub.chapterName + ".xhtml#_ncx_toc_" + p.ToString());

                            navPointEl.AppendChild(subPoint);
                            navPointEl.AppendChild(ConPoint);

                            if (pstr.Length > 0)
                            {
                                for (int i = navMapNode.ChildNodes.Count - 1; i >= 0; i--)
                                {
                                    XmlElement xe = (XmlElement)navMapNode.ChildNodes[i];
                                    if (pstr.IndexOf(xe.SelectSingleNode("navLabel").SelectSingleNode("text").InnerXml) >= 0)
                                    {
                                        xe.AppendChild(navPointEl);
                                    }
                                    else
                                    {
                                        if (xe.ChildNodes.Count > 1)
                                        {
                                            foreachnode(xe, navPointEl, pstr);
                                        }
                                    }
                                }
                            }
                            else
                            {
                                navMapNode.AppendChild(navPointEl);
                            }
                        }
                        catch (Exception ex)
                        {
                            continue;
                        }
                    }
                }
            }
            catch (Exception)
            {
                return;
            }

            DOC.SaveAs(HtmlFileName, Word.WdSaveFormat.wdFormatFilteredHTML, false, "", false);
        }