首页 > 作文

解析OpenXml Pptx的边框虚线转为WPF的边框虚线问题

更新时间:2023-04-04 08:16:02 阅读: 评论:0

安装openxml sdk

首先,我们先安装nuget的需要的有关的openxml sdk,我们开源了解析pptx的openxml拍平层,下面两种方式都可以安装:

nuget包管理器控制台:

install-package dotnetcampus.documentformat.openxml.flatten -version 2.0.0

csproj引用:

<packagereference include=”dotnetcampus.documentformat.openxml.flatten” version=”2.0.0″ />

解析pptx

我这里用pptx的7种直线,分别设置7种能够设置的虚线类型,pptx的显示效果是这样的:

然后解析代码如下,解析主要逻辑部分:

        private void pptxtogeometry(string filepath)        {            if (!file.exists(filepath) || !filepath.endswith(".pptx", stringcomparison.ordinalignoreca))            {                return;            }            var lines = new list<line>();            using var prentationdocument = prentationdocument.open(filepath, fal);            var prentationpart = prentationdocument.prentationpart;            var prentation = prentationpart?.prentation;            var slideidlist = prentation?.slideidlist;            if (slideidlist == null)            {                return;            }            foreach (var slideid in slideidlist.childelements.oftype<slideid>())            {                var slidepart = (slidepart)prentationpart.getpartbyid(slideid.relationshipid);                var slide = slidepart.slide;                foreach (var shapeproperties in slide.descendants<shapeproperties>())                {                    var pretgeometry = shapeproperties.getfirstchild<pretgeometry>();                    if (pretgeometry != null && pretgeometry.pret.hasvalue)                    {                        if (pretgeometry.pret == shapetypevalues.straightconnector1)                        {                            var transform2d = shapeproperties.getfirstchild<transform2d>();                            var extents = transform2d?.getfirstchild<extents>();                            if (extents != null)                            {                                var width = new emu(extents.cx!.value).topixel().value;                                var height = new emu(extents.cy!.value).topixel().value;                                var pretdash = shapeproperties.getfirstchild<outline>()?.getfirstchild<pretdas致班主任的一封信h>()?.val;                       中考满分作文记叙文         var dasharray = getdasharraybypretlinedashvalues(pretdash);                                var line = convertertogeometry( width, height, dasharray);                                 lines.add(line);                            }                        }                    }                }            }            this.listbox.itemssource = lines;        }

pptx映射成wpf虚线的方法:

        private doublecollection getdasharraybypretlinedashvalues(pretlinedashvalues pretlinedashvalues)        {            doublecollection dashstyle = pretlinedashvalues switch            {                pretlinedashvalues.solid => new(),                pretlinedashvalues.dot => new() { 0, 2 },                pretlinedashvalues.dash => new() { 3, 3 },                pretlinedashvalues.largedash => new() { 8, 3 },                pretlinedashvalues.dashdot => new() { 3, 3, 1, 3 },                pretlinedashvalues.largedashdot => new() { 7.5, 3.5, 1, 3.5 },                pretlinedashvalues.largedashdotdot => new() { 8, 3, 1, 3, 1, 3 },                pretlinedashvalues.systemdash => new() { 3, 1 },                pretlinedashvalues.systemdot => new() { 1, 1 },          聘用合同书      pretlinedashvalues.systemdashdot => new() { 2, 2, 0, 2 },                pretlinedashvalues.systemdashdotdot => new() { 2, 2, 0, 2 },                _ =长征感人故事> new doublecollection()            };            return d别赋的作者是谁ashstyle;        }

最终绘制线条的方法:

        private line convertertogeometry(double width, double height, doublecollection dashdoublecollection)        {            var line = new line            {                x1 = 0,                y1 = 0,                x2 = width,                y2 = height,                strokedasharray = dashdoublecollection,                stroke = stroke,                strokethickness = strokethickness            };            return line;        }

最终的效果:

我们可以看到几乎是接近的效果了,当然你也可以根据我的代码去微调更精确的值,只需要稍微改下getdasharraybypretlinedashvalues方法内相对应的值即可

后话

实际上,openxml文档是给出了pretdash的值的,大致如下:

但是其值跟wpf的设置dash的doublecollection不对应,因此以上的映射值都是我自己微调的

源码

blogcodesample/pptdashconvertowpfsample at main · zhengdaowang/blogcodesample

到此这篇关于openxmlpptx的边框虚线转为wpf的边框虚线的文章就介绍到这了,更多相关pptx边框虚线转为wpf的边框虚线内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 08:16:01,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/860c9abb72969964d05696e495b3087a.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:解析OpenXml Pptx的边框虚线转为WPF的边框虚线问题.doc

本文 PDF 下载地址:解析OpenXml Pptx的边框虚线转为WPF的边框虚线问题.pdf

标签:虚线   边框   方法   都是
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图