Open XML: как получить тип элемента?

161
11 марта 2018, 20:17

Мне необходимо распарсить слайды презентации PowerPoint (.pptx), а именно получить три значения для каждого элемента (shape) на слайде:

  1. координату X
  2. координату Y
  3. Тип элемента

Нужно использовать инструмент отличный от Microsoft.Office.Interop.PowerPoint, чтобы не быть зависимым от предустановленного Microsoft PowerPoint.

Aspose.Slides. Да, конечно же, Google search, да и Top 20 NuGet PowerPoint Packages на первых строчках отображает Aspose.Slides. И он идеально подходит для наших задач, но очень дорого: ребят из Aspose говорят необходимо приобретать лицензию Developer OEM на каждого разработчика в команде, раз речь заходит о продаже продукта, разработанного на его основе. И стоит такая одна лицензия $2397.

Open XML. Меня предупреждали, что Open XML кривой, но гибкий. Но что на столько кривой и интуитивно непонятный не ожидал.

Я кое как разобрался как получить координаты элементов на слайде

using (PresentationDocument doc = PresentationDocument.Open(@"d:\test.pptx", false))
{
    Slide firstSlide = doc.PresentationPart.SlideParts.First().Slide;
    CommonSlideData csd = firstSlide.GetFirstChild<CommonSlideData>();
    var shapes = csd.Descendants<Shape>();
    foreach (var shape in shapes)
    {
        var t2d = shape.ShapeProperties.Transform2D;
        if (t2d != null)
        {
            Console.WriteLine($"X: {t2d.Offset.X}\nY: {t2d.Offset.Y}");
        }
    }
}

но не знаю как узнать тип объекта. В Interop получить этот тип было легко: у каждого Shape есть свойство Type, а куда его Open XML запрятал неизвестно.

READ ALSO
Xamarin android: header в recyclerview

Xamarin android: header в recyclerview

Пытаюсь вывести список с категориями, первая категория выводится, а последующие нет

148
Группировка cs-файлов в решении

Группировка cs-файлов в решении

В решении aspnet core 2

182
C# WPF Биндинг DataGrid и struct

C# WPF Биндинг DataGrid и struct

Доброго времени сутокВозникла проблема с привязкой структуры к DataGrid, раньше это делал, но вот сейчас ничего не получается, подскажите в чем...

198
Как обратиться к label который находится на пользовательском элементе управления?

Как обратиться к label который находится на пользовательском элементе управления?

Доброго времени сутокПишу с таким вот вопросом: Создал пользовательский элемент управления и поместил на него label, далее поместил пользовательский...

180