C# dotnet 使用 OpenXml 解析 PPT 元素的座標和寬度高度

在閱讀本文之前,我期望你能瞭解基礎的 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 ),不得用於商業目的,基於本文修改後的作品務必以相同的許可發佈。如有任何疑問,請與我聯繫

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章