PowerPoint Open XML SDK Новая проблема создания слайдов - PullRequest
0 голосов
/ 12 декабря 2018

Мы используем приведенный ниже фрагмент кода, чтобы добавить новый слайд в существующую колоду слайдов.Этот код добавляет содержимое к слайдам правильно, однако при открытии через PowerPoint он говорит, что презентации повреждены и требуют ремонта.После восстановления презентация открывается, однако вновь добавленные слайды отображаются в виде пустых слайдов без содержимого (содержимое содержится в файлах slide.xml, когда файл PPTX разархивирован).

Когдасгенерированная презентация анализируется с помощью «инструмента повышения производительности Open XML SDK 2.5» и выдает следующие сообщения об ошибках:

Error Message

public SlidePart CopySlidePart(PresentationPart presentationPart, SlidePart slidePart)
{
     int i = presentationPart.SlideParts.Count();
     //Create a new slide part in the presentation.
     SlidePart newSlidePart = presentationPart.AddNewPart<SlidePart>("newSlide" + i);

     i++;
     //Add the source slide content into the new slide.
     newSlidePart.FeedData(slidePart.GetStream(FileMode.Open));
     //Make sure the new slide references the proper slide layout.

      newSlidePart.AddPart(slidePart.SlideLayoutPart, slidePart.GetIdOfPart(slidePart.SlideLayoutPart));

     //Get the list of slide ids.
     SlideIdList slideIdList = presentationPart.Presentation.SlideIdList;
     //Deternmine where to add the next slide (find max number of slides).
     uint maxSlideId = 1;
     SlideId prevSlideId = null;
     foreach (SlideId slideId in slideIdList.ChildElements)
     {
          var part = presentationPart.GetPartById(slideId.RelationshipId);

           if (part == slidePart)
           {
               prevSlideId = slideId;
           }
           if (slideId.Id > maxSlideId)
           {
              maxSlideId = slideId.Id;
           }
      }
      maxSlideId++;
      //Add the new slide at the end of the deck.
      SlideId newSlideId = slideIdList.InsertAfter(new SlideId(), prevSlideId);
      //Make sure the id and relid are set appropriately.

      newSlideId.Id = maxSlideId;

      newSlideId.RelationshipId = presentationPart.GetIdOfPart(newSlidePart);
      newSlidePart.Slide.Save();

      presentationPart.Presentation.Save();
      return newSlidePart;
}
...