在閱讀本文之前,我期望你能瞭解基礎的 PPT 解析內容,或看我的入門級博客。本文將告訴大家如何從 PPT 裏面解析出通用元素的 x 和 y 的值,以及元素的寬度和高度的值
在開始之前請看 C# dotnet 使用 OpenXml 解析 PPT 文件 在拿到 slidePart.Slide.CommonSlideData.ShapeTree 裏面的元素,幾乎所有元素都存在座標和寬度高度,這裏的元素我稱爲通用元素,也就是不是特定的如形狀、圖片元素
此時的元素應該是繼承 OpenXmlElement 類,在這個類裏面可以通過 GetFirstChild 找到 ShapeProperties 的值
var shapeProperties = element.GetFirstChild<ShapeProperties>();
上面代碼的 element 是 OpenXmlElement 類
拿到了 ShapeProperties 實際上就是 PPT 文件的 p:sppr 內容,在 PPT 裏面將會用如下格式設置元素裏面的值中 a:xfrm 就是 Transform2D 請看下面
<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 是什麼意思,我在命名空間裏面添加這個代碼
using Presentation = DocumentFormat.OpenXml.Presentation;
using Drawing = DocumentFormat.OpenXml.Drawing;
using ShapeProperties = DocumentFormat.OpenXml.Presentation.ShapeProperties;
拿到 Transform2D 可以再獲取 Offset 也就是 a:off
拿到 x 和 y 的大小
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
獲取元素的寬度和高度,請看代碼
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 拖動控件
我搭建了自己的博客 https://blog.lindexi.com/ 歡迎大家訪問,裏面有很多新的博客。只有在我看到博客寫成熟之後纔會放在csdn或博客園,但是一旦發佈了就不再更新
如果在博客看到有任何不懂的,歡迎交流,我搭建了 dotnet 職業技術學院 歡迎大家加入
如有不方便在博客評論的問題,可以加我 QQ 2844808902 交流
本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名林德熙(包含鏈接:http://blog.csdn.net/lindexi_gd ),不得用於商業目的,基於本文修改後的作品務必以相同的許可發佈。如有任何疑問,請與我聯繫。