Example #1
0
        public void GetRelativeUriTest2()
        {
            Uri src  = new Uri("/1/2/3/file.jpg", UriKind.Relative);
            Uri dest = new Uri("/1/2/", UriKind.Relative);

            Assert.AreEqual(new Uri("../file2.png", UriKind.Relative), PackUriHelper.GetRelativeUri(src, dest), "#3");
        }
Example #2
0
        private XmlDocument GetXmlDocument(string startXml, Uri uri, string contentType, string relationship)
        {
            XmlDocument xmlDoc;

            if (_package.Package.PartExists(uri))
            {
                xmlDoc = _package.GetXmlFromUri(uri);
            }
            else
            {
                xmlDoc = new XmlDocument();
                xmlDoc.LoadXml(startXml);

                // Create a the part and add to the package
                PackagePart part = _package.Package.CreatePart(uri, contentType);

                // Save it to the package
                StreamWriter stream = new StreamWriter(part.GetStream(FileMode.Create, FileAccess.Write));
                xmlDoc.Save(stream);
                stream.Close();
                _package.Package.Flush();

                // create the relationship between the workbook and the new shared strings part
                _package.Package.CreateRelationship(PackUriHelper.GetRelativeUri(new Uri("/xl", UriKind.Relative), uri), TargetMode.Internal, relationship);
                _package.Package.Flush();
            }
            return(xmlDoc);
        }
Example #3
0
        public void GetRelativeUriTest()
        {
            Uri src  = new Uri("/1/2/3/file.jpg", UriKind.Relative);
            Uri dest = new Uri("/file2.png", UriKind.Relative);

            Assert.AreEqual(new Uri("../../../file2.png", UriKind.Relative), PackUriHelper.GetRelativeUri(src, dest), "#1");

            dest = new Uri("/1/2", UriKind.Relative);
            Assert.AreEqual(new Uri("../../2", UriKind.Relative), PackUriHelper.GetRelativeUri(src, dest), "#2");

            dest = new Uri("/1/2/", UriKind.Relative);
            Assert.AreEqual(new Uri("", UriKind.Relative), PackUriHelper.GetRelativeUri(src, src), "#4");

            // See: http://msdn.microsoft.com/en-us/library/system.io.packaging.packurihelper.getrelativeuri.aspx

            src  = new Uri("/mydoc/markup/page.xml", UriKind.Relative);
            dest = new Uri("/mydoc/markup/picture.jpg", UriKind.Relative);
            Assert.AreEqual(new Uri("picture.jpg", UriKind.Relative), PackUriHelper.GetRelativeUri(src, dest), "#5");

            src  = new Uri("/mydoc/markup/page.xml", UriKind.Relative);
            dest = new Uri("/mydoc/picture.jpg", UriKind.Relative);
            Assert.AreEqual(new Uri("../picture.jpg", UriKind.Relative), PackUriHelper.GetRelativeUri(src, dest), "#6");

            src  = new Uri("/mydoc/markup/page.xml", UriKind.Relative);
            dest = new Uri("/mydoc/images/picture.jpg", UriKind.Relative);
            Assert.AreEqual(new Uri("../images/picture.jpg", UriKind.Relative), PackUriHelper.GetRelativeUri(src, dest), "#7");
        }
Example #4
0
        private string SavePicture(Image image)
        {
            ImageConverter ic = new ImageConverter();

            byte[] img = (byte[])ic.ConvertTo(image, typeof(byte[]));
            var    ii  = _drawings._package.AddImage(img);

            if (_drawings._hashes.ContainsKey(ii.Hash))
            {
                var relID = _drawings._hashes[ii.Hash];
                var rel   = _drawings.Part.GetRelationship(relID);
                UriPic = PackUriHelper.ResolvePartUri(rel.SourceUri, rel.TargetUri);
                return(relID);
            }
            else
            {
                UriPic = ii.Uri;
            }

            //Set the Image and save it to the package.
            RelPic = _drawings.Part.CreateRelationship(PackUriHelper.GetRelativeUri(_drawings.UriDrawing, UriPic), TargetMode.Internal, ExcelPackage.schemaRelationships + "/image");

            //AddNewPicture(img, picRelation.Id);
            _drawings._hashes.Add(ii.Hash, RelPic.Id);
            ImageHash = ii.Hash;

            return(RelPic.Id);
        }
Example #5
0
        private void InnerSave(Package package)
        {
            // 创建一个新的 workbookpart
            ExcelSaveContext context = new ExcelSaveContext(this)
            {
                Package = package
            };

            context.LinqWriter.WriteWorkBook();
            SaveWorkSheets(context);

            context.LinqWriter.WriteSharedStrings();

            ((IPersistable)this.FileDetails).Save(context);

            ((IPersistable)context.GlobalStyles).Save(context);

            ((IPersistable)this.CalculationChain).Save(context);

            SaveTheme(context);

            package.CreateRelationship(PackUriHelper.GetRelativeUri(new Uri("/xl", UriKind.Relative),
                                                                    ExcelCommon.Uri_Workbook),
                                       TargetMode.Internal,
                                       ExcelCommon.Schema_Relationships + "/officeDocument");

            package.Flush();
        }
Example #6
0
        private void CreateBlankWb()
        {
            XmlDocument workbook = Workbook.WorkbookXml; // this will create the workbook xml in the package

            // create the relationship to the main part
            _package.CreateRelationship(PackUriHelper.GetRelativeUri(new Uri("/xl", UriKind.Relative), Workbook.WorkbookUri), TargetMode.Internal, schemaRelationships + "/officeDocument");
        }
Example #7
0
        private void CopyTable(ExcelWorksheet Copy, ExcelWorksheet added)
        {
            string prevName = "";

            //First copy the table XML
            foreach (var tbl in Copy.Tables)
            {
                string xml = tbl.TableXml.OuterXml;
                int    Id  = _pck.Workbook._nextTableID++;
                string name;
                if (prevName == "")
                {
                    name = Copy.Tables.GetNewTableName();
                }
                else
                {
                    int ix = int.Parse(prevName.Substring(5)) + 1;
                    name = string.Format("Table{0}", ix);
                    while (_pck.Workbook.ExistsPivotTableName(name))
                    {
                        name = string.Format("Table{0}", ++ix);
                    }
                }
                prevName = name;
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.LoadXml(xml);
                xmlDoc.SelectSingleNode("//d:table/@id", tbl.NameSpaceManager).Value          = Id.ToString();
                xmlDoc.SelectSingleNode("//d:table/@name", tbl.NameSpaceManager).Value        = name;
                xmlDoc.SelectSingleNode("//d:table/@displayName", tbl.NameSpaceManager).Value = name;
                xml = xmlDoc.OuterXml;

                var          uriTbl    = new Uri(string.Format("/xl/tables/table{0}.xml", Id), UriKind.Relative);
                var          part      = _pck.Package.CreatePart(uriTbl, "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml", _pck.Compression);
                StreamWriter streamTbl = new StreamWriter(part.GetStream(FileMode.Create, FileAccess.Write));
                streamTbl.Write(xml);
                streamTbl.Close();

                //create the relationship and add the ID to the worksheet xml.
                var rel = added.Part.CreateRelationship(PackUriHelper.GetRelativeUri(added.WorksheetUri, uriTbl), TargetMode.Internal, ExcelPackage.schemaRelationships + "/table");

                if (tbl.RelationshipID == null)
                {
                    var topNode = added.WorksheetXml.SelectSingleNode("//d:tableParts", tbl.NameSpaceManager);
                    if (topNode == null)
                    {
                        added.CreateNode("d:tableParts");
                        topNode = added.WorksheetXml.SelectSingleNode("//d:tableParts", tbl.NameSpaceManager);
                    }
                    XmlElement elem = added.WorksheetXml.CreateElement("tablePart", ExcelPackage.schemaMain);
                    topNode.AppendChild(elem);
                    elem.SetAttribute("id", ExcelPackage.schemaRelationships, rel.Id);
                }
                else
                {
                    XmlAttribute relAtt;
                    relAtt       = added.WorksheetXml.SelectSingleNode(string.Format("//d:tableParts/d:tablePart/@r:id[.='{0}']", tbl.RelationshipID), tbl.NameSpaceManager) as XmlAttribute;
                    relAtt.Value = rel.Id;
                }
            }
        }
 internal void SaveHeaderFooterImages()
 {
     if (_vmlDrawingsHF != null)
     {
         if (_vmlDrawingsHF.Count == 0)
         {
             if (_vmlDrawingsHF.Uri != null)
             {
                 _ws.Part.DeleteRelationship(_vmlDrawingsHF.RelId);
                 _ws._package.Package.DeletePart(_vmlDrawingsHF.Uri);
             }
         }
         else
         {
             if (_vmlDrawingsHF.Uri == null)
             {
                 _vmlDrawingsHF.Uri = XmlHelper.GetNewUri(_ws._package.Package, @"/xl/drawings/vmlDrawing{0}.vml");
             }
             if (_vmlDrawingsHF.Part == null)
             {
                 _vmlDrawingsHF.Part = _ws._package.Package.CreatePart(_vmlDrawingsHF.Uri, "application/vnd.openxmlformats-officedocument.vmlDrawing", _ws._package.Compression);
                 var rel = _ws.Part.CreateRelationship(PackUriHelper.GetRelativeUri(_ws.WorksheetUri, _vmlDrawingsHF.Uri), TargetMode.Internal, ExcelPackage.schemaRelationships + "/vmlDrawing");
                 _ws.SetHFLegacyDrawingRel(rel.Id);
                 _vmlDrawingsHF.RelId = rel.Id;
                 foreach (ExcelVmlDrawingPicture draw in _vmlDrawingsHF)
                 {
                     rel        = _vmlDrawingsHF.Part.CreateRelationship(PackUriHelper.GetRelativeUri(_vmlDrawingsHF.Uri, draw.ImageUri), TargetMode.Internal, ExcelPackage.schemaRelationships + "/image");
                     draw.RelId = rel.Id;
                 }
             }
             _vmlDrawingsHF.VmlDrawingXml.Save(_vmlDrawingsHF.Part.GetStream());
         }
     }
 }
Example #9
0
        public static void AddParafImza(this Package package, byte[] imza)
        {
            var partParafImza = package.CreatePart(Constants.URI_PARAFIMZA, Constants.MIME_OCTETSTREAM,
                                                   CompressionOption.Maximum);

            partParafImza.AddToPartStream(imza);
            package.GetPart(Constants.URI_PARAFOZETI).CreateRelationship(
                PackUriHelper.GetRelativeUri(Constants.URI_PARAFOZETI, Constants.URI_PARAFIMZA), TargetMode.Internal,
                Constants.RELATION_TYPE_PARAFIMZA, Constants.ID_PARAFIMZA);
        }
Example #10
0
        private string MakeRelativeUri(Uri parentUri, string uri)
        {
            string result = uri;
            Uri    uri2   = new Uri(uri, UriKind.RelativeOrAbsolute);

            if (!uri2.IsAbsoluteUri)
            {
                Uri targetPartUri = PackUriHelper.ResolvePartUri(parentUri, uri2);
                result = PackUriHelper.GetRelativeUri(parentUri, targetPartUri).ToString();
            }
            return(result);
        }
Example #11
0
        public void CreateWordDocumentWithTextAndImage()
        {
            // Part Names
            const string mainDocumentPartName = "/document/main.xml";
            const string imagePartName        = "/images/cat.jpeg";

            // Content types
            const string mainDocumentPartContentType =
                "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml";
            const string imagePartContentType =
                System.Net.Mime.MediaTypeNames.Image.Jpeg;

            // Relationsip Types
            const string mainDocumentPartRelationshipType =
                "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument";
            const string imagePartRelationshipType =
                "http://schemas.openxmlformats.org/officeDocument/2006/relationships/image";

            // Image relationship Id
            const string imageRelationshipId = "rId1";

            // Create new Word document
            using (var document = Package.Open("result.docx", System.IO.FileMode.Create))
            {
                // Add main part
                var mainPartUri = new Uri(mainDocumentPartName, UriKind.Relative);
                var mainPart    = document.CreatePart(mainPartUri, mainDocumentPartContentType);

                using (var mainPartStream = mainPart.GetStream())
                {
                    mainPartStream.Write(Properties.Resources.main, 0, Properties.Resources.main.Length);
                    mainPartStream.Close();
                }

                document.CreateRelationship(mainPartUri, TargetMode.Internal, mainDocumentPartRelationshipType);

                // Add image
                var imagePartUri = new Uri(imagePartName, UriKind.Relative);
                var imagePart    = document.CreatePart(imagePartUri, imagePartContentType);

                using (var imagePartStream = imagePart.GetStream())
                {
                    imagePartStream.Write(Properties.Resources.cat, 0, Properties.Resources.cat.Length);
                    imagePartStream.Close();
                }

                // Create relative uri for image
                var relativeUri = PackUriHelper.GetRelativeUri(mainPartUri, imagePartUri);
                mainPart.CreateRelationship(relativeUri, TargetMode.Internal, imagePartRelationshipType, imageRelationshipId);

                document.Close();
            }
        }
Example #12
0
        internal ExcelPicture(ExcelDrawings drawings, XmlNode node, FileInfo imageFile, Uri hyperlink) :
            base(drawings, node, "xdr:pic/xdr:nvPicPr/xdr:cNvPr/@name")
        {
            XmlElement picNode = node.OwnerDocument.CreateElement("xdr", "pic", ExcelPackage.schemaSheetDrawings);

            node.InsertAfter(picNode, node.SelectSingleNode("xdr:to", NameSpaceManager));
            _hyperlink       = hyperlink;
            picNode.InnerXml = PicStartXml();

            node.InsertAfter(node.OwnerDocument.CreateElement("xdr", "clientData", ExcelPackage.schemaSheetDrawings), picNode);

            Package package = drawings.Worksheet._package.Package;

            ContentType = GetContentType(imageFile.Extension);
            _image      = Image.FromFile(imageFile.FullName);
            ImageConverter ic = new ImageConverter();

            byte[] img = (byte[])ic.ConvertTo(_image, typeof(byte[]));


            UriPic = GetNewUri(package, "/xl/media/{0}" + imageFile.Name);
            var ii = _drawings._package.AddImage(img, UriPic, ContentType);
            //string relID = GetPictureRelID(img);

            //if (relID == "")
            string relID;

            if (!drawings._hashes.ContainsKey(ii.Hash))
            {
                //UriPic = GetNewUri(package, "/xl/media/image{0}" + imageFile.Extension);
                //Part =  package.CreatePart(UriPic, ContentType, CompressionOption.NotCompressed);

                ////Save the picture to package.
                //byte[] file = File.ReadAllBytes(imageFile.FullName);
                //var strm = Part.GetStream(FileMode.Create, FileAccess.Write);
                //strm.Write(file, 0, file.Length);
                Part   = ii.Part;
                RelPic = drawings.Part.CreateRelationship(PackUriHelper.GetRelativeUri(drawings.UriDrawing, ii.Uri), TargetMode.Internal, ExcelPackage.schemaRelationships + "/image");
                relID  = RelPic.Id;
                _drawings._hashes.Add(ii.Hash, relID);
                AddNewPicture(img, relID);
            }
            else
            {
                relID = drawings._hashes[ii.Hash];
                var rel = _drawings.Part.GetRelationship(relID);
                UriPic = PackUriHelper.ResolvePartUri(rel.SourceUri, rel.TargetUri);
            }
            SetPosDefaults(Image);
            //Create relationship
            node.SelectSingleNode("xdr:pic/xdr:blipFill/a:blip/@r:embed", NameSpaceManager).Value = relID;
            package.Flush();
        }
Example #13
0
        public static void AddMuhur(this Package package, byte[] muhur, PaketVersiyonTuru paketVersiyon)
        {
            var partMuhurUri = paketVersiyon == PaketVersiyonTuru.Versiyon1X
                ? Constants.URI_MUHUR_V1X
                : Constants.URI_MUHUR_V2X;

            var partMuhur = package.CreatePart(partMuhurUri, Constants.MIME_OCTETSTREAM, CompressionOption.Maximum);

            partMuhur.AddToPartStream(muhur);
            package.GetPart(Constants.URI_NIHAIOZET).CreateRelationship(
                PackUriHelper.GetRelativeUri(Constants.URI_NIHAIOZET, partMuhurUri), TargetMode.Internal,
                Constants.RELATION_TYPE_MUHUR, Constants.ID_MUHUR);
        }
Example #14
0
        private static void SaveHtmlAsDocx(string fName, string htmlBody)
        {
            FileInfo fi = new FileInfo(fName);
            var      htmlByteContent = Encoding.UTF8.GetBytes(String.Concat("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"><html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><title></title></head><body>", htmlBody, "</body></html>"));

            var namespaceDocx          = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
            var namespaceRs            = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
            var namespaceRsOfficeDoc   = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument";
            var namespaceRsOfficeAltCh = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk";

            var uriDoc      = new Uri("/word/document.xml", UriKind.Relative);
            var uriBase     = new Uri("/word/document.xml", UriKind.Relative);
            var uri         = new Uri("/word/" + Regex.Replace(fi.Name.Substring(0, fi.Name.LastIndexOf('.')), @"[^0-9a-zA-Z]", "") + ".html", UriKind.Relative);
            var uriRelative = PackUriHelper.GetRelativeUri(uriBase, uri);

            Package packageDocx = Package.Open(fi.FullName, FileMode.Create, FileAccess.ReadWrite);

            XmlDocument documentRoot = new XmlDocument();
            XmlElement  documentTag  = documentRoot.CreateElement("w:document", namespaceDocx);

            documentRoot.AppendChild(documentTag);
            XmlElement documentBody = documentRoot.CreateElement("w:body", namespaceDocx);

            documentTag.AppendChild(documentBody);

            XmlElement   chunkAlt   = documentRoot.CreateElement("w:altChunk", namespaceDocx);
            XmlAttribute relationId = chunkAlt.Attributes.Append(documentRoot.CreateAttribute("r:id", namespaceRs));

            relationId.Value = "rId2";
            documentBody.AppendChild(chunkAlt);

            PackagePart  packageDocxXml  = packageDocx.CreatePart(uriDoc, "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml");
            StreamWriter streamStartPart = new StreamWriter(packageDocxXml.GetStream(FileMode.Create, FileAccess.Write));

            documentRoot.Save(streamStartPart);
            streamStartPart.Close();
            packageDocx.Flush();

            packageDocx.CreateRelationship(uriDoc, TargetMode.Internal, namespaceRsOfficeDoc, "rId1");
            packageDocx.Flush();

            PackagePart packageDocxXmlDocument = packageDocx.GetPart(uriBase);
            PackagePart packageDocxXmlAltchunk = packageDocx.CreatePart(uri, "text/html");

            using (Stream targetStream = packageDocxXmlAltchunk.GetStream())
            {
                targetStream.Write(htmlByteContent, 0, htmlByteContent.Length);
            }
            packageDocxXmlDocument.CreateRelationship(uriRelative, TargetMode.Internal, namespaceRsOfficeAltCh, "rId2");
            packageDocx.Close();
        }
Example #15
0
        /// <summary>
        /// Creates a relationship from one package part to another.
        /// </summary>
        /// <param name="sourceUri">The uri of the source part.</param>
        /// <param name="targetUri">The relative path representing the location of the target part based on the source part.</param>
        /// <param name="relationshipType">The type of relationship to create.</param>
        /// <returns>The ID of the new relationship.</returns>
        public string CreateInternalRelationship(Uri sourceUri, Uri targetUri, string relationshipType)
        {
            // open the source part
            PackagePart sourcePart = m_package.GetPart(sourceUri);

            // create the relationship
            PackageRelationship relationship =
                sourcePart.CreateRelationship(
                    PackUriHelper.GetRelativeUri(sourceUri, targetUri),
                    TargetMode.Internal, relationshipType);

            // return the new rel id
            return(relationship.Id);
        }
Example #16
0
        private void CopyComment(ExcelWorksheet Copy, ExcelWorksheet workSheet)
        {
            //First copy the drawing XML
            string xml        = Copy.Comments.CommentXml.InnerXml;
            var    uriComment = new Uri(string.Format("/xl/comments{0}.xml", workSheet.SheetID), UriKind.Relative);

            if (_pck.Package.PartExists(uriComment))
            {
                uriComment = XmlHelper.GetNewUri(_pck.Package, "/xl/drawings/vmldrawing{0}.vml");
            }

            var part = _pck.Package.CreatePart(uriComment, "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml", _pck.Compression);

            StreamWriter streamDrawing = new StreamWriter(part.GetStream(FileMode.Create, FileAccess.Write));

            streamDrawing.Write(xml);
            streamDrawing.Close();

            //Add the relationship ID to the worksheet xml.
            PackageRelationship commentRelation = workSheet.Part.CreateRelationship(PackUriHelper.GetRelativeUri(workSheet.WorksheetUri, uriComment), TargetMode.Internal, ExcelPackage.schemaRelationships + "/comments");

            xml = Copy.VmlDrawingsComments.VmlDrawingXml.InnerXml;

            var uriVml = new Uri(string.Format("/xl/drawings/vmldrawing{0}.vml", workSheet.SheetID), UriKind.Relative);

            if (_pck.Package.PartExists(uriVml))
            {
                uriVml = XmlHelper.GetNewUri(_pck.Package, "/xl/drawings/vmldrawing{0}.vml");
            }

            var          vmlPart   = _pck.Package.CreatePart(uriVml, "application/vnd.openxmlformats-officedocument.vmlDrawing", _pck.Compression);
            StreamWriter streamVml = new StreamWriter(vmlPart.GetStream(FileMode.Create, FileAccess.Write));

            streamVml.Write(xml);
            streamVml.Close();

            PackageRelationship newVmlRel = workSheet.Part.CreateRelationship(PackUriHelper.GetRelativeUri(workSheet.WorksheetUri, uriVml), TargetMode.Internal, ExcelPackage.schemaRelationships + "/vmlDrawing");

            //Add the relationship ID to the worksheet xml.
            XmlElement e = workSheet.WorksheetXml.SelectSingleNode("//d:legacyDrawing", _namespaceManager) as XmlElement;

            if (e == null)
            {
                workSheet.CreateNode("d:legacyDrawing");
                e = workSheet.WorksheetXml.SelectSingleNode("//d:legacyDrawing", _namespaceManager) as XmlElement;
            }

            e.SetAttribute("id", ExcelPackage.schemaRelationships, newVmlRel.Id);
        }
Example #17
0
        internal ExcelPicture(ExcelDrawings drawings, XmlNode node, FileInfo imageFile, Uri hyperlink) :
            base(drawings, node, "xdr:pic/xdr:nvPicPr/xdr:cNvPr/@name")
        {
            XmlElement picNode = node.OwnerDocument.CreateElement("xdr", "pic", ExcelPackage.schemaSheetDrawings);

            node.InsertAfter(picNode, node.SelectSingleNode("xdr:to", NameSpaceManager));
            _hyperlink       = hyperlink;
            picNode.InnerXml = PicStartXml();

            node.InsertAfter(node.OwnerDocument.CreateElement("xdr", "clientData", ExcelPackage.schemaSheetDrawings), picNode);

            //Changed to stream 2/4-13 (issue 14834). Thnx SClause
            var package = drawings.Worksheet._package.Package;

            ContentType = GetContentType(imageFile.Extension);
            var imagestream = new FileStream(imageFile.FullName, FileMode.Open, FileAccess.Read);

            _image = Image.FromStream(imagestream);
            ImageConverter ic  = new ImageConverter();
            var            img = (byte[])ic.ConvertTo(_image, typeof(byte[]));

            imagestream.Close();

            UriPic = GetNewUri(package, "/xl/media/{0}" + imageFile.Name);
            var    ii = _drawings._package.AddImage(img, UriPic, ContentType);
            string relID;

            if (!drawings._hashes.ContainsKey(ii.Hash))
            {
                Part   = ii.Part;
                RelPic = drawings.Part.CreateRelationship(PackUriHelper.GetRelativeUri(drawings.UriDrawing, ii.Uri), TargetMode.Internal, ExcelPackage.schemaRelationships + "/image");
                relID  = RelPic.Id;
                _drawings._hashes.Add(ii.Hash, relID);
                AddNewPicture(img, relID);
            }
            else
            {
                relID = drawings._hashes[ii.Hash];
                var rel = _drawings.Part.GetRelationship(relID);
                UriPic = PackUriHelper.ResolvePartUri(rel.SourceUri, rel.TargetUri);
            }
            SetPosDefaults(Image);
            //Create relationship
            node.SelectSingleNode("xdr:pic/xdr:blipFill/a:blip/@r:embed", NameSpaceManager).Value = relID;
            package.Flush();
        }
Example #18
0
        string CreateWorkbookRel(string Name, int sheetID, Uri uriWorksheet)
        {
            //Create the relationship between the workbook and the new worksheet
            PackageRelationship rel = _pck.Workbook.Part.CreateRelationship(PackUriHelper.GetRelativeUri(_pck.Workbook.WorkbookUri, uriWorksheet), TargetMode.Internal, ExcelPackage.schemaRelationships + "/worksheet");

            _pck.Package.Flush();

            //Create the new sheet node
            XmlElement worksheetNode = _pck.Workbook.WorkbookXml.CreateElement("sheet", ExcelPackage.schemaMain);

            worksheetNode.SetAttribute("name", Name);
            worksheetNode.SetAttribute("sheetId", sheetID.ToString());
            worksheetNode.SetAttribute("id", ExcelPackage.schemaRelationships, rel.Id);

            TopNode.AppendChild(worksheetNode);
            return(rel.Id);
        }
Example #19
0
        private void UpdateSharedStringsXml()
        {
            PackagePart stringPart;

            if (_package.Package.PartExists(SharedStringsUri))
            {
                stringPart = _package.Package.GetPart(SharedStringsUri);
            }
            else
            {
                stringPart = _package.Package.CreatePart(SharedStringsUri, @"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml", _package.Compression);
                Part.CreateRelationship(PackUriHelper.GetRelativeUri(WorkbookUri, SharedStringsUri), TargetMode.Internal, ExcelPackage.schemaRelationships + "/sharedStrings");
            }

            StreamWriter sw = new StreamWriter(stringPart.GetStream(FileMode.Create, FileAccess.Write));

            sw.Write("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\" ?><sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"{0}\" uniqueCount=\"{0}\">", _sharedStrings.Count);
            foreach (string t in _sharedStrings.Keys)
            {
                SharedStringItem ssi = _sharedStrings[t];
                if (ssi.isRichText)
                {
                    sw.Write("<si>");
                    ExcelEncodeString(sw, t);
                    sw.Write("</si>");
                }
                else
                {
                    if (t.Length > 0 && (t[0] == ' ' || t[t.Length - 1] == ' ' || t.Contains("  ") || t.Contains("\t")))
                    {
                        sw.Write("<si><t xml:space=\"preserve\">");
                    }
                    else
                    {
                        sw.Write("<si><t>");
                    }
                    ExcelEncodeString(sw, SecurityElement.Escape(t));
                    sw.Write("</t></si>");
                }
            }
            sw.Write("</sst>");
            sw.Flush();
        }
Example #20
0
        /// <summary>
        /// get the relative Uri
        /// </summary>
        public static Uri GetRelativeUri(Uri sourcePartUri, Uri targetPartUri)
        {
            Uri result = PackUriHelper.GetRelativeUri(sourcePartUri, targetPartUri);

            if (result.ToString().StartsWith("/"))
            {
                // bug in Mono, see https://bugzilla.xamarin.com/show_bug.cgi?id=2527
                // Mono always returns the sourcePartUri.
                string source = sourcePartUri.ToString();
                string target = targetPartUri.ToString();

                int countSame = 0;

                while (countSame < target.Length &&
                       countSame < source.Length &&
                       target[countSame] == source[countSame])
                {
                    countSame++;
                }

                // go back to the last separator
                countSame = target.Substring(0, countSame).LastIndexOf("/") + 1;
                string ResultString = target.Substring(countSame);

                if (countSame > 0)
                {
                    // how many directories do we need to go up from the working Directory
                    while (countSame < source.Length)
                    {
                        if (source[countSame] == '/')
                        {
                            ResultString = "../" + ResultString;
                        }

                        countSame++;
                    }
                }

                result = new Uri(ResultString, UriKind.Relative);
            }

            return(result);
        }
Example #21
0
        private XmlElement CreateDrawingXml()
        {
            if (DrawingXml.OuterXml == "")
            {
                DrawingXml.LoadXml(string.Format("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><xdr:wsDr xmlns:xdr=\"{0}\" xmlns:a=\"{1}\" />", ExcelPackage.schemaSheetDrawings, ExcelPackage.schemaDrawings));
                _uriDrawing = new Uri(string.Format("/xl/drawings/drawing{0}.xml", Worksheet.SheetID), UriKind.Relative);

                Package package = Worksheet._package.Package;
                _part = package.CreatePart(_uriDrawing, "application/vnd.openxmlformats-officedocument.drawing+xml", _package.Compression);

                StreamWriter streamChart = new StreamWriter(_part.GetStream(FileMode.Create, FileAccess.Write));
                DrawingXml.Save(streamChart);
                streamChart.Close();
                package.Flush();

                _drawingRelation = Worksheet.Part.CreateRelationship(PackUriHelper.GetRelativeUri(Worksheet.WorksheetUri, _uriDrawing), TargetMode.Internal, ExcelPackage.schemaRelationships + "/drawing");
                XmlElement e = Worksheet.WorksheetXml.CreateElement("drawing", ExcelPackage.schemaMain);
                e.SetAttribute("id", ExcelPackage.schemaRelationships, _drawingRelation.Id);

                Worksheet.WorksheetXml.DocumentElement.AppendChild(e);
                package.Flush();
            }
            XmlNode    colNode  = _drawingsXml.SelectSingleNode("//xdr:wsDr", NameSpaceManager);
            XmlElement drawNode = _drawingsXml.CreateElement("xdr", "twoCellAnchor", ExcelPackage.schemaSheetDrawings);

            colNode.AppendChild(drawNode);

            //Add from position Element;
            XmlElement fromNode = _drawingsXml.CreateElement("xdr", "from", ExcelPackage.schemaSheetDrawings);

            drawNode.AppendChild(fromNode);
            fromNode.InnerXml = "<xdr:col>0</xdr:col><xdr:colOff>0</xdr:colOff><xdr:row>0</xdr:row><xdr:rowOff>0</xdr:rowOff>";

            //Add to position Element;
            XmlElement toNode = _drawingsXml.CreateElement("xdr", "to", ExcelPackage.schemaSheetDrawings);

            drawNode.AppendChild(toNode);
            toNode.InnerXml = "<xdr:col>10</xdr:col><xdr:colOff>0</xdr:colOff><xdr:row>10</xdr:row><xdr:rowOff>0</xdr:rowOff>";
            return(drawNode);
        }
Example #22
0
        private void CopyVmlDrawing(ExcelWorksheet origSheet, ExcelWorksheet newSheet)
        {
            var xml    = origSheet.VmlDrawingsComments.VmlDrawingXml.OuterXml;
            var vmlUri = new Uri(string.Format("/xl/drawings/vmlDrawing{0}.vml", newSheet.SheetID), UriKind.Relative);
            var part   = _pck.Package.CreatePart(vmlUri, "application/vnd.openxmlformats-officedocument.vmlDrawing", _pck.Compression);

            using (var streamDrawing = new StreamWriter(part.GetStream(FileMode.Create, FileAccess.Write)))
            {
                streamDrawing.Write(xml);
            }

            //Add the relationship ID to the worksheet xml.
            PackageRelationship vmlRelation = newSheet.Part.CreateRelationship(PackUriHelper.GetRelativeUri(newSheet.WorksheetUri, vmlUri), TargetMode.Internal, ExcelPackage.schemaRelationships + "/vmlDrawing");
            var e = newSheet.WorksheetXml.SelectSingleNode("//d:legacyDrawing", _namespaceManager) as XmlElement;

            if (e == null)
            {
                e = newSheet.WorksheetXml.CreateNode(XmlNodeType.Entity, "//d:legacyDrawing", _namespaceManager.LookupNamespace("d")) as XmlElement;
            }
            if (e != null)
            {
                e.SetAttribute("id", ExcelPackage.schemaRelationships, vmlRelation.Id);
            }
        }
Example #23
0
        void IPersistable.Save(ExcelSaveContext context)
        {
            if (this._Theme != null)
            {
                PackagePart themePart = context.Package.CreatePart(ExcelCommon.Uri_Theme, ExcelCommon.ContentType_Theme, this._WorkBook.Compression);
                context.Package.GetPart(ExcelCommon.Uri_Workbook).CreateRelationship(PackUriHelper.GetRelativeUri(ExcelCommon.Uri_Workbook, ExcelCommon.Uri_Theme), TargetMode.Internal, ExcelCommon.Schema_Relationships + "/theme");

                using (StreamWriter streamCore = new StreamWriter(themePart.GetStream(FileMode.Create, FileAccess.Write)))
                {
                    this._Theme.Save(streamCore);
                }

                /*	using (XmlTextWriter writer = new XmlTextWriter(themePart.GetStream(FileMode.Create, FileAccess.Write), Encoding.UTF8))
                 *    {
                 *            context.Writer.WriteTheme(this, writer);
                 *    } */
            }

            //PackagePart themePart = context.Package.GetPart(ExcelCommon.Uri_Workbook).CreatePart(ExcelCommon.Uri_Theme, ExcelCommon.ContentType_Theme, this._WorkBook.Compression);
            //using (XmlTextWriter writer = new XmlTextWriter(themePart.GetStream(FileMode.Create, FileAccess.Write), Encoding.UTF8))
            //{
            //    context.Writer.WriteTheme(this, writer);
            //}
        }
        private static void CreatePartRelationship(Uri partUri, string partRelationshipType, string partId, PackagePart parentPart)
        {
            Uri relativeUri = PackUriHelper.GetRelativeUri(parentPart.Uri, partUri);

            parentPart.CreateRelationship(relativeUri, TargetMode.Internal, partRelationshipType, partId);
        }
Example #25
0
        private void CopyDrawing(ExcelWorksheet Copy, ExcelWorksheet workSheet /*, PackageRelationship r*/)
        {
            //Check if the worksheet has drawings
            //if(_xlPackage.Package.PartExists(r.TargetUri))
            //{
            //First copy the drawing XML
            string       xml           = Copy.Drawings.DrawingXml.OuterXml;
            var          uriDraw       = new Uri(string.Format("/xl/drawings/drawing{0}.xml", workSheet.SheetID), UriKind.Relative);
            var          part          = _pck.Package.CreatePart(uriDraw, "application/vnd.openxmlformats-officedocument.drawing+xml", _pck.Compression);
            StreamWriter streamDrawing = new StreamWriter(part.GetStream(FileMode.Create, FileAccess.Write));

            streamDrawing.Write(xml);
            streamDrawing.Close();

            XmlDocument drawXml = new XmlDocument();

            drawXml.LoadXml(xml);
            //Add the relationship ID to the worksheet xml.
            PackageRelationship drawRelation = workSheet.Part.CreateRelationship(PackUriHelper.GetRelativeUri(workSheet.WorksheetUri, uriDraw), TargetMode.Internal, ExcelPackage.schemaRelationships + "/drawing");
            XmlElement          e            = workSheet.WorksheetXml.SelectSingleNode("//d:drawing", _namespaceManager) as XmlElement;

            e.SetAttribute("id", ExcelPackage.schemaRelationships, drawRelation.Id);

            foreach (ExcelDrawing draw in Copy.Drawings)
            {
                if (draw is ExcelChart)
                {
                    ExcelChart chart = draw as ExcelChart;
                    xml = chart.ChartXml.InnerXml;

                    var          UriChart    = XmlHelper.GetNewUri(_pck.Package, "/xl/charts/chart{0}.xml");
                    var          chartPart   = _pck.Package.CreatePart(UriChart, "application/vnd.openxmlformats-officedocument.drawingml.chart+xml", _pck.Compression);
                    StreamWriter streamChart = new StreamWriter(chartPart.GetStream(FileMode.Create, FileAccess.Write));
                    streamChart.Write(xml);
                    streamChart.Close();
                    //Now create the new relationship to the copied chart xml
                    var          prevRelID = draw.TopNode.SelectSingleNode("xdr:graphicFrame/a:graphic/a:graphicData/c:chart/@r:id", Copy.Drawings.NameSpaceManager).Value;
                    var          rel       = part.CreateRelationship(PackUriHelper.GetRelativeUri(uriDraw, UriChart), TargetMode.Internal, ExcelPackage.schemaRelationships + "/chart");
                    XmlAttribute relAtt    = drawXml.SelectSingleNode(string.Format("//c:chart/@r:id[.='{0}']", prevRelID), Copy.Drawings.NameSpaceManager) as XmlAttribute;
                    relAtt.Value = rel.Id;
                }
                else if (draw is ExcelPicture)
                {
                    ExcelPicture pic = draw as ExcelPicture;
                    var          uri = pic.UriPic;
                    if (!workSheet.Workbook._package.Package.PartExists(uri))
                    {
                        var picPart = workSheet.Workbook._package.Package.CreatePart(uri, pic.ContentType, CompressionOption.NotCompressed);
                        pic.Image.Save(picPart.GetStream(FileMode.Create, FileAccess.Write), pic.ImageFormat);
                    }

                    var          prevRelID = draw.TopNode.SelectSingleNode("xdr:pic/xdr:blipFill/a:blip/@r:embed", Copy.Drawings.NameSpaceManager).Value;
                    var          rel       = part.CreateRelationship(PackUriHelper.GetRelativeUri(workSheet.WorksheetUri, uri), TargetMode.Internal, ExcelPackage.schemaRelationships + "/image");
                    XmlAttribute relAtt    = drawXml.SelectSingleNode(string.Format("//xdr:pic/xdr:blipFill/a:blip/@r:embed[.='{0}']", prevRelID), Copy.Drawings.NameSpaceManager) as XmlAttribute;
                    relAtt.Value = rel.Id;
                }
            }
            //rewrite the drawing xml with the new relID's
            streamDrawing = new StreamWriter(part.GetStream(FileMode.Create, FileAccess.Write));
            streamDrawing.Write(drawXml.OuterXml);
            streamDrawing.Close();
            //}
        }
        private static void SaveDOCX(string fileName, string BodyText, bool IncludeHTML)
        {
            string WordprocessingML = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";

            var pkgOutputDoc = Package.Open(fileName, FileMode.Create, FileAccess.ReadWrite);

            XmlDocument xmlStartPart = new XmlDocument();
            XmlElement  tagDocument  = xmlStartPart.CreateElement("w:document", WordprocessingML);

            xmlStartPart.AppendChild(tagDocument);
            XmlElement tagBody = xmlStartPart.CreateElement("w:body", WordprocessingML);

            tagDocument.AppendChild(tagBody);
            if (IncludeHTML)
            {
                string       relationshipNamespace = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";
                XmlElement   tagAltChunk           = xmlStartPart.CreateElement("w:altChunk", WordprocessingML);
                XmlAttribute RelID = tagAltChunk.Attributes.Append(xmlStartPart.CreateAttribute("r:id", relationshipNamespace));
                RelID.Value = "rId2";
                tagBody.AppendChild(tagAltChunk);
            }
            else
            {
                XmlElement tagParagraph = xmlStartPart.CreateElement("w:p", WordprocessingML);
                tagBody.AppendChild(tagParagraph);
                XmlElement tagRun = xmlStartPart.CreateElement("w:r", WordprocessingML);
                tagParagraph.AppendChild(tagRun);
                XmlElement tagText = xmlStartPart.CreateElement("w:t", WordprocessingML);
                tagRun.AppendChild(tagText);
                XmlNode nodeText = xmlStartPart.CreateNode(XmlNodeType.Text, "w:t", WordprocessingML);
                nodeText.Value = BodyText;
                tagText.AppendChild(nodeText);
            }

            Uri          docuri             = new Uri("/word/document.xml", UriKind.Relative);
            PackagePart  docpartDocumentXML = pkgOutputDoc.CreatePart(docuri, "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml");
            StreamWriter streamStartPart    = new StreamWriter(docpartDocumentXML.GetStream(FileMode.Create, FileAccess.Write));

            xmlStartPart.Save(streamStartPart);
            streamStartPart.Close();
            pkgOutputDoc.Flush();

            pkgOutputDoc.CreateRelationship(docuri, TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument", "rId1");
            pkgOutputDoc.Flush();

            Uri         uriBase         = new Uri("/word/document.xml", UriKind.Relative);
            PackagePart partDocumentXML = pkgOutputDoc.GetPart(uriBase);

            Uri uri = new Uri("/word/websiteinput.html", UriKind.Relative);

            string html = string.Concat("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"><html><head><title></title></head><body>", BodyText, "</body></html>");

            byte[]      Origem       = Encoding.UTF8.GetBytes(html);
            PackagePart altChunkpart = pkgOutputDoc.CreatePart(uri, "text/html");

            using (Stream targetStream = altChunkpart.GetStream())
            {
                targetStream.Write(Origem, 0, Origem.Length);
            }
            Uri relativeAltUri = PackUriHelper.GetRelativeUri(uriBase, uri);

            partDocumentXML.CreateRelationship(relativeAltUri, TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk", "rId2");

            pkgOutputDoc.Close();
        }
Example #27
0
        public static void SaveDOCX(Stream fileStream, string BodyText, bool IncludeHTML)
        {
            // use the Open XML namespace for WordprocessingML:
            string WordprocessingML = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";

            // create a new package (Open XML document) ...
            Package pkgOutputDoc = null;

            pkgOutputDoc = Package.Open(fileStream, FileMode.OpenOrCreate, FileAccess.ReadWrite);

            // create the start part, set up the nested structure ...
            XmlDocument xmlStartPart = new XmlDocument();
            XmlElement  tagDocument  = xmlStartPart.CreateElement("w:document", WordprocessingML);

            xmlStartPart.AppendChild(tagDocument);
            XmlElement tagBody = xmlStartPart.CreateElement("w:body", WordprocessingML);

            tagDocument.AppendChild(tagBody);
            if (IncludeHTML)
            {
                string relationshipNamespace = "http://schemas.openxmlformats.org/officeDocument/2006/relationships";

                XmlElement   tagAltChunk = xmlStartPart.CreateElement("w:altChunk", WordprocessingML);
                XmlAttribute RelID       = tagAltChunk.Attributes.Append(xmlStartPart.CreateAttribute("r:id", relationshipNamespace));
                RelID.Value = "rId2";
                tagBody.AppendChild(tagAltChunk);
            }
            else
            {
                XmlElement tagParagraph = xmlStartPart.CreateElement("w:p", WordprocessingML);
                tagBody.AppendChild(tagParagraph);
                XmlElement tagRun = xmlStartPart.CreateElement("w:r", WordprocessingML);
                tagParagraph.AppendChild(tagRun);
                XmlElement tagText = xmlStartPart.CreateElement("w:t", WordprocessingML);
                tagRun.AppendChild(tagText);

                // Note nesting of tags for the WordprocessingML document (the "start part") ...
                // w:document contains ...
                //     w:body, which contains ...
                //         w:p (paragraph), which contains ...
                //             w:r (run), which contains ...
                //                 w:t (text)

                // insert text into the start part, as a "Text" node ...
                XmlNode nodeText = xmlStartPart.CreateNode(XmlNodeType.Text, "w:t", WordprocessingML);
                nodeText.Value = BodyText;
                tagText.AppendChild(nodeText);
            }

            // save the main document part (document.xml) ...
            Uri          docuri             = new Uri("/word/document.xml", UriKind.Relative);
            PackagePart  docpartDocumentXML = pkgOutputDoc.CreatePart(docuri, "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml");
            StreamWriter streamStartPart    = new StreamWriter(docpartDocumentXML.GetStream(FileMode.Create, FileAccess.Write));

            xmlStartPart.Save(streamStartPart);
            streamStartPart.Close();
            pkgOutputDoc.Flush();

            // create the relationship part
            pkgOutputDoc.CreateRelationship(docuri, TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument", "rId1");
            pkgOutputDoc.Flush();

            //this part was taken from the HTMLtoWordML project on CodeProject, authored by Paulo Vaz, which borrowed work from Praveen Bonakurthi
            //original project location for Paulo's project is http://www.codeproject.com/KB/aspnet/HTMLtoWordML.aspx, and it contains a link to the article
            //by Praveen Bonakurthi. I didn't want to have a resident template on the server, so it led to this project

            Uri         uriBase         = new Uri("/word/document.xml", UriKind.Relative);
            PackagePart partDocumentXML = pkgOutputDoc.GetPart(uriBase);

            Uri uri = new Uri("/word/websiteinput.html", UriKind.Relative);

            //creating the html file from the output of the webform
            string html = string.Concat("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"><html><head><title></title></head><body>", BodyText, "</body></html>");

            byte[]      Origem       = Encoding.UTF8.GetBytes(html);
            PackagePart altChunkpart = pkgOutputDoc.CreatePart(uri, "text/html");

            using (Stream targetStream = altChunkpart.GetStream())
            {
                targetStream.Write(Origem, 0, Origem.Length);
            }
            Uri relativeAltUri = PackUriHelper.GetRelativeUri(uriBase, uri);

            //create the relationship in the final file
            partDocumentXML.CreateRelationship(relativeAltUri, TargetMode.Internal, "http://schemas.openxmlformats.org/officeDocument/2006/relationships/aFChunk", "rId2");

            //close the document ...
            pkgOutputDoc.Flush();
        }
Example #28
0
        private void SerializeHyperlink(PathGeometry geometry, String id, Uri navigateUri)
        {
            String    nameForType = "Path";
            XmlWriter writer      = LinkXmlWriter;

            bool useID = false;

            if (!String.IsNullOrEmpty(id))
            {
                useID = AddLinkTarget(id);
            }

            if (!useID && navigateUri == null)
            {
                // don't write out this path
                return;
            }

            writer.WriteStartElement(nameForType);

            if (navigateUri != null)
            {
                if (IsFragment(navigateUri))
                {
                    XpsPackagingPolicy   policy   = SerializationManager.PackagingPolicy as XpsPackagingPolicy;
                    XpsOMPackagingPolicy omPolicy = SerializationManager.PackagingPolicy as XpsOMPackagingPolicy;
                    if (policy == null && omPolicy == null)
                    {
                        throw new XpsSerializationException(SR.Get(SRID.ReachSerialization_WrongPackagingPolicy));
                    }

                    Uri documentUri = SerializationManager.PackagingPolicy.CurrentFixedDocumentUri;
                    Uri pageUri     = SerializationManager.PackagingPolicy.CurrentFixedPageUri;

                    Uri    relativeUri         = PackUriHelper.GetRelativeUri(pageUri, documentUri);
                    string documentFragmentUri = relativeUri.OriginalString + navigateUri.OriginalString;
                    WriteAttribute(writer, "FixedPage.NavigateUri", documentFragmentUri);
                }
                else
                {
                    WriteAttribute(writer, "FixedPage.NavigateUri", navigateUri);
                }
                WriteAttribute(writer, "Fill", "#00000000");
            }
            else
            {
                WriteAttribute(writer, "Opacity", "0");
            }

            if (useID)
            {
                WriteAttribute(writer, "Name", id);
            }

            geometry.FillRule = FillRule.Nonzero;

            Size pageSize = ((IXpsSerializationManager)_serializationManager).FixedPageSize;

            VisualTreeFlattener.WritePath(writer, geometry, pageSize);

            writer.WriteEndElement();
        }