Wednesday, August 6, 2014

Insert Image in word document at a particular position using OPEN XML SDK

Insert Image in word document in particular position using OPEN XML SDK

#region Process Picture in word document
        private void ProcessImage(WordprocessingDocument myDoc)
        {
            try
            {
                foreach (Paragraph p in myDoc.MainDocumentPart.Document.Body.Descendants<Paragraph>().Where<Paragraph>(p => p.InnerText.ToUpper().Contains("{{Image}}")))
                {
                    string SignOfUser = string.Empty;
                    if (p.InnerText.Contains("{{") && p.InnerText.Contains("}}") && p.InnerText.Contains(":"))
                    {
                        SignOfUser = p.InnerText.Replace("{{", "").Replace("}}", "").Split(':')[1];
                    }
                    IEnumerable<Text> texts = p.Descendants<Text>();
                    foreach (Text text in texts)
                    {
                        text.Text = "";
                    }

                    if (string.IsNullOrEmpty(SignOfUser) == false)
                    {
                        SPFile file = GetWatermarkImage(SignOfUser + ".jpeg");
                        if (file != null)
                        {
                            MainDocumentPart mainPart = myDoc.MainDocumentPart;
                            ImagePart imagePart = mainPart.AddImagePart(ImagePartType.Jpeg);
                            using (Stream stream = file.OpenBinaryStream())
                            {
                                imagePart.FeedData(stream);
                            }
                            AddImageToBody(myDoc, p, mainPart.GetIdOfPart(imagePart));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ULSLogService.DisplayError(this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name, ex);
            }
        }

        private void AddImageToBody(WordprocessingDocument wordDoc, Paragraph p, string relationshipId)
        {
            try
            {
                // Define the reference of the image.
                Drawing element =
                     new Drawing(
                         new OPDrawingWP.Inline(
                             new OPDrawingWP.Extent() { Cx = 999000L, Cy = 799000L },
                             new OPDrawingWP.EffectExtent()
                             {
                                 LeftEdge = 0L,
                                 TopEdge = 0L,
                                 RightEdge = 0L,
                                 BottomEdge = 0L
                             },
                             new OPDrawingWP.DocProperties()
                             {
                                 Id = (UInt32Value)1U,
                                 Name = "Picture 1"
                             },
                             new OPDrawingWP.NonVisualGraphicFrameDrawingProperties(
                                 new DocumentFormat.OpenXml.Drawing.GraphicFrameLocks() { NoChangeAspect = true }),
                             new OPDrawing.Graphic(
                                 new OPDrawing.GraphicData(
                                     new PIC.Picture(
                                         new PIC.NonVisualPictureProperties(
                                             new PIC.NonVisualDrawingProperties()
                                             {
                                                 Id = (UInt32Value)0U,
                                                 Name = "New Bitmap Image.jpg"
                                             },
                                             new PIC.NonVisualPictureDrawingProperties()),
                                         new PIC.BlipFill(
                                             new OPDrawing.Blip(
                                                 new OPDrawing.BlipExtensionList(
                                                     new OPDrawing.BlipExtension()
                                                     {
                                                         Uri =
                                                           "{28A0092B-C50C-407E-A947-70E740481C1C}"
                                                     })
                                             )
                                             {
                                                 Embed = relationshipId,
                                                 CompressionState =
                                                 OPDrawing.BlipCompressionValues.Print
                                             },
                                             new OPDrawing.Stretch(
                                                 new OPDrawing.FillRectangle())),
                                         new PIC.ShapeProperties(
                                             new OPDrawing.Transform2D(
                                                 new OPDrawing.Offset() { X = 0L, Y = 0L },
                                                 new OPDrawing.Extents() { Cx = 999000L, Cy = 799000L }),
                                             new OPDrawing.PresetGeometry(
                                                 new OPDrawing.AdjustValueList()
                                             ) { Preset = OPDrawing.ShapeTypeValues.Rectangle }))
                                 ) { Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" })
                         )
                         {
                             DistanceFromTop = (UInt32Value)0U,
                             DistanceFromBottom = (UInt32Value)0U,
                             DistanceFromLeft = (UInt32Value)0U,
                             DistanceFromRight = (UInt32Value)0U,
                             EditId = "50D07946"
                         });

                // Append the reference to paragraph, the element should be in a Run.
                p.AppendChild(new Run(element));
               
            }
            catch (Exception ex)
            {
                ULSLogService.DisplayError(this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name, ex);
            }
        }


        #endregion

No comments:

Post a Comment