我尝试用openxml sdk替换Powerpointpresentation中的Pictureplaceholder . 我想我找到了占位符,但我不知道如何用图像替换它 . 需要使用从masterpart创建的幻灯片 .

从主服务器应用指定的布局,该布局按预期工作:

Slide slide = new Slide(new CommonSlideData(new ShapeTree()));
SlidePart slidePart = presentationPart.AddNewPart<SlidePart>();
slide.Save(slidePart);
SlideMasterPart slideMasterPart = presentationPart.SlideMasterParts.First();
SlideLayoutPart slideLayoutPart = slideMasterPart.SlideLayoutParts.SingleOrDefault(sl => sl.SlideLayout.CommonSlideData.Name.Value.Equals("InhaltsFolie", StringComparison.OrdinalIgnoreCase));
slidePart.AddPart<SlideLayoutPart>(slideLayoutPart);
slidePart.Slide.CommonSlideData = (CommonSlideData)slideMasterPart.SlideLayoutParts.SingleOrDefault(sl => sl.SlideLayout.CommonSlideData.Name.Value.Equals("InhaltsFolie")).SlideLayout.CommonSlideData.Clone();
replaceImages(slidePart, fotodokumentation.Thumbnail);

ReplaceImages - Method搜索占位符并应替换它 . 这是代码示例的混合版本我发现了一种识别占位符的方法 . 我不知道如何从我找到的样本中将占位符转换为像Blip - Object这样的东西 . 或者如何将图像应用于占位符?在下面的代码中,myBlip对象始终为null,但占位符在那里:

private void replaceImages(SlidePart slidePart,byte[] image) {
    var placeholder = slidePart.Slide.Descendants<PlaceholderShape>().FirstOrDefault(pl => pl.Type == PlaceholderValues.Picture);
    var myBlip = slidePart.Slide.Descendants<Drawing.Blip>().FirstOrDefault();
    if (myBlip != null) {
        var imagePart = slidePart.AddImagePart(ImagePartType.Jpeg);

        using (var stream = new MemoryStream(image)) {
            imagePart.FeedData(stream);
        }
        var relID = slidePart.GetIdOfPart(imagePart);
        myBlip.Embed = relID;
    }            
}