Beispiel #1
0
        private void GetSolutionFiles(string selectedPath, out XDocument docSolution, out XDocument docCustomizations)
        {
            docSolution       = null;
            docCustomizations = null;

            using (FileStream fileStream = new FileStream(selectedPath, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                using (ZipPackage package = (ZipPackage)ZipPackage.Open(fileStream, FileMode.Open, FileAccess.Read))
                {
                    {
                        ZipPackagePart part = (ZipPackagePart)package.GetPart(new Uri("/solution.xml", UriKind.Relative));

                        if (part != null)
                        {
                            using (Stream streamPart = part.GetStream(FileMode.Open, FileAccess.Read))
                            {
                                docSolution = XDocument.Load(streamPart);
                            }
                        }
                    }

                    {
                        ZipPackagePart part = (ZipPackagePart)package.GetPart(new Uri("/customizations.xml", UriKind.Relative));

                        if (part != null)
                        {
                            using (Stream streamPart = part.GetStream(FileMode.Open, FileAccess.Read))
                            {
                                docCustomizations = XDocument.Load(streamPart);
                            }
                        }
                    }
                }
            }
        }
Beispiel #2
0
        public static string GetApplicationRibbonDiffXmlFromSolutionBody(byte[] fileBody)
        {
            string result = string.Empty;

            using (var memStream = new MemoryStream())
            {
                memStream.Write(fileBody, 0, fileBody.Length);

                using (ZipPackage package = (ZipPackage)ZipPackage.Open(memStream, FileMode.Open, FileAccess.ReadWrite))
                {
                    ZipPackagePart part = (ZipPackagePart)package.GetPart(new Uri("/customizations.xml", UriKind.Relative));

                    if (part != null)
                    {
                        XDocument doc = null;

                        using (Stream streamPart = part.GetStream(FileMode.Open, FileAccess.Read))
                        {
                            doc = XDocument.Load(streamPart);
                        }

                        var ribbonDiffXml = doc.XPathSelectElement("ImportExportXml/RibbonDiffXml");

                        if (ribbonDiffXml != null)
                        {
                            result = ribbonDiffXml.ToString();
                        }
                    }
                }
            }

            return(result);
        }
Beispiel #3
0
        internal static XmlTextReader GetPartAsXmlReader(ZipPackage package, string uriString)
        {
            // HACK: just make it work...
            if (!uriString.StartsWith("/"))
            {
                uriString = "/" + uriString;
            }

            // Documents with relative uri exists.
            if (uriString.StartsWith("/.."))
            {
                uriString = uriString.Substring(3);
            }

            ZipPackagePart part = package.GetPart(new Uri(uriString, UriKind.Relative)) as ZipPackagePart;
            string         xml  = String.Empty;

            using (Stream stream = part.GetStream())
            {
                using (StreamReader sr = new StreamReader(stream))
                {
                    xml = sr.ReadToEnd();
                }
            }
            XmlTextReader reader = new XmlTextReader(new StringReader(xml));

            return(reader);
        }
        internal static void LoadCrtx(Stream stream, out XmlDocument chartXml, out XmlDocument styleXml, out XmlDocument colorsXml, out ZipPackagePart themePart, string fileName)
        {
            chartXml  = null;
            styleXml  = null;
            colorsXml = null;
            themePart = null;
            try
            {
                ZipPackage p = new ZipPackage(stream);

                var chartRel = p.GetRelationshipsByType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument").FirstOrDefault();
                if (chartRel != null)
                {
                    var chartPart = p.GetPart(chartRel.TargetUri);
                    chartXml = new XmlDocument();
                    chartXml.Load(chartPart.GetStream());
                    var rels = chartPart.GetRelationships();
                    foreach (var rel in rels)
                    {
                        var part = p.GetPart(UriHelper.ResolvePartUri(rel.SourceUri, rel.TargetUri));
                        switch (rel.RelationshipType)
                        {
                        case ExcelPackage.schemaThemeOverrideRelationships:
                            themePart = part;
                            break;

                        case ExcelPackage.schemaChartStyleRelationships:
                            styleXml = new XmlDocument();
                            styleXml.Load(part.GetStream());
                            break;

                        case ExcelPackage.schemaChartColorStyleRelationships:
                            colorsXml = new XmlDocument();
                            colorsXml.Load(part.GetStream());
                            break;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw new InvalidDataException($"{fileName} has an invalid format", ex);
            }
        }
Beispiel #5
0
        private void FinishHeaderOrFooter()
        {
            if (_currentPart.Writer.Location == _currentPart.StartingLocation)
            {
                OpenXmlParagraphModel.WriteInvisibleParagraph(_currentPart.Writer.TextWriter);
            }
            WriteCloseTag(_currentPart.Part.Tag);
            Stream stream = ZipPackage.GetPart(new Uri(PartManager.CleanName(_currentPart.PartName), UriKind.Relative)).GetStream();

            _currentPart.Writer.Interleave(stream, WriteInterleaverToHeaderOrFooter);
            _currentPart.Stream.Dispose();
            _currentPart = _documentPart;
        }
Beispiel #6
0
        /// <summary>
        /// Loads a .thmx file as a stream. Thmx files are exported from a Spread Sheet Application like Excel
        /// </summary>
        /// <param name="thmxStream">The thmx file as a stream</param>
        public void Load(Stream thmxStream)
        {
            ZipPackage p = new ZipPackage(thmxStream);

            var themeManagerRel = p.GetRelationshipsByType("http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument").FirstOrDefault();

            if (themeManagerRel != null)
            {
                var themeManager = p.GetPart(themeManagerRel.TargetUri);
                var themeRel     = themeManager.GetRelationshipsByType(ExcelPackage.schemaThemeRelationships).FirstOrDefault();
                if (themeRel != null)
                {
                    var themePart = p.GetPart(UriHelper.ResolvePartUri(themeRel.SourceUri, themeRel.TargetUri));
                    var themeXml  = new XmlDocument();
                    XmlHelper.LoadXmlSafe(themeXml, themePart.GetStream());
                    Load(themeXml);
                    foreach (var rel in themePart.GetRelationships())
                    {
                        var partToCopy = p.GetPart(UriHelper.ResolvePartUri(rel.SourceUri, rel.TargetUri));
                        var uri        = UriHelper.ResolvePartUri(_theme.ThemeUri, rel.TargetUri);
                        var part       = _wb._package.ZipPackage.CreatePart(uri, partToCopy.ContentType);
                        var stream     = part.GetStream();
                        var b          = partToCopy.GetStream().ToArray();
                        stream.Write(b, 0, b.Length);
                        stream.Flush();
                        _theme.Part.CreateRelationship(uri, TargetMode.Internal, rel.RelationshipType);
                    }
                    SetNormalStyle();
                }
                else
                {
                    throw new InvalidDataException("Thmx file is corrupt. Can't find theme part");
                }
            }
            else
            {
                throw new InvalidDataException("Thmx file is corrupt.");
            }
        }
Beispiel #7
0
        internal void Save()
        {
            _sectionProperties.WriteToBody(_currentPart.Writer.TextWriter, _currentHeaderFooterReferences);
            _firstSection = true;
            _sectionProperties.Continuous = false;
            WriteCloseTag(CT_Document.BodyElementName);
            WriteCloseTag(_currentPart.Part.Tag);
            Stream stream = ZipPackage.GetPart(new Uri(PartManager.CleanName(_currentPart.PartName), UriKind.Relative)).GetStream();

            _currentPart.Writer.Interleave(stream, WriteInterleaverToDocument);
            WriteNumberingPart();
            _manager.Write();
        }
Beispiel #8
0
        public static byte[] ReplaceApplicationRibbonDiffXmlInSolutionBody(byte[] solutionBodyBinary, XElement newRibbonDiffXml)
        {
            using (var memStream = new MemoryStream())
            {
                memStream.Write(solutionBodyBinary, 0, solutionBodyBinary.Length);

                using (ZipPackage package = (ZipPackage)ZipPackage.Open(memStream, FileMode.Open, FileAccess.ReadWrite))
                {
                    ZipPackagePart part = (ZipPackagePart)package.GetPart(new Uri("/customizations.xml", UriKind.Relative));

                    if (part != null)
                    {
                        XDocument doc = null;

                        using (Stream streamPart = part.GetStream(FileMode.Open, FileAccess.Read))
                        {
                            doc = XDocument.Load(streamPart);
                        }

                        var ribbonDiffXml = doc.XPathSelectElement("ImportExportXml/RibbonDiffXml");

                        if (ribbonDiffXml != null)
                        {
                            ribbonDiffXml.ReplaceWith(newRibbonDiffXml);
                        }

                        using (Stream streamPart = part.GetStream(FileMode.Create, FileAccess.Write))
                        {
                            XmlWriterSettings settings = new XmlWriterSettings
                            {
                                OmitXmlDeclaration = true,
                                Indent             = true,
                                Encoding           = Encoding.UTF8
                            };

                            using (XmlWriter xmlWriter = XmlWriter.Create(streamPart, settings))
                            {
                                doc.Save(xmlWriter);
                                xmlWriter.Flush();
                            }
                        }
                    }
                }

                memStream.Position = 0;
                byte[] result = memStream.ToArray();

                return(result);
            }
        }
Beispiel #9
0
 /// <summary>
 /// User selected to SAVE the selected open part
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void toolStripButton3_Click(object sender, EventArgs e)
 {
     // open the package
     using (ZipPackage LobjZip = (ZipPackage)ZipPackage.Open(MstrPath, FileMode.Open, FileAccess.ReadWrite))
     {
         string         LstrUri    = label1.Text;
         ZipPackagePart LobjPart   = (ZipPackagePart)LobjZip.GetPart(new Uri(LstrUri, UriKind.Relative));
         Stream         LobjStream = LobjPart.GetStream(FileMode.Open, FileAccess.ReadWrite);
         LobjStream.SetLength(0);
         LobjStream.Flush();
         StreamWriter LobjSw = new StreamWriter(LobjStream);
         LobjSw.Write(lineNumberTextBox1.Text);
         LobjSw.Close();
     }
     toolStripButton3.Enabled = false;
 }
Beispiel #10
0
        /// <summary>
        /// Gets an XML reader for the specified part, or null, if the part not exists.
        /// </summary>
        static XmlTextReader GetPartAsXmlReader(ZipPackage package, Uri uri)
        {
            ZipPackagePart part = package.GetPart(uri) as ZipPackagePart;
            string         xml  = String.Empty;

            using (Stream stream = part.GetStream())
            {
                using (StreamReader sr = new StreamReader(stream))
                {
                    xml = sr.ReadToEnd();
                }
            }
            XmlTextReader reader = new XmlTextReader(new StringReader(xml));

            return(reader);
        }
        internal void ResetRecordXml(ZipPackage pck)
        {
            var cacheRecord = new XmlDocument();

            cacheRecord.LoadXml("<pivotCacheRecords xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" count=\"0\" />");
            ZipPackagePart recPart;

            if (pck.PartExists(CacheRecordUri))
            {
                recPart = pck.GetPart(CacheRecordUri);
            }
            else
            {
                recPart = pck.CreatePart(CacheRecordUri, ExcelPackage.schemaPivotCacheRecords);
            }
            cacheRecord.Save(recPart.GetStream(FileMode.Create, FileAccess.Write));
        }
Beispiel #12
0
        private void ImportPartOfPackage(ZipPackage package, string partName)
        {
            Uri partUri = new Uri(partName, UriKind.Relative);

            if (package.PartExists(partUri))
            {
                var part   = (ZipPackagePart)package.GetPart(partUri);
                var stream = part.GetStream();
                if (stream.Length > 0)
                {
                    using (var reader = new XmlTextReader(stream))
                    {
                        ImportStream(package, reader);
                    }
                }
            }
        }
Beispiel #13
0
        private void GetSection1M(byte[] dataMashupBytes)
        {
            //Only reading section1.M from packaging parts
            int packagingPartsLength = BitConverter.ToUInt16(dataMashupBytes.Skip(4).Take(4).ToArray(), 0);

            byte[] packagingPartsBytes = dataMashupBytes.Skip(8).Take(packagingPartsLength).ToArray();

            using (MemoryStream packagingPartsStream = new MemoryStream(packagingPartsBytes))
            {
                var            packagingParts = new ZipPackage(packagingPartsStream);
                ZipPackagePart section1M      = packagingParts.GetPart(new Uri("/Formulas/Section1.m", UriKind.Relative));
                if (section1M == null)
                {
                    return;
                }
                using (var reader = new StreamReader(section1M.GetStream())) PowerQueryFormulas = reader.ReadToEnd();
            }
        }
Beispiel #14
0
        public static string GetRibbonDiffXmlForEntityFromSolutionBody(string entityName, byte[] fileBody)
        {
            string result = string.Empty;

            using (var memStream = new MemoryStream())
            {
                memStream.Write(fileBody, 0, fileBody.Length);

                using (ZipPackage package = (ZipPackage)ZipPackage.Open(memStream, FileMode.Open, FileAccess.ReadWrite))
                {
                    ZipPackagePart part = (ZipPackagePart)package.GetPart(new Uri("/customizations.xml", UriKind.Relative));

                    if (part != null)
                    {
                        XDocument doc = null;

                        using (Stream streamPart = part.GetStream(FileMode.Open, FileAccess.Read))
                        {
                            doc = XDocument.Load(streamPart);
                        }

                        var nodes = doc.XPathSelectElements("ImportExportXml/Entities/Entity");

                        foreach (var item in nodes)
                        {
                            var elementName = item.Element("Name");

                            if (elementName != null && string.Equals(elementName.Value, entityName, StringComparison.InvariantCultureIgnoreCase))
                            {
                                var ribbonDiffXml = item.Element("RibbonDiffXml");

                                if (ribbonDiffXml != null)
                                {
                                    result = ribbonDiffXml.ToString();
                                    break;
                                }
                            }
                        }
                    }
                }
            }

            return(result);
        }
Beispiel #15
0
        public static byte[] UnzipCrmTranslations(byte[] data, string filepath)
        {
            using (MemoryStream memStream = new MemoryStream())
            {
                memStream.Write(data, 0, data.Length);

                using (ZipPackage package = (ZipPackage)ZipPackage.Open(memStream, FileMode.Open))
                {
                    ZipPackagePart part = (ZipPackagePart)package.GetPart(new Uri(filepath, UriKind.Relative));

                    using (Stream strm = part.GetStream())
                    {
                        long   len  = strm.Length;
                        byte[] buff = new byte[len];
                        strm.Read(buff, 0, (int)len);
                        return(buff);
                    }
                }
            }
        }
        public static byte[] UnzipRibbon(byte[] data)
        {
            using (var memStream = new MemoryStream())
            {
                memStream.Write(data, 0, data.Length);

                using (ZipPackage package = (ZipPackage)ZipPackage.Open(memStream, FileMode.Open))
                {
                    ZipPackagePart part = (ZipPackagePart)package.GetPart(new Uri("/RibbonXml.xml", UriKind.Relative));

                    using (Stream strm = part.GetStream())
                    {
                        long   len  = strm.Length;
                        byte[] buff = new byte[len];
                        strm.Read(buff, 0, (int)len);
                        return(buff);
                    }
                }
            }
        }
        private static void ReadPartOfPackage(ZipPackage package, string partName, Action <XmlReader> partsReader)
        {
            Uri partUri = new Uri(partName, UriKind.Relative);

            if (!package.PartExists(partUri))
            {
                return;
            }
            var part   = (ZipPackagePart)package.GetPart(partUri);
            var stream = part.GetStream();

            if (stream.Length == 0)
            {
                return;
            }

            using (var reader = new XmlTextReader(stream))
            {
                partsReader(reader);
            }
        }
Beispiel #18
0
        internal static byte[] GetPartAsBytes(ZipPackage package, string uriString)
        {
            Uri target = new Uri(uriString, UriKind.Relative);

            if (!uriString.StartsWith("/"))
            {
                //target = PackUriHelper.ResolvePartUri(package.t.GetRelationship Uri("/documents2/3/Pages", UriKind.RelativeOrAbsolute), target);
                //PackagePartCollection coll = package.GetParts();
                // HACK: introduce a "CurrentPart"
                target = PackUriHelper.ResolvePartUri(new Uri("/documents/1/Pages/1.page", UriKind.RelativeOrAbsolute), target);
            }
            ZipPackagePart part = package.GetPart(target) as ZipPackagePart;

            byte[] bytes = null;
            using (Stream stream = part.GetStream())
            {
                int length = (int)stream.Length;
                bytes = new byte[length];
                stream.Read(bytes, 0, length);
            }
            return(bytes);
        }
Beispiel #19
0
        /// <summary>
        /// User clicked EXPORT to export a part
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolStripButton5_Click(object sender, EventArgs e)
        {
            // get the filename for the part
            string LstrFn = label1.Text.Substring(label1.Text.LastIndexOf('/')).Replace("/", "");
            // ask the user
            SaveFileDialog LobjSfd = new SaveFileDialog();

            LobjSfd.Filter           = "All Files (*.*)|*.*";
            LobjSfd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            LobjSfd.FileName         = LobjSfd.InitialDirectory + "\\" + LstrFn;
            if (LobjSfd.ShowDialog() == System.Windows.Forms.DialogResult.Cancel)
            {
                return;
            }

            // open the package
            using (ZipPackage LobjZip = (ZipPackage)ZipPackage.Open(MstrPath, FileMode.Open, FileAccess.Read))
            {
                if (new FileInfo(LobjSfd.FileName).Exists)
                {
                    new FileInfo(LobjSfd.FileName).Delete();
                }

                // get the uri
                string LstrUri = label1.Text;
                // grab the part
                ZipPackagePart LobjPart = (ZipPackagePart)LobjZip.GetPart(new Uri(LstrUri, UriKind.Relative));
                // write the part to disk
                StreamReader LobjSr = new StreamReader(LobjPart.GetStream(FileMode.Open, FileAccess.Read));
                BinaryWriter LobjSw = new BinaryWriter(new FileInfo(LobjSfd.FileName).Create());
                while (!LobjSr.EndOfStream)
                {
                    LobjSw.Write(LobjSr.Read());
                }
                LobjSw.Close();
                LobjSr.Close();
            }
        }
Beispiel #20
0
        internal static byte[] GetPartAsBytes(ZipPackage package, string uriString)
        {
            Uri target = new Uri(uriString, UriKind.Relative);

#if true
            if (!uriString.StartsWith("/"))
            {
                //target = PackUriHelper.ResolvePartUri(package.t.GetRelationship Uri("/documents2/3/Pages", UriKind.RelativeOrAbsolute), target);
                //PackagePartCollection coll = package.GetParts();
                // HACK: introduce a "CurrentPart"
                target = PackUriHelper.ResolvePartUri(new Uri("/documents/1/Pages/1.page", UriKind.RelativeOrAbsolute), target);
            }
#else
            // HACK: just make it go...
            if (!uriString.StartsWith("/"))
            {
                uriString = "/" + uriString;
            }

            // Documents with relative uri exists.
            if (uriString.StartsWith("/.."))
            {
                uriString = uriString.Substring(3);
            }
#endif
            ZipPackagePart part = package.GetPart(target) as ZipPackagePart;

            byte[] bytes = null;
            using (Stream stream = part.GetStream())
            {
                int length = (int)stream.Length;
                bytes = new byte[length];
                stream.Read(bytes, 0, length);
            }
            return(bytes);
        }
Beispiel #21
0
        /// <summary>
        /// Gets the specified part as string. Returns an empty string if the part not exists.
        /// </summary>
        static string GetPartAsString(ZipPackage package, Uri uri)
        {
            ZipPackagePart part = package.GetPart(uri) as ZipPackagePart;
            string         xml  = String.Empty;

            using (Stream stream = part.GetStream())
            {
                using (StreamReader sr = new StreamReader(stream))
                {
                    xml = sr.ReadToEnd();
#if true_
                    string xmlPath = IOPath.Combine(IOPath.GetDirectoryName(xpsFilename), IOPath.GetFileNameWithoutExtension(xpsFilename)) + ".xml";
                    using (StreamWriter sw = new StreamWriter(xmlPath))
                    {
                        sw.Write(xml);
                    }
#endif
                    //XpsElement el = PdfSharp.Xps.Parsing.XpsParser.Parse(xml);
                    //PdfRenderer renderer = new PdfRenderer();
                    //renderer.RenderPage(page, el as PdfSharp.Xps.XpsModel.FixedPage);
                }
            }
            return(xml);
        }
Beispiel #22
0
        /// <summary>
        /// A first hack to do the job...
        /// </summary>
        public static void RenderPage_Test01(PdfPage page, string xpsFilename)
        {
            //XpsDocument xpsdoc = new XpsDocument(xpsFilename, System.IO.FileAccess.Read);
            //FixedDocument fds = xpsdoc.GetFixedDocument();
            //DocumentReferenceCollection docrefs = fds.References;
            //DocumentReference docref = docrefs[0];
            //Uri uri1 = docref.Source;
            //FixedDocument fixeddoc = docref.GetDocument(false);
            //PageContent content = fixeddoc.Pages[0];
            //Uri uri2 = content.Source;
            //FixedPage fixedPage = content.Child;
            //xpsdoc.Close();
            // /Documents/1/Pages/1.fpage

            try
            {
#if true
                XpsDocument doc   = XpsDocument.Open(xpsFilename);
                FixedPage   fpage = doc.GetDocument().GetFixedPage(0);

                //ZipPackage pack = ZipPackage.Open(xpsFilename) as ZipPackage;
                Uri            uri  = new Uri("/Documents/1/Pages/1.fpage", UriKind.Relative);
                ZipPackagePart part = doc.Package.GetPart(uri) as ZipPackagePart;
                using (Stream stream = part.GetStream())
                {
                    using (StreamReader sr = new StreamReader(stream))
                    {
                        string xml = sr.ReadToEnd();
#if true
                        string xmlPath = IOPath.Combine(IOPath.GetDirectoryName(xpsFilename), IOPath.GetFileNameWithoutExtension(xpsFilename)) + ".xml";
                        using (StreamWriter sw = new StreamWriter(xmlPath))
                        {
                            sw.Write(xml);
                        }
#endif
                        DocumentRenderingContext context = new DocumentRenderingContext(page.Owner);
                        //XpsElement el = PdfSharp.Xps.Parsing.XpsParser.Parse(xml);
                        PdfRenderer renderer = new PdfRenderer();
                        renderer.RenderPage(page, fpage);
                    }
                }
#else
                ZipPackage     pack = ZipPackage.Open(xpsFilename) as ZipPackage;
                Uri            uri  = new Uri("/Documents/1/Pages/1.fpage", UriKind.Relative);
                ZipPackagePart part = pack.GetPart(uri) as ZipPackagePart;
                using (Stream stream = part.GetStream())
                {
                    using (StreamReader sr = new StreamReader(stream))
                    {
                        string xml = sr.ReadToEnd();
#if true
                        string xmlPath = IOPath.Combine(IOPath.GetDirectoryName(xpsFilename), IOPath.GetFileNameWithoutExtension(xpsFilename)) + ".xml";
                        using (StreamWriter sw = new StreamWriter(xmlPath))
                        {
                            sw.Write(xml);
                        }
#endif
                        XpsElement  el       = PdfSharp.Xps.Parsing.XpsParser.Parse(xml);
                        PdfRenderer renderer = new PdfRenderer();
                        renderer.RenderPage(page, el as PdfSharp.Xps.XpsModel.FixedPage);
                    }
                }
#endif
            }
            catch
            {
                //DaSt :
            }
        }
Beispiel #23
0
        public static byte[] ReplaceRibbonDiffXmlForEntityInSolutionBody(string entityLogicalName, byte[] solutionBodyBinary, XElement newRibbonDiffXml)
        {
            using (var memStream = new MemoryStream())
            {
                memStream.Write(solutionBodyBinary, 0, solutionBodyBinary.Length);

                using (ZipPackage package = (ZipPackage)ZipPackage.Open(memStream, FileMode.Open, FileAccess.ReadWrite))
                {
                    ZipPackagePart part = (ZipPackagePart)package.GetPart(new Uri("/customizations.xml", UriKind.Relative));

                    if (part != null)
                    {
                        XDocument doc = null;

                        using (Stream streamPart = part.GetStream(FileMode.Open, FileAccess.Read))
                        {
                            doc = XDocument.Load(streamPart);
                        }

                        var nodes = doc.XPathSelectElements("ImportExportXml/Entities/Entity");

                        foreach (var item in nodes)
                        {
                            var elementName = item.Element("Name");

                            if (elementName != null && string.Equals(elementName.Value, entityLogicalName, StringComparison.InvariantCultureIgnoreCase))
                            {
                                var ribbonDiffXml = item.Element("RibbonDiffXml");

                                if (ribbonDiffXml != null)
                                {
                                    ribbonDiffXml.ReplaceWith(newRibbonDiffXml);
                                }

                                break;
                            }
                        }

                        using (Stream streamPart = part.GetStream(FileMode.Create, FileAccess.Write))
                        {
                            XmlWriterSettings settings = new XmlWriterSettings
                            {
                                OmitXmlDeclaration = true,
                                Indent             = true,
                                Encoding           = Encoding.UTF8
                            };

                            using (XmlWriter xmlWriter = XmlWriter.Create(streamPart, settings))
                            {
                                doc.Save(xmlWriter);
                                xmlWriter.Flush();
                            }
                        }
                    }
                }

                memStream.Position = 0;
                byte[] result = memStream.ToArray();

                return(result);
            }
        }
Beispiel #24
0
        private byte[] OverrideSolutionInformation(byte[] fileBody, ExportSolutionOverrideInformation solutionInfo)
        {
            using (var memStream = new MemoryStream())
            {
                memStream.Write(fileBody, 0, fileBody.Length);

                using (ZipPackage package = (ZipPackage)ZipPackage.Open(memStream, FileMode.Open, FileAccess.ReadWrite))
                {
                    ZipPackagePart part = (ZipPackagePart)package.GetPart(new Uri("/solution.xml", UriKind.Relative));

                    if (part != null)
                    {
                        XDocument doc = null;

                        using (Stream streamPart = part.GetStream(FileMode.Open, FileAccess.Read))
                        {
                            doc = XDocument.Load(streamPart);
                        }

                        if (solutionInfo.OverrideNameAndVersion)
                        {
                            if (!string.IsNullOrEmpty(solutionInfo.UniqueName))
                            {
                                var uniqueNameNode = doc.XPathSelectElement("ImportExportXml/SolutionManifest/UniqueName");

                                if (uniqueNameNode != null)
                                {
                                    uniqueNameNode.Value = solutionInfo.UniqueName;
                                }
                            }

                            if (!string.IsNullOrEmpty(solutionInfo.DisplayName))
                            {
                                var labelNode = doc.XPathSelectElements("ImportExportXml/SolutionManifest/LocalizedNames/LocalizedName");

                                if (labelNode.Any())
                                {
                                    foreach (var node in labelNode)
                                    {
                                        node.SetAttributeValue("description", solutionInfo.DisplayName);
                                    }
                                }
                            }

                            if (!string.IsNullOrEmpty(solutionInfo.Version))
                            {
                                var versionNode = doc.XPathSelectElement("ImportExportXml/SolutionManifest/Version");

                                if (versionNode != null)
                                {
                                    versionNode.Value = solutionInfo.Version;
                                }
                            }
                        }

                        if (solutionInfo.OverrideDescription)
                        {
                            var labelNode = doc.XPathSelectElements("ImportExportXml/SolutionManifest/Descriptions/Description");

                            if (labelNode.Any())
                            {
                                foreach (var node in labelNode)
                                {
                                    node.SetAttributeValue("description", solutionInfo.Description);
                                }
                            }
                        }

                        using (Stream streamPart = part.GetStream(FileMode.Create, FileAccess.Write))
                        {
                            XmlWriterSettings settings = new XmlWriterSettings
                            {
                                OmitXmlDeclaration = true,
                                Indent             = true,
                                Encoding           = Encoding.UTF8
                            };

                            using (XmlWriter xmlWriter = XmlWriter.Create(streamPart, settings))
                            {
                                doc.Save(xmlWriter);
                                xmlWriter.Flush();
                            }
                        }
                    }
                }

                memStream.Position = 0;
                byte[] result = memStream.ToArray();

                return(result);
            }
        }
Beispiel #25
0
        /// <summary>
        /// The user clicked a node inthe TreeView
        /// </summary>
        /// <param name="PobjSender"></param>
        /// <param name="PobjEventArgs"></param>
        private void treeView1_AfterSelect_1(object PobjSender, TreeViewEventArgs PobjEventArgs)
        {
            if (MbolInSelect)
            {
                return;
            }

            // is the document dirty? And are we on the Edit tab
            if (toolStripButton3.Enabled && tabControl1.SelectedTab == tabPage2)
            {
                DialogResult LobjDr = MessageBox.Show("Are you sure you want to switch? \n\n" +
                                                      "The currently loaded part [" + label1.Text + "] has not been saved.",
                                                      "Save Loaded Part",
                                                      MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
                if (LobjDr == DialogResult.Yes)
                {
                    toolStripButton3_Click(null, null);
                }
                else if (LobjDr == System.Windows.Forms.DialogResult.Cancel)
                {
                    MbolInSelect           = true;
                    treeView1.SelectedNode = MobjPreviousNode;
                    MbolInSelect           = false;
                    return;
                }
            }

            // reset the form
            MobjPreviousNode.BackColor = SystemColors.Window;
            MobjPreviousNode           = PobjEventArgs.Node;
            MobjPreviousNode.BackColor = SystemColors.MenuHighlight;
            lineNumberTextBox1.Text    = "";
            webBrowser1.DocumentText   = "";
            toolStripButton3.Enabled   = false;
            toolStripButton4.Enabled   = false;
            label1.Text = PobjEventArgs.Node.FullPath.Substring(1).Replace("\\", "/");
            toolStripButton5.Enabled = true; // always allow export

            // determine the PART type - if it is not VML or XML, then do not try to
            // read it.
            if (!PobjEventArgs.Node.FullPath.ToLower().EndsWith(".xml") && !PobjEventArgs.Node.FullPath.ToLower().EndsWith(".rels") &&
                !PobjEventArgs.Node.FullPath.ToLower().EndsWith(".vml"))
            {
                // hide the text panes - since this part cannot be shown
                removeTabPages();

                // if the type is an image, then we will show it
                if (PobjEventArgs.Node.FullPath.ToLower().EndsWith("jpeg") ||
                    PobjEventArgs.Node.FullPath.ToLower().EndsWith("jpg") ||
                    PobjEventArgs.Node.FullPath.ToLower().EndsWith("png") ||
                    PobjEventArgs.Node.FullPath.ToLower().EndsWith("bmp") ||
                    PobjEventArgs.Node.FullPath.ToLower().EndsWith("wmf") ||
                    PobjEventArgs.Node.FullPath.ToLower().EndsWith("emf"))
                {
                    tabControl1.TabPages.Add(tabPage3);
                    tabPage3.Select();
                    using (ZipPackage LobjZip = (ZipPackage)ZipPackage.Open(MstrPath, FileMode.Open, FileAccess.Read))
                    {
                        // get the URI for th part
                        string LstrUri = PobjEventArgs.Node.FullPath.Substring(1).Replace("\\", "/");
                        // grab the part
                        ZipPackagePart LobjPart       = (ZipPackagePart)LobjZip.GetPart(new Uri(LstrUri, UriKind.Relative));
                        Stream         LobjBaseStream = LobjPart.GetStream(FileMode.Open, FileAccess.Read);
                        pictureBox1.Image = new Bitmap(LobjBaseStream);
                        LobjBaseStream.Close();
                    }
                }
                return;
            }
            else
            {
                // show the text panes
                removeTabPages();
                tabControl1.TabPages.Add(tabPage1);
                tabControl1.TabPages.Add(tabPage2);
            }

            try
            {
                // open the part to read the XML
                using (ZipPackage LobjZip = (ZipPackage)ZipPackage.Open(MstrPath, FileMode.Open, FileAccess.Read))
                {
                    // get the URI for th part
                    string LstrUri = PobjEventArgs.Node.FullPath.Substring(1).Replace("\\", "/");
                    // grab the part
                    ZipPackagePart LobjPart         = (ZipPackagePart)LobjZip.GetPart(new Uri(LstrUri, UriKind.Relative));
                    Stream         LobjBaseStream   = LobjPart.GetStream(FileMode.Open, FileAccess.Read);
                    MemoryStream   LobjMemoryStream = new MemoryStream();
                    LobjBaseStream.CopyTo(LobjMemoryStream);
                    LobjBaseStream.Close();
                    // load the stream into a string
                    LobjMemoryStream.Position = 0;
                    string LstrXml = new StreamReader(LobjMemoryStream, Encoding.UTF8).ReadToEnd();
                    webBrowser1.DocumentText  = LstrXml;
                    LobjMemoryStream.Position = 0;
                    // format the string
                    lineNumberTextBox1.Text = FormatXml(LstrXml);
                    //Highlight();
                }
                toolStripButton3.Enabled = false;
                toolStripButton4.Enabled = true;
                this.Refresh();
            }
            catch { }
        }