iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >解析OpenXml Pptx的边框虚线转为WPF的边框虚线问题
  • 690
分享到

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

2024-04-02 19:04:59 690人浏览 八月长安
摘要

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

安装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.OrdinalIgnoreCase))
            {
                return;
            }

            var lines = new List<Line>();
            using var presentationDocument = PresentationDocument.Open(filePath, false);
            var presentationPart = presentationDocument.PresentationPart;
            var presentation = presentationPart?.Presentation;
            var slideIdList = presentation?.SlideIdList;
            if (slideIdList == null)
            {
                return;
            }
            foreach (var slideId in slideIdList.ChildElements.OfType<SlideId>())
            {
                var slidePart = (SlidePart)presentationPart.GetPartById(slideId.RelationshipId);
                var slide = slidePart.Slide;
                foreach (var shapeProperties in slide.Descendants<ShapeProperties>())
                {
                    var presetGeometry = shapeProperties.GetFirstChild<PresetGeometry>();
                    if (presetGeometry != null && presetGeometry.Preset.HasValue)
                    {
                        if (presetGeometry.Preset == 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 presetDash = shapeProperties.GetFirstChild<Outline>()?.GetFirstChild<PresetDash>()?.Val;
                                var dashArray = GetDashArrayByPresetLineDashValues(presetDash);
                                var line = ConverterToGeometry( width, height, dashArray); 
                                lines.Add(line);
                            }
                        }
                    }
                }
            }

            this.ListBox.ItemsSource = lines;
        }

PPTX映射成WPF虚线的方法:


        private DoubleCollection GetDashArrayByPresetLineDashValues(PresetLineDashValues presetLineDashValues)
        {
            DoubleCollection dashStyle = presetLineDashValues switch
            {
                PresetLineDashValues.Solid => new(),
                PresetLineDashValues.Dot => new() { 0, 2 },
                PresetLineDashValues.Dash => new() { 3, 3 },
                PresetLineDashValues.LargeDash => new() { 8, 3 },
                PresetLineDashValues.DashDot => new() { 3, 3, 1, 3 },
                PresetLineDashValues.LargeDashDot => new() { 7.5, 3.5, 1, 3.5 },
                PresetLineDashValues.LargeDashDotDot => new() { 8, 3, 1, 3, 1, 3 },
                PresetLineDashValues.SystemDash => new() { 3, 1 },
                PresetLineDashValues.SystemDot => new() { 1, 1 },
                PresetLineDashValues.SystemDashDot => new() { 2, 2, 0, 2 },
                PresetLineDashValues.SystemDashDotDot => new() { 2, 2, 0, 2 },
                _ => new DoubleCollection()
            };
            return dashStyle;
        }

最终绘制线条的方法:


        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;
        }

最终的效果:

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

后话

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

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

源码

BlogCodeSample/PptDashConverToWpfSample at main · ZhengDaoWang/BlogCodeSample

到此这篇关于OpenXml Pptx的边框虚线转为WPF的边框虚线的文章就介绍到这了,更多相关Pptx边框虚线转为WPF的边框虚线内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 解析OpenXml Pptx的边框虚线转为WPF的边框虚线问题

本文链接: https://www.lsjlt.com/news/161106.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 解析OpenXml Pptx的边框虚线转为WPF的边框虚线问题
    安装Openxml sdk 首先,我们先安装nuget的需要的有关的Openxml sdk,我们开源了解析pptx的Openxml拍平层,下面两种方式都可以安装: nuget包管理器...
    99+
    2024-04-02
  • html设置边框为虚线的方法
    本篇内容介绍了“html设置边框为虚线的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!html设置边框...
    99+
    2024-04-02
  • css设置边框为虚线样式的方法
    这篇文章主要介绍了css设置边框为虚线样式的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在css中,可以使用border-style属性来设置边框为虚线样式,只需要给元...
    99+
    2023-06-14
  • css如何设置边框的虚线样式
    这篇文章主要为大家展示了“css如何设置边框的虚线样式”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“css如何设置边框的虚线样式”这篇文章吧。   首先要知道...
    99+
    2024-04-02
  • 如何设置div的边框线为实线
    这篇文章主要为大家展示了“如何设置div的边框线为实线”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何设置div的边框线为实线”这篇文章吧。 一、边框属性...
    99+
    2024-04-02
  • 如何使用CSS去掉超链接的虚线边框
    这篇文章主要介绍“如何使用CSS去掉超链接的虚线边框”,在日常操作中,相信很多人在如何使用CSS去掉超链接的虚线边框问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用CS...
    99+
    2024-04-02
  • 如何去除在FireFox中点击链接时出现虚线边框的问题
    这篇文章主要介绍了如何去除在FireFox中点击链接时出现虚线边框的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。遇到几个浏览器兼容的问题,有一个感觉比较奇怪,估计是Fi...
    99+
    2023-06-08
  • 如何处理hideFocus虚线框的问题
    本篇内容介绍了“如何处理hideFocus虚线框的问题”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!hid...
    99+
    2024-04-02
  • 如何解决移动端1px边框的问题
    这篇文章主要为大家展示了“如何解决移动端1px边框的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决移动端1px边框的问题”这篇文章吧。当然了,在这之...
    99+
    2024-04-02
  • css如何使用:not() 解决lists边框的问题
    小编给大家分享一下css如何使用:not() 解决lists边框的问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用:not() 解决lists边框的问题在w...
    99+
    2023-06-27
  • 一个属性border-collapse如何解决Table的边框问题
    这期内容当中小编将会给大家带来有关一个属性border-collapse如何解决Table的边框问题,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。 ...
    99+
    2024-04-02
  • 如何解决移动端Html5页面中1px边框的问题
    这篇文章将为大家详细讲解有关如何解决移动端Html5页面中1px边框的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。问题提出这是一个比较老的问题了,我第一次注意到的时候,是UI设计师来找我麻烦,emm...
    99+
    2023-06-09
  • 怎么使用CSS属性border-collapse解决table的边框问题
    小编给大家分享一下怎么使用CSS属性border-collapse解决table的边框问题,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解...
    99+
    2024-04-02
  • 如何解决搜索框和搜索按钮button边框不能重合的问题
    这篇文章主要介绍了如何解决搜索框和搜索按钮button边框不能重合的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。今天在用百度页面做练习的时候突然发现,尽管设置了搜索框和...
    99+
    2023-06-08
  • win8.1系统玩古卷轴5天际出现边框闪屏问题的解决方法
      古卷轴5天际是著名动作角色扮演游戏系列,很多游戏玩家都喜欢玩,有时候在win8.1系统中运行古卷轴5天际出现闪屏或者有边框的问题,影响游戏体验,网上关于此解决方法也比较少,那么有什么办法能够解决此故障问题呢?下面我们...
    99+
    2023-05-22
    上古卷轴5全屏闪屏 上古卷轴5enb花屏闪屏
  • 如何解决多行排列图片时hover上去加边框挤图片的问题
    本篇内容主要讲解“如何解决多行排列图片时hover上去加边框挤图片的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决多行排列图片时hover上去加边框...
    99+
    2024-04-02
  • 如何解决多行图片hover加边框会把下面的图片挤到别处的问题
    本篇内容主要讲解“如何解决多行图片hover加边框会把下面的图片挤到别处的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决多行图片hover加边框会把...
    99+
    2024-04-02
  • 如何解决IE8下显示图片时多出一个边框而Chrome或Firefox下却没有的问题
    本篇内容主要讲解“如何解决IE8下显示图片时多出一个边框而Chrome或Firefox下却没有的问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何解决IE8...
    99+
    2024-04-02
  • 你知道如何使用Python同步关键字来解决框架中的线程安全问题吗?
    当我们使用多线程编程时,线程安全问题是不可避免的。Python提供了一种同步机制来解决线程安全问题——同步关键字。本文将介绍如何使用Python同步关键字来解决框架中的线程安全问题。 一、Python同步关键字概述 Python中的同步关键...
    99+
    2023-06-24
    同步 关键字 框架
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作