Мне необходимо распарсить слайды презентации PowerPoint (.pptx), а именно получить три значения для каждого элемента (shape) на слайде:
Нужно использовать инструмент отличный от 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 запрятал неизвестно.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Пытаюсь вывести список с категориями, первая категория выводится, а последующие нет
Доброго времени сутокВозникла проблема с привязкой структуры к DataGrid, раньше это делал, но вот сейчас ничего не получается, подскажите в чем...
Доброго времени сутокПишу с таким вот вопросом: Создал пользовательский элемент управления и поместил на него label, далее поместил пользовательский...