Esempio n. 1
0
        public string InitializeMyPackage(Package paquete)
        {
            string strMainPartUri = "";

            myPackage = new MyPackage();
            using (myPackage.package = paquete)
            {
                PackageRelationshipCollection relationshipCollection = myPackage.package.GetRelationships();
                myPackage.siteUrl = this.siteUrl;
                // najiti Uri pro MainPart
                foreach (PackageRelationship rel in relationshipCollection)
                {
                    if (rel.RelationshipType == Constants.Relationships.Main)
                    {
                        strMainPartUri        = rel.TargetUri.ToString();
                        myPackage.uriMainPart = new Uri(AddSlash(rel.TargetUri.ToString()), UriKind.Relative);
                        break;
                    }
                }
                int iLastSlash = strMainPartUri.LastIndexOf("/");
                myPackage.strMainPartDirectory = AddSlash(strMainPartUri.Substring(0, iLastSlash));

                if (myPackage.uriMainPart == null)
                {
                    myPackage.package.Close();

                    return(string.Empty);
                }
                if (!myPackage.package.PartExists(myPackage.uriMainPart))
                {
                    myPackage.package.Close();

                    return(string.Empty);
                }

                // Uri pro MainPart_rels
                int    iLastSlashPos   = strMainPartUri.LastIndexOf('/');
                string strRelationsUri = strMainPartUri.Insert(iLastSlashPos, "/_rels") + ".rels";
                myPackage.uriMainPart_Rels = new Uri(AddSlash(strRelationsUri), UriKind.Relative);

                // najiti Uri pro dalsi casti
                if (myPackage.package.PartExists(myPackage.uriMainPart_Rels))
                {
                    PackagePart    mainRelPart     = myPackage.package.GetPart(myPackage.uriMainPart_Rels);
                    XPathDocument  xPathDocMainRel = new XPathDocument(mainRelPart.GetStream());
                    XPathNavigator xn = xPathDocMainRel.CreateNavigator();
                    XPathNavigator xnPartPath;
                    string         strPartPath;
                    // styles
                    xnPartPath = xn.SelectSingleNode(String.Format("//*[@Type ='{0}']/@Target", Constants.Relationships.Styles));
                    if (xnPartPath != null)
                    {
                        strPartPath         = xnPartPath.ToString().Replace("/word/", string.Empty);
                        myPackage.uriStyles = new Uri(myPackage.strMainPartDirectory + AddSlash(strPartPath), UriKind.Relative);
                    }
                    // numbering
                    xnPartPath = xn.SelectSingleNode(String.Format("//*[@Type ='{0}']/@Target", Constants.Relationships.Numbering));
                    if (xnPartPath != null)
                    {
                        strPartPath            = xnPartPath.ToString().Replace("/word/", string.Empty);
                        myPackage.uriNumbering = new Uri(myPackage.strMainPartDirectory + AddSlash(strPartPath), UriKind.Relative);
                    }
                    // theme
                    xnPartPath = xn.SelectSingleNode(String.Format("//*[@Type ='{0}']/@Target", Constants.Relationships.Theme));
                    if (xnPartPath != null)
                    {
                        strPartPath        = xnPartPath.ToString().Replace("/word/", string.Empty);
                        myPackage.uriTheme = new Uri(myPackage.strMainPartDirectory + AddSlash(strPartPath), UriKind.Relative);
                    }
                    // settings
                    xnPartPath = xn.SelectSingleNode(String.Format("//*[@Type ='{0}']/@Target", Constants.Relationships.Settings));
                    if (xnPartPath != null)
                    {
                        strPartPath           = xnPartPath.ToString().Replace("/word/", string.Empty);
                        myPackage.uriSettings = new Uri(myPackage.strMainPartDirectory + AddSlash(strPartPath), UriKind.Relative);
                    }
                    // footnotes
                    xnPartPath = xn.SelectSingleNode(String.Format("//*[@Type ='{0}']/@Target", Constants.Relationships.Footnotes));
                    if (xnPartPath != null)
                    {
                        strPartPath            = xnPartPath.ToString().Replace("/word/", string.Empty);
                        myPackage.uriFootnotes = new Uri(myPackage.strMainPartDirectory + AddSlash(strPartPath), UriKind.Relative);
                    }
                    // endnotes
                    xnPartPath = xn.SelectSingleNode(String.Format("//*[@Type ='{0}']/@Target", Constants.Relationships.Endnotes));
                    if (xnPartPath != null)
                    {
                        strPartPath           = xnPartPath.ToString().Replace("/word/", string.Empty);
                        myPackage.uriEndnotes = new Uri(myPackage.strMainPartDirectory + AddSlash(strPartPath), UriKind.Relative);
                    }
                }
                DataBindStyles();
                ConvertProcess(paquete);
            }
            return(myPackage.strOutputDirectory);
        }
Esempio n. 2
0
        public Helper(MyPackage myPackage)
        {
            hMyPackage = myPackage;
            if (!myPackage.package.PartExists(myPackage.uriMainPart_Rels))
            {
                return;
            }
            // relations
            relationsPart = myPackage.package.GetPart(myPackage.uriMainPart_Rels);
            xdocRel       = new XPathDocument(relationsPart.GetStream());
            // numbering
            try
            {
                PackagePart p = myPackage.package.GetPart(myPackage.uriNumbering);
                xdocNum = new XPathDocument(p.GetStream());
            }
            catch
            {
                //Console.WriteLine("Info: Numbering part not found.");
            }
            // settings
            try
            {
                PackagePart p = myPackage.package.GetPart(myPackage.uriSettings);
                xdocSettings = new XPathDocument(p.GetStream());
            }
            catch
            {
                //Console.WriteLine("Info: Settings part not found.");
            }
            // theme
            try
            {
                PackagePart p = myPackage.package.GetPart(myPackage.uriTheme);
                xdocTheme = new XPathDocument(p.GetStream());
            }
            catch
            {
                //Console.WriteLine("Info: Theme part not found.");
            }
            // styles
            try
            {
                PackagePart p = myPackage.package.GetPart(myPackage.uriStyles);
                xdocStyles = new XPathDocument(p.GetStream());
            }
            catch
            {
                //Console.WriteLine("Info: Styles part not found.");
            }
            // footnotes
            try
            {
                PackagePart p = myPackage.package.GetPart(myPackage.uriFootnotes);
                xdocFootnotes = new XPathDocument(p.GetStream());
            }
            catch
            {
                //Console.WriteLine("Info: Footnotes part not found.");
            }
            // endnotes
            try
            {
                PackagePart p = myPackage.package.GetPart(myPackage.uriEndnotes);
                xdocEndnotes = new XPathDocument(p.GetStream());
            }
            catch
            {
                //Console.WriteLine("Info: Endnotes part not found.");
            }

            XPathNavigator xNavStyles = xdocStyles.CreateNavigator();

            if (xNavStyles != null)
            {
                // ziskani defaultnich stylu ... to nechapu, proc je nectu az pri transformaci styles.xml
                XmlNamespaceManager xMan = new XmlNamespaceManager(xNavStyles.NameTable);
                xMan.AddNamespace("w", Constants.NameSpaces.W);
                XPathNavigator xeParagraph = xNavStyles.SelectSingleNode("//w:style[@w:type = 'paragraph' and @w:default='1'][1]", xMan);
                XPathNavigator xeRun       = xNavStyles.SelectSingleNode("//w:style[@w:type = 'character' and @w:default='1'][1]", xMan);
                XPathNavigator xeTable     = xNavStyles.SelectSingleNode("//w:style[@w:type = 'table' and @w:default='1'][1]", xMan);
                XPathNavigator xeNumbering = xNavStyles.SelectSingleNode("//w:style[@w:type = 'numbering' and @w:default='1'][1]", xMan);
                if (xeParagraph != null)
                {
                    DefaultStyleParagraph = xeParagraph.GetAttribute("styleId", Constants.NameSpaces.W);
                }
                if (xeRun != null)
                {
                    DefaultStyleRun = xeRun.GetAttribute("styleId", Constants.NameSpaces.W);
                }
                if (xeTable != null)
                {
                    DefaultStyleTable = xeTable.GetAttribute("styleId", Constants.NameSpaces.W);
                }
                if (xeNumbering != null)
                {
                    DefaultStyleNumbering = xeNumbering.GetAttribute("styleId", Constants.NameSpaces.W);
                }
                // získání stylù s èíslováním
                if (xdocNum != null)
                {
                    dtNumberedStyles = new DataTable();
                    dtNumberedStyles.Columns.Add(new DataColumn("numId"));
                    dtNumberedStyles.Columns.Add(new DataColumn("styleId"));
                    dtNumberedStyles.Columns.Add(new DataColumn("level", typeof(int)));
                    dtNumberedStyles.Columns.Add(new DataColumn("counter", typeof(int)));
                    dtNumberedStyles.PrimaryKey = new DataColumn[] { dtNumberedStyles.Columns["styleId"] };
                    //dtNumberedStyles.PrimaryKey = new DataColumn[] { dtNumberedStyles.Columns["numId"], dtNumberedStyles.Columns["styleId"],dtNumberedStyles.Columns["level"]};
                    XPathNavigator    xNavNumb = xdocNum.CreateNavigator();
                    XPathNodeIterator xniStylesWithNumbering = xNavStyles.Select("//w:style[w:pPr/w:numPr/w:numId]", xMan);
                    foreach (XPathNavigator xe in xniStylesWithNumbering)
                    {
                        string         strStyleId      = xe.GetAttribute("styleId", Constants.NameSpaces.W);
                        string         strNumId        = xe.SelectSingleNode("w:pPr/w:numPr/w:numId/@w:val", xMan).ToString();
                        XPathNavigator xNavNumInstance = xNavNumb.SelectSingleNode(String.Format("/w:numbering/w:num[@w:numId='{0}']", strNumId), xMan);
                        if (xNavNumInstance == null)
                        {
                            // numbering with this numId not defined
                            continue;
                        }
                        string         strAbstractNumId = xNavNumInstance.SelectSingleNode("w:abstractNumId/@w:val", xMan).ToString();
                        XPathNavigator xpnNumFmt        = xNavNumb.SelectSingleNode(String.Format("/w:numbering/w:abstractNum[@w:abstractNumId='{0}']/w:lvl[@w:ilvl='0']/w:numFmt/@w:val", strAbstractNumId), xMan);
                        string         strNumFmt        = "";
                        if (xpnNumFmt != null)
                        {
                            strNumFmt = xpnNumFmt.ToString();
                        }
                        XPathNavigator xpnLevel = xe.SelectSingleNode("w:pPr/w:numPr/w:ilvl/@w:val", xMan);
                        int            iLevel;
                        if (xpnLevel == null)
                        {
                            iLevel = 0;
                        }
                        else
                        {
                            iLevel = Convert.ToInt16(xpnLevel.ToString());
                        }
                        DataRow dr = dtNumberedStyles.NewRow();
                        dr["numId"]   = strNumId;
                        dr["styleId"] = strStyleId;
                        dr["level"]   = iLevel;
                        if (strNumFmt == "bullet")
                        {
                            dr["counter"] = -1;
                        }
                        else
                        {
                            dr["counter"] = 0;
                        }
                        dtNumberedStyles.Rows.Add(dr);
                    }
                }
            }
        }