Замените Pictureplaceholder в презентации с openxml - PullRequest
0 голосов
/ 09 декабря 2018

Я пытаюсь заменить заполнитель изображения в Powerpointpresentation на openxml sdk.Я думаю, что нашел Заполнитель, но я не знаю, как заменить его на изображение.Требуется работать со слайдами, созданными из мастер-части.

Применение указанного макета из мастера, который работает должным образом:

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 - метод ищет заполнитель и должен заменитьЭто.Это смешанная версия примеров кода, которые я нашел, и мой подход к идентификации заполнителя.Я не знаю, как преобразовать заполнитель в нечто вроде 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;
    }            
}
...