dotnet OpenXML 解析 PPT 页面元素文档格式

本文告诉大家在 OpenXML 里面的 PPT 页面 Slide 的元素文档格式

是否小伙伴还记得如何使用 OpenXML SDK 获取一份 PPTX 文件的某一个页面?如果不记得,请看 C# dotnet 使用 OpenXml 解析 PPT 文件

如下是一个简单的 PPTX 的 Slide 页面

大概的主结构如下

对应缩写如下

p - Presentation
p:sld - Slide
p:cSld - CommonSlideData
p:spTree - ShapeTree

对应获取代码如下

            using (var presentationDocument =
                PresentationDocument.Open("test.pptx", false))
            {
                var presentationPart = presentationDocument.PresentationPart;
                foreach (var slidePart in presentationPart.SlideParts)
                {
                    var slide = slidePart.Slide;

                    var slideData = slide.CommonSlideData;
                    var shapeTree = slideData.ShapeTree;
                }
            }

元素放在 ShapeTree 里面,文档格式如下

尽管有多媒体元素等不属于 Shape 形状,但是在 PPT 里面形状属于最基础的元素, 在 PPT 里面的所有的元素都放在 ShapeTree 里面。虽然 ShapeTree 命名是形状,但实际上所有元素都可以当成形状使用

例如在 ShapeTree 里面放一个文本,文本本身就是 DocumentFormat.OpenXml.Presentation.Shape 也就是形状。形状是形状,而文本框也是形状

获取页面里面的形状的方法如下

foreach (var openXmlElement in shapeTree)
{
    if (openXmlElement is DocumentFormat.OpenXml.Presentation.Shape shape)
    {

    }
}

这里的代码放在 github 欢迎小伙伴访问,运行代码在 openXmlElement is DocumentFormat.OpenXml.Presentation.Shape shape 添加断点就可以看到断点进入

在 VS 的帮助下,其实咱可以不理会PPT文档本身,直接使用 OpenXML 解析完成的值,这样做的优势在于不需要频繁去找文档。除非真的在看了注释之后依然不理解属性的含义和作用,不过一般此时看文档作用也不大

例如想要看某个页面包含的元素,可以点开 shapeTree 的 ChildElements 属性

此时对应的 XML 的缩写的含义以及对应的属性将可以在 VS 调试的时候看到,看到具体的属性含义以及值,相对来说开发效率会提升很多。当然这需要你学会 VS 的调试方法哈

每个元素都有一些通用的属性,例如元素的变换,也就是表示元素的坐标和大小等的属性,元素翻转旋转等

此外对于特定的元素,例如形状元素有形状元素自己的属性,例如线条填充等,这部分就需要每个元素自己去解析了

在 PPT 里面所有文本都是形状,只是文本框是有趣的形状,而其他的形状大部分都是可以添加文本的。但 PPT 使用的文本和 Word 的文本是等价的,而 Word 的文本小伙伴都知道有多复杂了…… 因此在 PPT 解析里面的神坑其实就是文本的解析部分,关于文本解析我写了一些博客

换句话说如果完成了 PPT 的文本的解析和渲染,那么基本上 Word 的文本解析就完成了大半了。当然强大的 Word 可不止文本这一项

现在市面大部分的 PPT 解析工具和软件都只是实现了基础元素的基础属性,例如

  • 通用颜色
  • 通用动画的基础动画
  • 占位符
  • 形状
    • 形状线条
    • 形状样式
  • 文本
    • 纯文本
    • 文本多行多段
    • 文本装饰下划线等
    • 文本字体字号
    • 文本上下标
  • 图片
    • 图片文件
    • 图片裁剪
    • 基础图片特效
  • 音视频
    • 音视频图片
    • 音视频文件
  • 表格
    • 基础表格
    • 表格线条
    • 表格颜色

其中公式以及 Ole 元素等都可以作为图片显示,因此大部分包括 WPS 在内基本上对于公式和 Ole 元素都是当成图片,当然 WPS 很强,能解析一些公式和 Ole 元素

其实PPT解析里面的元素部分大部分都是 Office 通用的,例如文本是 PPT 和 Word 和 Excel 通用的。而表格是 Excel 的简化版

基本上完成一个元素的完全解析,基本上也就完成 Office 系列软件某个元素的解析

本文说的解析其实是不对的,因为使用 OpenXML SDK 库就是瞬间完成了内存模型解析。其他的业务都是根据业务本身从数据拿出来进行处理,例如进行渲染或者修改等

我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

如有不方便在博客评论的问题,可以加我 QQ 2844808902 交流

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值