Как сохранить фигуру PowerPoint в OpenXML?

Вопрос или проблема

Я создал VSTO AddIn на C# – с лентой и панелью задач. Моя цель – сохранить некоторые ручные фигуры в POTX, которые я могу считать из своего AddIn и предоставить для вставки на слайд.

Я нов в openXML и customXMLPart – но уже пробовал что-то делать, например, сохранить некоторые данные в customXMLPart и считать их позже. Я читал, что файл openXML может содержать не только теги, слайды и т.д., но и фигуры.

Как мне вставить в POTX пользовательскую фигуру, которая затем будет доступна в новосозданном файле PPTX и может быть вызвана из AddIn для вставки на слайд?

Есть идеи?

Ответ или решение

Хранение фигур PowerPoint в шаблоне POTX с использованием OpenXML может быть непростой задачей, особенно для новичка. Ниже проиллюстрированы основные шаги, которые помогут вам сохранить созданные вами фигуры в файле POTX, чтобы затем можно было их извлекать и использовать в создаваемых вами PPTX-файлах.

Шаги для хранения фигур PowerPoint в POTX с использованием OpenXML:

  1. Создание фигур:
    Вы можете создать фигуры с помощью OpenXML SDK, используя класс Drawing и другие требуемые классы. Фигуры в PowerPoint представляются в виде объектов, размещенных в месте, соответствующем вашему слайду.

  2. Добавление фигур в шаблон POTX:
    Вам нужно добавить ваши собственные фигуры в ppt/slides/slide1.xml, если вы хотите сохранить их в шаблоне. Для этого используйте DrawingElement, как показано ниже:

    using (PresentationDocument presentationDocument = PresentationDocument.Open(@"путь\к\шаблону.potx", true))
    {
       SlidePart slidePart = presentationDocument.PresentationPart.SlideParts.First(); // Используйте нужный вам SlidePart
    
       // Создайте фигуру
       var shape = new Shape(new NonVisualShapeProperties(new NonVisualDrawingProperties(), new NonVisualShapeDrawingProperties()),
                             new ShapeProperties(), 
                             new TextBody(new BodyProperties(), new List<Paragraph>()));
    
       slidePart.AddChild(shape);
       slidePart.Slide.Save();
    }
  3. Создание customXMLPart:
    Если вы хотите сохранить дополнительные данные, например, параметры фигур или их характеристики, вы можете использовать CustomXMLPart. Это делается следующим образом:

    var customPart = presentationDocument.PresentationPart.AddCustomXmlPart("application/vnd.ms-officexml.customxml"); // Замените тип MIME на нужный
    using (StreamWriter writer = new StreamWriter(customPart.GetStream()))
    {
       writer.Write("<Shapes><Shape><Name>My Shape</Name></Shape></Shapes>"); // Сохраните нужные данные в XML формате
    }
  4. Доступ к фигурам и customXMLPart в AddIn:
    Позже, когда ваш AddIn будет загружен, вы сможете извлечь эти фигуры и данные из customXMLPart. Для этого выполните следующие действия:

    using (PresentationDocument presentationDocument = PresentationDocument.Open(@"путь\к\файлу.pptx", false))
    {
       foreach (var customXmlPart in presentationDocument.PresentationPart.CustomXmlParts)
       {
           using (StreamReader reader = new StreamReader(customXmlPart.GetStream()))
           {
               string xmlData = reader.ReadToEnd();
               // Здесь вы можете обработать xmlData на необходимость
           }
       }
    }
  5. Вставка или использование сохранённых фигур:
    При создании новой презентации PPTX вы захотите использовать сохраненные фигуры. Вы можете извлечь их и вновь добавить на слайды с использованием методов, аналогичных тем, которые были использованы при добавлении их в POTX.

Заключение

Теперь у вас есть общее представление о том, как сохранить фигуры PowerPoint в POTX и получить к ним доступ через ваш VSTO AddIn с использованием OpenXML. Не стесняйтесь экспериментировать с различными свойствами и элементами, чтобы адаптировать функционал под ваши нужды. Если у вас появятся дополнительные вопросы, не стесняйтесь спрашивать!

Оцените материал
Добавить комментарий

Капча загружается...