C# 如何使用OpenXML C在powerpoint中添加图像#

C# 如何使用OpenXML C在powerpoint中添加图像#,c#,powerpoint,openxml,C#,Powerpoint,Openxml,如何使用OpenXML C在powerpoint中添加图像 有人举过一个例子来说明如何在特定的位置和大小插入图像吗? 以及如何编辑一个文本框的位置和大小 以下是我到目前为止的情况: using (FileStream stream = new FileStream(@"c:/img.jpg", FileMode.Open, FileAccess.Read)) { var image = Image.FromStream(stream);

如何使用OpenXML C在powerpoint中添加图像

有人举过一个例子来说明如何在特定的位置和大小插入图像吗? 以及如何编辑一个文本框的位置和大小

以下是我到目前为止的情况:

using (FileStream stream = new FileStream(@"c:/img.jpg", FileMode.Open, FileAccess.Read))             
{
     var image = Image.FromStream(stream);
     ImagePart imagePart = slidePart.AddImagePart(ImagePartType.Png, "rId3");
     imagePart.FeedData(stream);   
} 

您可以使用OpenXML SDK生产力工具将powerpoint文件反编译为c#。使用图像和文本框创建一个文件,反编译并查看如何在c#中完成此操作。

使用以下代码:

public static void AddImage(string file, string image)
    {
        using (var presentation = PresentationDocument.Open(file, true))
        {
            var slidePart = presentation
                .PresentationPart
                .SlideParts
                .First();

            var part = slidePart
                .AddImagePart(ImagePartType.Png);

            using (var stream = File.OpenRead(image))
            {
                part.FeedData(stream);
            }

            var tree = slidePart
                .Slide
                .Descendants<DocumentFormat.OpenXml.Presentation.ShapeTree>()
                .First();

            var picture = new DocumentFormat.OpenXml.Presentation.Picture();

            picture.NonVisualPictureProperties = new DocumentFormat.OpenXml.Presentation.NonVisualPictureProperties();
            picture.NonVisualPictureProperties.Append(new DocumentFormat.OpenXml.Presentation.NonVisualDrawingProperties
            {
                Name = "My Shape",
                Id = (UInt32)tree.ChildElements.Count - 1
            });

            var nonVisualPictureDrawingProperties = new DocumentFormat.OpenXml.Presentation.NonVisualPictureDrawingProperties();
            nonVisualPictureDrawingProperties.Append(new DocumentFormat.OpenXml.Drawing.PictureLocks()
            {
                NoChangeAspect = true
            });
            picture.NonVisualPictureProperties.Append(nonVisualPictureDrawingProperties);
            picture.NonVisualPictureProperties.Append(new DocumentFormat.OpenXml.Presentation.ApplicationNonVisualDrawingProperties());

            var blipFill = new DocumentFormat.OpenXml.Presentation.BlipFill();
            var blip1 = new DocumentFormat.OpenXml.Drawing.Blip()
            {
                Embed = slidePart.GetIdOfPart(part)
            };
            var blipExtensionList1 = new DocumentFormat.OpenXml.Drawing.BlipExtensionList();
            var blipExtension1 = new DocumentFormat.OpenXml.Drawing.BlipExtension()
            {
                Uri = "{28A0092B-C50C-407E-A947-70E740481C1C}"
            };
            var useLocalDpi1 = new DocumentFormat.OpenXml.Office2010.Drawing.UseLocalDpi()
            {
                Val = false
            };
            useLocalDpi1.AddNamespaceDeclaration("a14", "http://schemas.microsoft.com/office/drawing/2010/main");
            blipExtension1.Append(useLocalDpi1);
            blipExtensionList1.Append(blipExtension1);
            blip1.Append(blipExtensionList1);
            var stretch = new DocumentFormat.OpenXml.Drawing.Stretch();
            stretch.Append(new DocumentFormat.OpenXml.Drawing.FillRectangle());
            blipFill.Append(blip1);
            blipFill.Append(stretch);
            picture.Append(blipFill);

            picture.ShapeProperties = new DocumentFormat.OpenXml.Presentation.ShapeProperties();
            picture.ShapeProperties.Transform2D = new DocumentFormat.OpenXml.Drawing.Transform2D();
            picture.ShapeProperties.Transform2D.Append(new DocumentFormat.OpenXml.Drawing.Offset
            {
                X = 0,
                Y = 0,
            });
            picture.ShapeProperties.Transform2D.Append(new DocumentFormat.OpenXml.Drawing.Extents
            {
                Cx = 1000000,
                Cy = 1000000,
            });
            picture.ShapeProperties.Append(new DocumentFormat.OpenXml.Drawing.PresetGeometry
            {
                Preset = DocumentFormat.OpenXml.Drawing.ShapeTypeValues.Rectangle
            });

            tree.Append(picture);
        }
    }
publicstaticvoidaddimage(字符串文件、字符串图像)
{
使用(var presentation=PresentationDocument.Open(file,true))
{
var slidePart=演示文稿
.陈述部分
.幻灯片部分
.First();
var part=slidePart
.AddImagePart(ImagePartType.Png);
使用(var stream=File.OpenRead(image))
{
第三部分:数据流;
}
var tree=slidePart
滑动
.后代()
.First();
var picture=new DocumentFormat.OpenXml.Presentation.picture();
picture.NonVisualPictureProperties=new DocumentFormat.OpenXml.Presentation.NonVisualPictureProperties();
picture.NonVisualPictureProperties.Append(新DocumentFormat.OpenXml.Presentation.NonVisualDrawingProperties
{
Name=“我的形状”,
Id=(UInt32)tree.ChildElements.Count-1
});
var nonVisualPictureDrawingProperties=new DocumentFormat.OpenXml.Presentation.nonVisualPictureDrawingProperties();
nonVisualPictureDrawingProperties.Append(新的DocumentFormat.OpenXml.Drawing.PictureLocks()
{
NoChangeAspect=true
});
picture.NonVisualPictureProperties.Append(nonVisualPictureDrawingProperties);
picture.NonVisualPictureProperties.Append(新文档格式.OpenXml.Presentation.ApplicationNonVisualDrawingProperties());
var blipFill=new DocumentFormat.OpenXml.Presentation.blipFill();
var blip1=new DocumentFormat.OpenXml.Drawing.Blip()
{
嵌入=slidePart.GetIdOfPart(部分)
};
var blipExtensionList1=new DocumentFormat.OpenXml.Drawing.BlipExtensionList();
var blipExtension1=new DocumentFormat.OpenXml.Drawing.BlipExtension()
{
Uri=“{28A0092B-C50C-407E-A947-70E740481C}”
};
var useLocalDpi1=new DocumentFormat.OpenXml.Office2010.Drawing.UseLocalDpi()
{
Val=false
};
useLocalDpi1.AddNamespaceDeclaration(“a14”http://schemas.microsoft.com/office/drawing/2010/main");
blipExtension1.Append(使用localdpi1);
追加(blipExtension1);
blip1.Append(blipExtensionList1);
var stretch=new DocumentFormat.OpenXml.Drawing.stretch();
Append(newdocumentformat.OpenXml.Drawing.FillRectangle());
blipFill.Append(blip1);
blipFill.Append(拉伸);
图片。附加(blipFill);
picture.ShapeProperties=newdocumentformat.OpenXml.Presentation.ShapeProperties();
picture.ShapeProperties.Transform2D=新文档格式.OpenXml.Drawing.Transform2D();
picture.ShapeProperties.Transform2D.Append(新DocumentFormat.OpenXml.Drawing.Offset
{
X=0,
Y=0,
});
picture.ShapeProperties.Transform2D.Append(新DocumentFormat.OpenXml.Drawing.extenses
{
Cx=1000000,
Cy=1000000,
});
picture.ShapeProperties.Append(新DocumentFormat.OpenXml.Drawing.PresetGeometry
{
预设=DocumentFormat.OpenXml.Drawing.ShapeTypeValues.Rectangle
});
树。追加(图片);
}
}

你尝试了什么吗?我尝试了
使用(FileStream stream=newfilestream(@“c:/img.jpg”,FileMode.Open,FileAccess.Read)){var image=image.FromStream(stream);ImagePart-ImagePart=slidePart.AddImagePart(ImagePartType.Png,“rId3”);ImagePart.FeedData(stream);}
但不是working@MrD您已经将图像添加到包中,现在需要获取该imageId并使用它在您的应用程序中访问它slides@AlexanderDerck我是怎么做到的?嗨@Md.Zakir我正在使用上面的代码(顺便说一下,谢谢你)我对图像的放置位置有困难,无论我做什么,它都被放置在左上角。嗨,要使图像适合特定的位置,你必须控制它。picture.ShapeProperties.Transform2D.Append(新的DocumentFormat.OpenXml.Drawing.Offset{X=0,Y=0,});在这里,您必须在X&Y中放置位置值