首先,我们先安装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的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 条评论) |