private static CT_Relationships ToRelationships(Dictionary <string, string[]> htRelationShip) { if (htRelationShip == null) { return(null); } CT_Relationships relationships = new CT_Relationships { Relationship = new Dt.Xls.OOXml.Relationship[htRelationShip.Count] }; int index = 0; foreach (string str in htRelationShip.Keys) { string[] strArray = htRelationShip[str]; if ((strArray != null) && (strArray.Length >= 2)) { Dt.Xls.OOXml.Relationship relationship = new Dt.Xls.OOXml.Relationship { Id = str, Target = strArray[0], Type = strArray[1] }; if (((!relationship.Target.EndsWith(".xml") && !relationship.Target.EndsWith("png")) && (!relationship.Target.EndsWith("jpg") && !relationship.Target.EndsWith("bmp"))) && ((!relationship.Target.EndsWith("gif") && !relationship.Target.EndsWith("vml")) && (!relationship.Target.EndsWith("emf") && (relationship.Type != "http://schemas.microsoft.com/office/2006/relationships/vbaProject")))) { relationship.TargetMode = "External"; } relationships.Relationship[index] = relationship; } index++; } return(relationships); }
private static void SavePackageRelationFiles(XFile xFile, MemoryFolder mFolder) { if (((xFile != null) && (xFile.RelationFiles != null)) && ((xFile.RelationFiles.Count != 0) && (mFolder != null))) { string str = string.IsNullOrEmpty(xFile.FileName) ? "" : Path.GetDirectoryName(xFile.FileName); string str2 = string.IsNullOrEmpty(xFile.FileName) ? "" : Path.GetFileName(xFile.FileName); Dictionary <string, string[]> htRelationShip = new Dictionary <string, string[]>(); foreach (string str3 in xFile.RelationFiles.Keys) { XFile file = xFile.RelationFiles[str3]; if (file != null) { string[] strArray = new string[2]; if (!string.IsNullOrWhiteSpace(file.Target)) { strArray[0] = file.Target; } else { strArray[0] = file.FileName.Replace('\\', '/'); } strArray[1] = file.FileType; if (htRelationShip.ContainsKey(str3)) { htRelationShip[str3] = strArray; } else { htRelationShip.Add(str3, strArray); } } SavePackageRelationFiles(file, mFolder); } CT_Relationships relationships = ToRelationships(htRelationShip); if (relationships != null) { mFolder.CreateMemoryFile(str + @"\_rels\" + str2 + ".rels", PackageXml.CreateStreamFromObject(relationships, typeof(CT_Relationships))); } } }
public static Stream CreateStreamFromObject(object obj, Type type) { if (obj == null) { return(null); } Stream stream = null; if (obj is CT_Relationships) { CT_Relationships relationships = obj as CT_Relationships; stream = (Stream) new MemoryStream(); new XmlWriterSettings().Encoding = Encoding.UTF8; XmlWriter @this = XmlWriter.Create(stream, new XmlWriterSettings()); using (@this.WriteDocument(true)) { using (@this.WriteElement("Relationships", "http://schemas.openxmlformats.org/package/2006/relationships")) { foreach (Relationship relationship in relationships.Relationship) { using (@this.WriteElement("Relationship")) { @this.WriteAttributeString("Id", relationship.Id); @this.WriteAttributeString("Type", relationship.Type); @this.WriteAttributeString("Target", relationship.Target.Trim(new char[] { '\n', '\b', ' ' })); if (!string.IsNullOrWhiteSpace(relationship.TargetMode)) { @this.WriteAttributeString("TargetMode", relationship.TargetMode); } } } } } @this.Flush(); stream.Seek(0L, (SeekOrigin)SeekOrigin.Begin); return(stream); } if (obj is CT_Types) { CT_Types types = obj as CT_Types; stream = (Stream) new MemoryStream(); new XmlWriterSettings().Encoding = Encoding.UTF8; XmlWriter writer2 = XmlWriter.Create(stream, new XmlWriterSettings()); using (writer2.WriteDocument(true)) { using (writer2.WriteElement("Types", "http://schemas.openxmlformats.org/package/2006/content-types")) { foreach (object obj2 in types.Items) { if (obj2 is CT_Default) { CT_Default default2 = obj2 as CT_Default; using (writer2.WriteElement("Default")) { writer2.WriteAttributeString("ContentType", default2.ContentType); writer2.WriteAttributeString("Extension", default2.Extension); continue; } } if (obj2 is CT_Override) { CT_Override @override = obj2 as CT_Override; using (writer2.WriteElement("Override")) { writer2.WriteAttributeString("ContentType", @override.ContentType); writer2.WriteAttributeString("PartName", @override.PartName); } } } } } writer2.Flush(); stream.Seek(0L, (SeekOrigin)SeekOrigin.Begin); } return(stream); }