/// <summary> /// Insert Image into Slide /// </summary> /// <param name="filePath">PowerPoint Path</param> /// <param name="imagePath">Image Path</param> /// <param name="imageExt">Image Extension</param> public void InsertImageInLastSlide(Slide slide, string imagePath, string imageExt) { // Creates a Picture instance and adds its children. P.Picture picture = new P.Picture(); string embedId = string.Empty; embedId = "rId" + (slide.Elements <P.Picture>().Count() + 915).ToString(); P.NonVisualPictureProperties nonVisualPictureProperties = new P.NonVisualPictureProperties( new P.NonVisualDrawingProperties() { Id = (UInt32Value)4U, Name = "Picture 5" }, new P.NonVisualPictureDrawingProperties(new D.PictureLocks() { NoChangeAspect = true }), new ApplicationNonVisualDrawingProperties()); P.BlipFill blipFill = new P.BlipFill(); Blip blip = new Blip() { Embed = embedId }; // Creates a BlipExtensionList instance and adds its children BlipExtensionList blipExtensionList = new BlipExtensionList(); BlipExtension blipExtension = new BlipExtension() { Uri = "{28A0092B-C50C-407E-A947-70E740481C1C}" }; UseLocalDpi useLocalDpi = new UseLocalDpi() { Val = false }; useLocalDpi.AddNamespaceDeclaration("a14", "http://schemas.microsoft.com/office/drawing/2010/main"); blipExtension.Append(useLocalDpi); blipExtensionList.Append(blipExtension); blip.Append(blipExtensionList); Stretch stretch = new Stretch(); FillRectangle fillRectangle = new FillRectangle(); stretch.Append(fillRectangle); blipFill.Append(blip); blipFill.Append(stretch); // Creates a ShapeProperties instance and adds its children. P.ShapeProperties shapeProperties = new P.ShapeProperties(); D.Transform2D transform2D = new D.Transform2D(); D.Offset offset = new D.Offset() { X = 457200L, Y = 1524000L }; D.Extents extents = new D.Extents() { Cx = 8229600L, Cy = 5029200L }; transform2D.Append(offset); transform2D.Append(extents); D.PresetGeometry presetGeometry = new D.PresetGeometry() { Preset = D.ShapeTypeValues.Rectangle }; D.AdjustValueList adjustValueList = new D.AdjustValueList(); presetGeometry.Append(adjustValueList); shapeProperties.Append(transform2D); shapeProperties.Append(presetGeometry); picture.Append(nonVisualPictureProperties); picture.Append(blipFill); picture.Append(shapeProperties); slide.CommonSlideData.ShapeTree.AppendChild(picture); // Generates content of imagePart. ImagePart imagePart = slide.SlidePart.AddNewPart <ImagePart>(@"image/" + imageExt, embedId); FileStream fileStream = new FileStream(imagePath, FileMode.Open); imagePart.FeedData(fileStream); fileStream.Close(); }
/// <summary> /// Creates an image paragraph. /// </summary> /// <param name="relationshipId">The relationship id.</param> /// <param name="name">The name.</param> /// <param name="description">The description.</param> /// <param name="width">The width.</param> /// <param name="height">The height.</param> /// <returns>The <see cref="Paragraph" /> containing the image.</returns> private DocumentFormat.OpenXml.Wordprocessing.Paragraph CreateImageParagraph( string relationshipId, string name, string description, double width, double height) { // http://msdn.microsoft.com/en-us/library/documentformat.openxml.drawing.extents.aspx // http://polymathprogrammer.com/2009/10/22/english-metric-units-and-open-xml/ // cx (Extent Length) // Specifies the length of the extents rectangle in EMUs. This rectangle shall dictate the size of the object as displayed (the result of any scaling to the original object). // Example: Consider a DrawingML object specified as follows: // <… cx="1828800" cy="200000"/> // The cx attributes specifies that this object has a height of 1828800 EMUs (English Metric Units). end example] // The possible values for this attribute are defined by the ST_PositiveCoordinate simple type (§20.1.10.42). // cy (Extent Width) // Specifies the width of the extents rectangle in EMUs. This rectangle shall dictate the size of the object as displayed (the result of any scaling to the original object). // Example: Consider a DrawingML object specified as follows: // < … cx="1828800" cy="200000"/> // The cy attribute specifies that this object has a width of 200000 EMUs (English Metric Units). end example] // The possible values for this attribute are defined by the ST_PositiveCoordinate simple type (§20.1.10.42). var paragraph1 = new DocumentFormat.OpenXml.Wordprocessing.Paragraph { RsidParagraphAddition = "00D91137", RsidRunAdditionDefault = "00AC08EB" }; var run1 = new Run(); var runProperties1 = new RunProperties(); var noProof1 = new NoProof(); runProperties1.AppendChild(noProof1); var drawing1 = new Drawing(); var inline1 = new Inline { DistanceFromTop = 0U, DistanceFromBottom = 0U, DistanceFromLeft = 0U, DistanceFromRight = 0U }; var extent1 = new Extent { Cx = 5753100L, Cy = 3600450L }; extent1.Cx = (long)(width * 914400); extent1.Cy = (long)(height * 914400); var effectExtent1 = new EffectExtent { LeftEdge = 0L, TopEdge = 0L, RightEdge = 0L, BottomEdge = 0L }; var docProperties1 = new DocProperties { Id = 1U, Name = name, Description = description }; var nonVisualGraphicFrameDrawingProperties1 = new NonVisualGraphicFrameDrawingProperties(); var graphicFrameLocks1 = new GraphicFrameLocks { NoChangeAspect = true }; graphicFrameLocks1.AddNamespaceDeclaration("a", "http://schemas.openxmlformats.org/drawingml/2006/main"); nonVisualGraphicFrameDrawingProperties1.AppendChild(graphicFrameLocks1); var graphic1 = new Graphic(); graphic1.AddNamespaceDeclaration("a", "http://schemas.openxmlformats.org/drawingml/2006/main"); var graphicData1 = new GraphicData { Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" }; var picture1 = new Picture(); picture1.AddNamespaceDeclaration("pic", "http://schemas.openxmlformats.org/drawingml/2006/picture"); var nonVisualPictureProperties1 = new NonVisualPictureProperties(); var nonVisualDrawingProperties1 = new NonVisualDrawingProperties { Id = 0U, Name = name, Description = description }; var nonVisualPictureDrawingProperties1 = new NonVisualPictureDrawingProperties(); var pictureLocks1 = new PictureLocks { NoChangeAspect = true, NoChangeArrowheads = true }; nonVisualPictureDrawingProperties1.AppendChild(pictureLocks1); nonVisualPictureProperties1.AppendChild(nonVisualDrawingProperties1); nonVisualPictureProperties1.AppendChild(nonVisualPictureDrawingProperties1); var blipFill1 = new BlipFill(); var blip1 = new Blip { Embed = relationshipId }; var blipExtensionList1 = new BlipExtensionList(); var blipExtension1 = new BlipExtension { Uri = "{28A0092B-C50C-407E-A947-70E740481C1C}" }; var useLocalDpi1 = new UseLocalDpi { Val = false }; useLocalDpi1.AddNamespaceDeclaration("a14", "http://schemas.microsoft.com/office/drawing/2010/main"); blipExtension1.AppendChild(useLocalDpi1); blipExtensionList1.AppendChild(blipExtension1); blip1.AppendChild(blipExtensionList1); var sourceRectangle1 = new SourceRectangle(); var stretch1 = new Stretch(); var fillRectangle1 = new FillRectangle(); stretch1.AppendChild(fillRectangle1); blipFill1.AppendChild(blip1); blipFill1.AppendChild(sourceRectangle1); blipFill1.AppendChild(stretch1); var shapeProperties1 = new ShapeProperties { BlackWhiteMode = BlackWhiteModeValues.Auto }; var transform2D1 = new Transform2D(); var offset1 = new Offset { X = 0L, Y = 0L }; var extents1 = new Extents { Cx = extent1.Cx, Cy = extent1.Cy }; transform2D1.AppendChild(offset1); transform2D1.AppendChild(extents1); var presetGeometry1 = new PresetGeometry { Preset = ShapeTypeValues.Rectangle }; var adjustValueList1 = new AdjustValueList(); presetGeometry1.AppendChild(adjustValueList1); var noFill1 = new NoFill(); var outline1 = new Outline(); var noFill2 = new NoFill(); outline1.AppendChild(noFill2); shapeProperties1.AppendChild(transform2D1); shapeProperties1.AppendChild(presetGeometry1); shapeProperties1.AppendChild(noFill1); shapeProperties1.AppendChild(outline1); picture1.AppendChild(nonVisualPictureProperties1); picture1.AppendChild(blipFill1); picture1.AppendChild(shapeProperties1); graphicData1.AppendChild(picture1); graphic1.AppendChild(graphicData1); inline1.AppendChild(extent1); inline1.AppendChild(effectExtent1); inline1.AppendChild(docProperties1); inline1.AppendChild(nonVisualGraphicFrameDrawingProperties1); inline1.AppendChild(graphic1); drawing1.AppendChild(inline1); run1.AppendChild(runProperties1); run1.AppendChild(drawing1); paragraph1.AppendChild(run1); return(paragraph1); }
private void insertImage(Slide slide, Size maxSize, string imagePath, int imgId) { P.Picture picture = new P.Picture(); string embedId = string.Empty; string imageExt = getImageType(imagePath); Size imgSize = new ImageInfoUtils().getPPTSize(imagePath); embedId = "rId" + imgId.ToString(); P.NonVisualPictureProperties nonVisualPictureProperties = new P.NonVisualPictureProperties( new P.NonVisualDrawingProperties() { Id = (UInt32Value)4U, Name = "Picture " + imgId }, new P.NonVisualPictureDrawingProperties(new A.PictureLocks() { NoChangeAspect = true }), new P.ApplicationNonVisualDrawingProperties()); picture.Append(nonVisualPictureProperties); UseLocalDpi useLocalDpi = new UseLocalDpi() { Val = false }; useLocalDpi.AddNamespaceDeclaration("a14", "http://schemas.microsoft.com/office/drawing/2010/main"); BlipExtension blipExtension = new BlipExtension() { Uri = "{28A0092B-C50C-407E-A947-70E740481C1C}" }; blipExtension.Append(useLocalDpi); BlipExtensionList blipExtensionList = new BlipExtensionList(); blipExtensionList.Append(blipExtension); Stretch stretch = new Stretch(); FillRectangle fillRectangle = new FillRectangle(); stretch.Append(fillRectangle); P.ShapeProperties shapeProperties = new P.ShapeProperties() { Transform2D = new A.Transform2D() { Offset = new A.Offset() { X = (maxSize.Width - imgSize.Width) / 2, Y = (maxSize.Height - imgSize.Height) / 2 }, Extents = new A.Extents() { Cx = imgSize.Width, Cy = imgSize.Height } } }; shapeProperties.Append(new A.PresetGeometry() { Preset = A.ShapeTypeValues.Rectangle, AdjustValueList = new A.AdjustValueList() }); Blip blip = new Blip() { Embed = embedId }; blip.Append(blipExtensionList); P.BlipFill blipFill = new P.BlipFill() { Blip = blip }; blipFill.Append(stretch); picture.Append(blipFill); picture.Append(shapeProperties); slide.CommonSlideData.ShapeTree.AppendChild(picture); ImagePart imagePart = slide.SlidePart.AddNewPart <ImagePart>(imageExt, embedId); FileStream fileStream = new FileStream(imagePath, FileMode.Open); imagePart.FeedData(fileStream); fileStream.Close(); }
private void insert(SlidePart slidePart, string imagePath, string imgIdx, uint uid) { P.Picture picture = new P.Picture(); string embedId = imgIdx; P.NonVisualPictureProperties nonVisualPictureProperties = new P.NonVisualPictureProperties( new P.NonVisualDrawingProperties() { Id = uid--, Name = "Picture 5" }, new P.NonVisualPictureDrawingProperties(new A.PictureLocks() { NoChangeAspect = true }), new ApplicationNonVisualDrawingProperties()); P.BlipFill blipFill = new P.BlipFill(); BlipExtensionList blipExtensionList = new BlipExtensionList(); BlipExtension blipExtension = new BlipExtension() { Uri = "{28A0092B-C50C-407E-A947-70E740481C1C}" }; UseLocalDpi useLocalDpi = new UseLocalDpi() { Val = false }; useLocalDpi.AddNamespaceDeclaration("a14", "http://schemas.microsoft.com/office/drawing/2010/main"); blipExtension.Append(useLocalDpi); blipExtensionList.Append(blipExtension); Blip blip = new Blip() { Embed = embedId }; blip.Append(blipExtensionList); Stretch stretch = new Stretch(); FillRectangle fillRectangle = new FillRectangle(); stretch.Append(fillRectangle); blipFill.Append(blip); blipFill.Append(stretch); // TODO calc the size A.Transform2D transform2D = new A.Transform2D(); A.Offset offset = new A.Offset() { X = 457200L, Y = 1524000L }; A.Extents extents = new A.Extents() { Cx = 8229600L, Cy = 5029200L }; transform2D.Append(offset); transform2D.Append(extents); A.PresetGeometry presetGeometry = new A.PresetGeometry() { Preset = A.ShapeTypeValues.Rectangle }; A.AdjustValueList adjustValueList = new A.AdjustValueList(); presetGeometry.Append(adjustValueList); P.ShapeProperties shapeProperties = new P.ShapeProperties(); shapeProperties.Append(transform2D); shapeProperties.Append(presetGeometry); picture.Append(nonVisualPictureProperties); picture.Append(blipFill); picture.Append(shapeProperties); slidePart.Slide.CommonSlideData.ShapeTree.AppendChild(picture); var ext = System.IO.Path.GetExtension(imagePath).Substring(1); ext = ext.Equals("png", StringComparison.OrdinalIgnoreCase) ? "image/png" : "image/jpeg"; ImagePart imagePart = slidePart.AddNewPart <ImagePart>(ext, embedId); using (FileStream fileStream = new FileStream(imagePath, FileMode.Open)) { imagePart.FeedData(fileStream); } }
public Run GetRun(RunProperties runProperties) { var run = new Run { RunProperties = runProperties.CloneNode() }; run.RunProperties.AppendChild(new NoProof()); var drawing = new Drawing(); var inline = new Inline { DistanceFromTop = (UInt32Value)0U, DistanceFromBottom = (UInt32Value)0U, DistanceFromLeft = (UInt32Value)0U, DistanceFromRight = (UInt32Value)0U }; var nonVisualGraphicFrameDrawingProperties1 = new Wp.NonVisualGraphicFrameDrawingProperties(); var graphicFrameLocks1 = new A.GraphicFrameLocks() { NoChangeAspect = true }; graphicFrameLocks1.AddNamespaceDeclaration("a", "http://schemas.openxmlformats.org/drawingml/2006/main"); nonVisualGraphicFrameDrawingProperties1.Append(graphicFrameLocks1); var graphic1 = new Graphic(); graphic1.AddNamespaceDeclaration("a", "http://schemas.openxmlformats.org/drawingml/2006/main"); var graphicData1 = new GraphicData() { Uri = "http://schemas.openxmlformats.org/drawingml/2006/picture" }; var picture1 = new DocumentFormat.OpenXml.Drawing.Pictures.Picture(); picture1.AddNamespaceDeclaration("pic", "http://schemas.openxmlformats.org/drawingml/2006/picture"); var nonVisualPictureProperties1 = new DocumentFormat.OpenXml.Drawing.Pictures.NonVisualPictureProperties(); var nonVisualDrawingProperties1 = new DocumentFormat.OpenXml.Drawing.Pictures.NonVisualDrawingProperties() { Id = (UInt32Value)1U, Name = _config.Name }; var nonVisualPictureDrawingProperties1 = new DocumentFormat.OpenXml.Drawing.Pictures.NonVisualPictureDrawingProperties(); nonVisualPictureProperties1.Append(nonVisualDrawingProperties1); nonVisualPictureProperties1.Append(nonVisualPictureDrawingProperties1); var blipFill1 = new Pic.BlipFill(); var blip1 = new Blip() { Embed = _config.Name }; var blipExtensionList1 = new BlipExtensionList(); var blipExtension1 = new BlipExtension() { Uri = "{28A0092B-C50C-407E-A947-70E740481C1C}" }; var useLocalDpi1 = new A14.UseLocalDpi() { Val = false }; useLocalDpi1.AddNamespaceDeclaration("a14", "http://schemas.microsoft.com/office/drawing/2010/main"); blipExtension1.Append(useLocalDpi1); blipExtensionList1.Append(blipExtension1); blip1.Append(blipExtensionList1); var stretch1 = new Stretch(); var fillRectangle1 = new FillRectangle(); stretch1.Append(fillRectangle1); blipFill1.Append(blip1); blipFill1.Append(stretch1); var shapeProperties1 = new DocumentFormat.OpenXml.Drawing.Pictures.ShapeProperties(); var transform2D1 = new Transform2D(); var offset1 = new Offset() { X = 0L, Y = 0L }; transform2D1.Append(offset1); var presetGeometry1 = new PresetGeometry() { Preset = ShapeTypeValues.Rectangle }; var adjustValueList1 = new AdjustValueList(); presetGeometry1.Append(adjustValueList1); shapeProperties1.Append(transform2D1); shapeProperties1.Append(presetGeometry1); picture1.Append(nonVisualPictureProperties1); picture1.Append(blipFill1); picture1.Append(shapeProperties1); graphicData1.Append(picture1); graphic1.Append(graphicData1); inline.Append(nonVisualGraphicFrameDrawingProperties1); inline.Append(graphic1); drawing.Append(inline); run.AppendChild(drawing); return(run); }
public static void AddSvg(string docPath, string svgPath) { if (docPath == null) { throw new ArgumentNullException(nameof(docPath)); } if (svgPath == null) { throw new ArgumentNullException(nameof(svgPath)); } using (PresentationDocument presentationDocument = PresentationDocument.Open(docPath, true)) { // Get the relationship ID of the first slide. PresentationPart presentationPart = presentationDocument.PresentationPart; // Verify that the presentation part and presentation exist. if (presentationPart != null && presentationPart.Presentation != null) { OpenXmlElementList slideIds = presentationPart.Presentation.SlideIdList.ChildElements; if (slideIds.Count > 0) { string relId = (slideIds[0] as SlideId).RelationshipId; SlidePart slidePart = (SlidePart)presentationPart.GetPartById(relId); // Get count of relationships and increment by one to make next unique id int partsCount = slidePart.Parts.Count(); string pngId = $"rId{++partsCount}"; string svgId = $"rId{++partsCount}"; var creationId = new DocumentFormat.OpenXml.Office2016.Drawing.CreationId(); creationId.AddNamespaceDeclaration("a16", "http://schemas.microsoft.com/office/drawing/2014/main"); creationId.Id = "{E36DC281-2F17-44E3-80EA-AB5BFA90E4D7}"; var picture = new DocumentFormat.OpenXml.Presentation.Picture(); // add non visual properties to picture picture.NonVisualPictureProperties = new DocumentFormat.OpenXml.Presentation.NonVisualPictureProperties(); picture.NonVisualPictureProperties.NonVisualDrawingProperties = new DocumentFormat.OpenXml.Presentation.NonVisualDrawingProperties() { Id = new UInt32Value((uint)++partsCount), Name = "Picture 1" }; picture.NonVisualPictureProperties.NonVisualDrawingProperties.AppendChild(new DocumentFormat.OpenXml.Drawing.ExtensionList( new Extension( creationId) { Uri = "{FF2B5EF4-FFF2-40B4-BE49-F238E27FC236}" })); picture.NonVisualPictureProperties.NonVisualPictureDrawingProperties = new DocumentFormat.OpenXml.Presentation.NonVisualPictureDrawingProperties(); picture.NonVisualPictureProperties.ApplicationNonVisualDrawingProperties = new ApplicationNonVisualDrawingProperties(); picture.NonVisualPictureProperties.NonVisualPictureDrawingProperties.PictureLocks = new PictureLocks() { NoChangeAspect = true }; // add blipfill picture.BlipFill = new DocumentFormat.OpenXml.Presentation.BlipFill(); picture.BlipFill.Blip = new Blip() { Embed = svgId }; picture.BlipFill.AppendChild(new Stretch( new FillRectangle())); BlipExtensionList blipExtensionList = new BlipExtensionList(); Extension ext = blipExtensionList.AppendChild(new Extension()); ext.Uri = string.Empty; ext.AppendChild(new SVGBlip()); picture.BlipFill.Blip.AppendChild(blipExtensionList); picture.ShapeProperties = new DocumentFormat.OpenXml.Presentation.ShapeProperties(); picture.ShapeProperties.Transform2D = new Transform2D(); picture.ShapeProperties.Transform2D.Offset = new Offset(); picture.ShapeProperties.Transform2D.Offset.X = new Int64Value(5638800L); picture.ShapeProperties.Transform2D.Offset.Y = new Int64Value(2971800L); picture.ShapeProperties.Transform2D.Extents = new Extents(); picture.ShapeProperties.Transform2D.Extents.Cx = new Int64Value(914400L); picture.ShapeProperties.Transform2D.Extents.Cy = new Int64Value(914400L); picture.ShapeProperties.AppendChild(new PresetGeometry( new AdjustValueList()) { Preset = ShapeTypeValues.Rectangle }); // Create a temporary in memory png file from the svg (inserting svg requires a png copy to be visible) // Using https://www.nuget.org/packages/Svg/ to convert svg to png SvgDocument svgDocument = SvgDocument.Open(svgPath); using System.Drawing.Bitmap bitmap = svgDocument.Draw(); string fileName = System.IO.Path.GetTempPath() + Guid.NewGuid().ToString() + ".png"; bitmap.Save(fileName, ImageFormat.Png); // Add png to slidePart using FileStream pngFileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read); pngFileStream.Seek(0, SeekOrigin.Begin); ImagePart pngImagePart = slidePart.AddImagePart(ImagePartType.Png, pngId); pngImagePart.FeedData(pngFileStream); picture.BlipFill.Blip.Embed = pngId; // Add image part with new svg id using FileStream svgFileStream = new FileStream(svgPath, FileMode.Open, FileAccess.Read); svgFileStream.Seek(0, SeekOrigin.Begin); ImagePart svgImgPart = slidePart.AddImagePart(ImagePartType.Svg, svgId); svgImgPart.FeedData(svgFileStream); IEnumerable <SVGBlip> sVGBlips = blipExtensionList.Descendants <SVGBlip>(); sVGBlips.First().Embed = svgId; slidePart.Slide.CommonSlideData.ShapeTree.AppendChild(picture); } } } }