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); }
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); } } } }