前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >C# dotnet 使用 OpenXml 解析 PPT 元素的坐标和宽度高度

C# dotnet 使用 OpenXml 解析 PPT 元素的坐标和宽度高度

作者头像
林德熙
发布2020-03-20 20:48:23
发布2020-03-20 20:48:23
1.7K00
代码可运行
举报
文章被收录于专栏:林德熙的博客林德熙的博客
运行总次数:0
代码可运行

在阅读本文之前,我期望你能了解基础的 PPT 解析内容,或看我的入门级博客。本文将告诉大家如何从 PPT 里面解析出通用元素的 x 和 y 的值,以及元素的宽度和高度的值

在开始之前请看 C# dotnet 使用 OpenXml 解析 PPT 文件 在拿到 slidePart.Slide.CommonSlideData.ShapeTree 里面的元素,几乎所有元素都存在坐标和宽度高度,这里的元素我称为通用元素,也就是不是特定的如形状、图片元素

此时的元素应该是继承 OpenXmlElement 类,在这个类里面可以通过 GetFirstChild 找到 ShapeProperties 的值

代码语言:javascript
代码运行次数:0
运行
复制
            var shapeProperties = element.GetFirstChild<ShapeProperties>();

上面代码的 element 是 OpenXmlElement 类

拿到了 ShapeProperties 实际上就是 PPT 文件的 p:sppr 内容,在 PPT 里面将会用如下格式设置元素里面的值中 a:xfrm 就是 Transform2D 请看下面

代码语言:javascript
代码运行次数:0
运行
复制
<p:sppr>
    <a:xfrm>
        <a:off x="3292475" y="1300390">
        </a:off>
        <a:ext cx="6096000" cy="3429000">
        </a:ext>
    </a:xfrm>
    <a:prstgeom prst="rect">
        <a:avlst>
        </a:avlst>
    </a:prstgeom>
</p:sppr>

此时通过 var transform2D = shapeProperties.GetFirstChild<Drawing.Transform2D>(); 就能拿到 a:xfrm 的值

等等,这里的 Drawing.Transform2D 是什么意思,我在命名空间里面添加这个代码

代码语言:javascript
代码运行次数:0
运行
复制
using Presentation = DocumentFormat.OpenXml.Presentation;
using Drawing = DocumentFormat.OpenXml.Drawing;
using ShapeProperties = DocumentFormat.OpenXml.Presentation.ShapeProperties;

拿到 Transform2D 可以再获取 Offset 也就是 a:off 拿到 x 和 y 的大小

代码语言:javascript
代码运行次数:0
运行
复制
            var offset = transform2D.GetFirstChild<Drawing.Offset>();
            var offsetX = new Emu(offset.X.Value);
            var offsetY = new Emu(offset.Y.Value);

在 PPT 里面,通用元素的 x 和 y 值单位是 Emu 上面的类是我自己定义的,有可以抄的代码,请看 C# dontet Office Open XML Unit Converter 我定义了和像素转换的代码

可以通过 Extents 也就是 a:ext 获取元素的宽度和高度,请看代码

代码语言:javascript
代码运行次数:0
运行
复制
            var extents = transform2D.GetFirstChild<Drawing.Extents>();
            var extentWidth = new Emu(extents.Cx);
            var extentHeight = new Emu(extents.Cy);

ShapeProperties Class (DocumentFormat.OpenXml.Drawing.Pictures)

知道了元素的坐标如何在 UWP 中设置元素的坐标请看 win10 uwp 拖动控件


本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档