Beispiel #1
0
        }        //Add a new image to the compare collection

        internal static string SavePicture(Image image, IPictureContainer container)
        {
#if (Core)
            byte[] img = ImageCompat.GetImageAsByteArray(image);
#else
            ImageConverter ic  = new ImageConverter();
            byte[]         img = (byte[])ic.ConvertTo(image, typeof(byte[]));
#endif
            var store = container.RelationDocument.Package.PictureStore;
            var ii    = store.AddImage(img);

            container.ImageHash = ii.Hash;
            var hashes = container.RelationDocument.Hashes;
            if (hashes.ContainsKey(ii.Hash))
            {
                var relID = hashes[ii.Hash].RelId;
                var rel   = container.RelationDocument.RelatedPart.GetRelationship(relID);
                container.UriPic = UriHelper.ResolvePartUri(rel.SourceUri, rel.TargetUri);
                return(relID);
            }
            else
            {
                container.UriPic    = ii.Uri;
                container.ImageHash = ii.Hash;
            }

            //Set the Image and save it to the package.
            container.RelPic = container.RelationDocument.RelatedPart.CreateRelationship(UriHelper.GetRelativeUri(container.RelationDocument.RelatedUri, container.UriPic), Packaging.TargetMode.Internal, ExcelPackage.schemaRelationships + "/image");

            //AddNewPicture(img, picRelation.Id);
            hashes.Add(ii.Hash, new HashInfo(container.RelPic.Id));

            return(container.RelPic.Id);
        }
Beispiel #2
0
        /// <summary>
        /// Inserts a picture at the end of the text in the header or footer
        /// </summary>
        /// <param name="PictureFile">The image object containing the Picture</param>
        /// <param name="Alignment">Alignment. The image object will be inserted at the end of the Text.</param>
        public ExcelVmlDrawingPicture InsertPicture(FileInfo PictureFile, PictureAlignment Alignment)
        {
            string id = ValidateImage(Alignment);

            Image Picture;

            try
            {
                if (!PictureFile.Exists)
                {
                    throw (new FileNotFoundException(string.Format("{0} is missing", PictureFile.FullName)));
                }
                Picture = Image.FromFile(PictureFile.FullName);
            }
            catch (Exception ex)
            {
                throw (new InvalidDataException("File is not a supported image-file or is corrupt", ex));
            }

            string contentType = PictureStore.GetContentType(PictureFile.Extension);
            var    uriPic      = XmlHelper.GetNewUri(_ws._package.ZipPackage, "/xl/media/" + PictureFile.Name.Substring(0, PictureFile.Name.Length - PictureFile.Extension.Length) + "{0}" + PictureFile.Extension);

#if (Core)
            var imgBytes = ImageCompat.GetImageAsByteArray(Picture);
#else
            var    ic       = new ImageConverter();
            byte[] imgBytes = (byte[])ic.ConvertTo(Picture, typeof(byte[]));
#endif

            var ii = _ws.Workbook._package.PictureStore.AddImage(imgBytes, uriPic, contentType);

            return(AddImage(Picture, id, ii));
        }
Beispiel #3
0
        internal ExcelPicture(ExcelDrawings drawings, XmlNode node, ExcelGroupShape shape = null) :
            base(drawings, node, "xdr:pic", "xdr:nvPicPr/xdr:cNvPr", shape)
        {
            XmlNode picNode = node.SelectSingleNode("xdr:pic/xdr:blipFill/a:blip", drawings.NameSpaceManager);

            if (picNode != null)
            {
                IPictureContainer container = this;
                container.RelPic = drawings.Part.GetRelationship(picNode.Attributes["r:embed"].Value);
                container.UriPic = UriHelper.ResolvePartUri(drawings.UriDrawing, container.RelPic.TargetUri);

                Part = drawings.Part.Package.GetPart(container.UriPic);
                FileInfo f = new FileInfo(container.UriPic.OriginalString);
                ContentType = PictureStore.GetContentType(f.Extension);
                _image      = Image.FromStream(Part.GetStream());

#if (Core)
                byte[] iby = ImageCompat.GetImageAsByteArray(_image);
#else
                ImageConverter ic  = new ImageConverter();
                var            iby = (byte[])ic.ConvertTo(_image, typeof(byte[]));
#endif
                var ii = _drawings._package.PictureStore.LoadImage(iby, container.UriPic, Part);
                container.ImageHash = ii.Hash;
            }
        }
        private void DeletePrevImage()
        {
            var relID = GetXmlNodeString(BACKGROUNDPIC_PATH);

            if (relID != "")
            {
#if (Core)
                var img = ImageCompat.GetImageAsByteArray(Image);
#else
                var    ic  = new ImageConverter();
                byte[] img = (byte[])ic.ConvertTo(Image, typeof(byte[]));
#endif
                var ii = _workSheet.Workbook._package.GetImageInfo(img);

                //Delete the relation
                _workSheet.Part.DeleteRelationship(relID);

                //Delete the image if there are no other references.
                if (ii != null && ii.RefCount == 1)
                {
                    if (_workSheet.Part.Package.PartExists(ii.Uri))
                    {
                        _workSheet.Part.Package.DeletePart(ii.Uri);
                    }
                }
            }
        }
Beispiel #5
0
        private string SavePicture(Image image)
        {
#if (Core)
            byte[] img = ImageCompat.GetImageAsByteArray(image);
#else
            ImageConverter ic  = new ImageConverter();
            byte[]         img = (byte[])ic.ConvertTo(image, typeof(byte[]));
#endif
            var ii = _drawings._package.AddImage(img);


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

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

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

            return(RelPic.Id);
        }
Beispiel #6
0
        internal static byte[] ImageToByteArray(Image image)
        {
#if (Core)
            return(ImageCompat.GetImageAsByteArray(image));
#else
            ImageConverter ic = new ImageConverter();
            return((byte[])ic.ConvertTo(image, typeof(byte[])));
#endif
        }
Beispiel #7
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);

#if (Core)
            var img = ImageCompat.GetImageAsByteArray(_image);
#else
            ImageConverter ic  = new ImageConverter();
            var            img = (byte[])ic.ConvertTo(_image, typeof(byte[]));
#endif

            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(UriHelper.GetRelativeUri(drawings.UriDrawing, ii.Uri), Packaging.TargetMode.Internal, ExcelPackage.schemaRelationships + "/image");
                relID  = RelPic.Id;
                _drawings._hashes.Add(ii.Hash, relID);
                AddNewPicture(img, relID);
            }
            else
            {
                relID = drawings._hashes[ii.Hash];
                if (drawings.Part.TryGetRelationshipById(relID, out var rel))
                {
                    UriPic = UriHelper.ResolvePartUri(rel.SourceUri, rel.TargetUri);
                }
            }
            ImageHash = ii.Hash;
            _height   = Image.Height;
            _width    = Image.Width;
            SetPosDefaults(Image);
            //Create relationship
            node.SelectSingleNode("xdr:pic/xdr:blipFill/a:blip/@r:embed", NameSpaceManager).Value = relID;
            package.Flush();
        }
Beispiel #8
0
        /// <summary>
        /// Inserts a picture at the end of the text in the header or footer
        /// </summary>
        /// <param name="Picture">The image object containing the Picture</param>
        /// <param name="Alignment">Alignment. The image object will be inserted at the end of the Text.</param>
        public ExcelVmlDrawingPicture InsertPicture(Image Picture, PictureAlignment Alignment)
        {
            string id = ValidateImage(Alignment);

            //Add the image

            var img = ImageCompat.GetImageAsByteArray(Picture);

            var ii = _ws.Workbook._package.AddImage(img);

            return(AddImage(Picture, id, ii));
        }
Beispiel #9
0
        internal ExcelPicture(ExcelDrawings drawings, XmlNode node, FileInfo imageFile, Uri hyperlink) :
            base(drawings, node, "xdr:pic", "xdr:nvPicPr/xdr:cNvPr")
        {
            CreatePicNode(node);

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

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

            _image    = Image.FromStream(imagestream);
            Hyperlink = hyperlink;

#if (Core)
            var img = ImageCompat.GetImageAsByteArray(_image);
#else
            ImageConverter ic  = new ImageConverter();
            var            img = (byte[])ic.ConvertTo(_image, typeof(byte[]));
#endif
            IPictureContainer container = this;
            imagestream.Close();
            container.UriPic = GetNewUri(package, "/xl/media/{0}" + imageFile.Name);
            var    store = _drawings._package.PictureStore;
            var    ii    = store.AddImage(img, container.UriPic, ContentType);
            string relId;
            if (!_drawings._hashes.ContainsKey(ii.Hash))
            {
                Part             = ii.Part;
                container.RelPic = drawings.Part.CreateRelationship(UriHelper.GetRelativeUri(drawings.UriDrawing, ii.Uri), Packaging.TargetMode.Internal, ExcelPackage.schemaRelationships + "/image");
                relId            = container.RelPic.Id;
                _drawings._hashes.Add(ii.Hash, new HashInfo(relId));
                AddNewPicture(img, relId);
            }
            else
            {
                relId = _drawings._hashes[ii.Hash].RelId;
                var rel = _drawings.Part.GetRelationship(relId);
                container.UriPic = UriHelper.ResolvePartUri(rel.SourceUri, rel.TargetUri);
            }
            container.ImageHash = ii.Hash;
            _height             = Image.Height;
            _width = Image.Width;
            SetPosDefaults(Image);
            //Create relationship
            node.SelectSingleNode("xdr:pic/xdr:blipFill/a:blip/@r:embed", NameSpaceManager).Value = relId;
            package.Flush();
        }
Beispiel #10
0
        /// <summary>
        /// Inserts a picture at the end of the text in the header or footer
        /// </summary>
        /// <param name="Picture">The image object containing the Picture</param>
        /// <param name="Alignment">Alignment. The image object will be inserted at the end of the Text.</param>
        public ExcelVmlDrawingPicture InsertPicture(Image Picture, PictureAlignment Alignment)
        {
            string id = ValidateImage(Alignment);

            //Add the image
#if (NETSTANDARD)
            var img = ImageCompat.GetImageAsByteArray(Picture);
#else
            ImageConverter ic  = new ImageConverter();
            byte[]         img = (byte[])ic.ConvertTo(Picture, typeof(byte[]));
#endif

            var ii = _ws.Workbook._package.AddImage(img, ExcelPicture.GetImageCodecInfo(Picture));

            return(AddImage(Picture, id, ii));
        }
Beispiel #11
0
        internal ExcelPicture(ExcelDrawings drawings, XmlNode node) :
            base(drawings, node, "xdr:pic/xdr:nvPicPr/xdr:cNvPr/@name")
        {
            XmlNode picNode = node.SelectSingleNode("xdr:pic/xdr:blipFill/a:blip", drawings.NameSpaceManager);

            if (picNode == null || !drawings.Part.TryGetRelationshipById(picNode.Attributes["r:embed"].Value, out var relation))
            {
                return;
            }

            RelPic = relation;
            UriPic = UriHelper.ResolvePartUri(drawings.UriDrawing, RelPic.TargetUri);

            Part = drawings.Part.Package.GetPart(UriPic);
            FileInfo f = new FileInfo(UriPic.OriginalString);

            ContentType = GetContentType(f.Extension);
            _image      = Image.FromStream(Part.GetStream());

#if (Core)
            byte[] iby = ImageCompat.GetImageAsByteArray(_image);
#else
            ImageConverter ic  = new ImageConverter();
            var            iby = (byte[])ic.ConvertTo(_image, typeof(byte[]));
#endif
            var ii = _drawings._package.LoadImage(iby, UriPic, Part);
            ImageHash = ii.Hash;

            string relID = GetXmlNodeString("xdr:pic/xdr:nvPicPr/xdr:cNvPr/a:hlinkClick/@r:id");
            if (!drawings.Part.TryGetRelationshipById(relID, out relation))
            {
                return;
            }

            HypRel = relation;
            if (HypRel.TargetUri.IsAbsoluteUri)
            {
                _hyperlink = new ExcelHyperLink(HypRel.TargetUri.AbsoluteUri);
            }
            else
            {
                _hyperlink = new ExcelHyperLink(HypRel.TargetUri.OriginalString, UriKind.Relative);
            }
            ((ExcelHyperLink)_hyperlink).ToolTip = GetXmlNodeString("xdr:pic/xdr:nvPicPr/xdr:cNvPr/a:hlinkClick/@tooltip");
        }
Beispiel #12
0
        public static OfficeOpenXml.Drawing.Custom.ExcelPicture AddPicture(this OfficeOpenXml.Drawing.ExcelDrawings excelDrawings, string name, Image image, Uri link)
        {
#if (Core)
            byte[] img = ImageCompat.GetImageAsByteArray(image);
#else
            ImageConverter ic  = new ImageConverter();
            byte[]         img = (byte[])ic.ConvertTo(image, typeof(byte[]));
#endif

            return(excelDrawings.AddPicture(name, new OfficeOpenXml.Drawing.Custom.ImageModel
            {
                Data = img,
                Height = image.Height,
                Width = image.Width,
                HorizontalResolution =
                    image.HorizontalResolution,
                VerticalResolution = image.HorizontalResolution
            }, link));
        }
Beispiel #13
0
        internal ExcelPicture(ExcelDrawings drawings, XmlNode node, ExcelGroupShape shape = null) :
            base(drawings, node, "xdr:pic", "xdr:nvPicPr/xdr:cNvPr", shape)
        {
            XmlNode picNode = node.SelectSingleNode("xdr:pic/xdr:blipFill/a:blip", drawings.NameSpaceManager);

            if (picNode != null)
            {
                IPictureContainer container = this;
                container.RelPic = drawings.Part.GetRelationship(picNode.Attributes["embed", ExcelPackage.schemaRelationships].Value);
                container.UriPic = UriHelper.ResolvePartUri(drawings.UriDrawing, container.RelPic.TargetUri);

                Part = drawings.Part.Package.GetPart(container.UriPic);
                var extension = Path.GetExtension(container.UriPic.OriginalString);
                ContentType = PictureStore.GetContentType(extension);

#if (Core)
                try
                {
                    _image = Image.FromStream(Part.GetStream());
                }
                catch
                {
                    if (extension.ToLower() == ".emf" || extension.ToLower() == ".wmf") //Not supported in linux environments, so we ignore them and set image to null.
                    {
                        _image = null;
                        return;
                    }
                    else
                    {
                        throw;
                    }
                }
                byte[] iby = ImageCompat.GetImageAsByteArray(_image);
#else
                _image = Image.FromStream(Part.GetStream());
                ImageConverter ic  = new ImageConverter();
                var            iby = (byte[])ic.ConvertTo(_image, typeof(byte[]));
#endif
                var ii = _drawings._package.PictureStore.LoadImage(iby, container.UriPic, Part);
                container.ImageHash = ii.Hash;
            }
        }
Beispiel #14
0
        internal ExcelPicture(ExcelDrawings drawings, XmlNode node) :
            base(drawings, node, "xdr:pic/xdr:nvPicPr/xdr:cNvPr/@name")
        {
            XmlNode picNode = node.SelectSingleNode("xdr:pic/xdr:blipFill/a:blip", drawings.NameSpaceManager);

            if (picNode != null)
            {
                RelPic = drawings.Part.GetRelationship(picNode.Attributes["r:embed"].Value);
                UriPic = UriHelper.ResolvePartUri(drawings.UriDrawing, RelPic.TargetUri);

                Part        = drawings.Part.Package.GetPart(UriPic);
                ContentType = Path.GetExtension(UriPic.OriginalString);
                _image      = Image.FromStream(Part.GetStream());

#if (Core)
                byte[] iby = ImageCompat.GetImageAsByteArray(_image);
#else
                ImageConverter ic  = new ImageConverter();
                var            iby = (byte[])ic.ConvertTo(_image, typeof(byte[]));
#endif
                var ii = _drawings._package.LoadImage(iby, UriPic, Part);
                ImageHash = ii.Hash;

                //_height = _image.Height;
                //_width = _image.Width;
                string relID = GetXmlNodeString("xdr:pic/xdr:nvPicPr/xdr:cNvPr/a:hlinkClick/@r:id");
                if (!string.IsNullOrEmpty(relID))
                {
                    HypRel = drawings.Part.GetRelationship(relID);
                    if (HypRel.TargetUri.IsAbsoluteUri)
                    {
                        _hyperlink = new ExcelHyperLink(HypRel.TargetUri.AbsoluteUri);
                    }
                    else
                    {
                        _hyperlink = new ExcelHyperLink(HypRel.TargetUri.OriginalString, UriKind.Relative);
                    }
                    ((ExcelHyperLink)_hyperlink).ToolTip = GetXmlNodeString("xdr:pic/xdr:nvPicPr/xdr:cNvPr/a:hlinkClick/@tooltip");
                }
            }
        }
        private void DeletePrevImage()
        {
            var relID = GetXmlNodeString(BACKGROUNDPIC_PATH);

            if (relID != "")
            {
                var img = ImageCompat.GetImageAsByteArray(Image);

                var ii = _workSheet.Workbook._package.GetImageInfo(img);

                //Delete the relation
                _workSheet.Part.DeleteRelationship(relID);

                //Delete the image if there are no other references.
                if (ii != null && ii.RefCount == 1)
                {
                    if (_workSheet.Part.Package.PartExists(ii.Uri))
                    {
                        _workSheet.Part.Package.DeletePart(ii.Uri);
                    }
                }
            }
        }