我需要解析一个PowerPoint演示文稿(.pptx)的幻灯片,即为幻灯片上的每个元素(形状)获取三个值:
- X坐标
- Y坐标
- 物品种类
你需要使用其他工具Microsoft.Office.Interop.PowerPoint,以免依赖预装Microsoft PowerPoint。
假设幻灯片。是的,当然,Google 搜索和第一行显示的前 20 个 NuGet PowerPoint 包Aspose.Slides。它非常适合我们的需求,但非常昂贵:Aspose 的人说,在销售基于它的产品时,有必要为团队中的每个开发人员购买开发人员 OEM 许可证。这样一份许可证的价格为 2397 美元。
打开 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 将它隐藏在哪里是未知的。
我在msdn论坛上被问到一个类似的问题,答案是:
没错,我想指出ST_ShapeType枚举器更像是一个形状类型而不是一个对象类型。如
Open XML SDK所理解的那样,没有元素的类型化。有一个元素ShapeTree包含整个形状树。