Przeglądaj źródła

PPT页面过渡动画

CrazyIter 4 lat temu
rodzic
commit
9f8ff01536

+ 10 - 1
HTEXLib/Animations/AnimationTypes.cs

@@ -1,4 +1,4 @@
-using System;
+using System;
 using System.Collections.Generic;
 using System.Text;
 
@@ -87,5 +87,14 @@ namespace HTEXLib.Animations
         public const string GrowwithColor = "GrowwithColor";
         public const string Teeter = "Teeter";
         public const string Wave = "Wave";
+        //新增
+        public const string mediacall = "mediacall";
+        public const string verb = "verb";
+        public const string Checker = "Checker";
+        public const string Comb = "Comb";
+        public const string Cover = "Cover";
+        public const string Pull = "Pull";
+        public const string Random = "Random";
+        public const string RandomBar = "RandomBar";
     }
 }

+ 21 - 4
HTEXLib/Animations/JSONGenerator.cs

@@ -233,6 +233,7 @@ namespace HTEXLib.Animations
 
         public static IAnimation GenerateTransitionAnimationObject(Transition trans)
         {
+            //u up 默认  d down  l left  r right
             if (trans == null || trans.FirstChild == null)
                 return null;
             TransitionAnimation result = new TransitionAnimation();
@@ -244,7 +245,7 @@ namespace HTEXLib.Animations
                 result.Length = int.Parse(trans.Duration.Value);
             else
                 result.Length = 1000;
-
+           
             result.Start = 0;
             result.InitialState = -1;
             result.Repetitions = 1;
@@ -416,6 +417,7 @@ namespace HTEXLib.Animations
                 result.Type = AnimationTypes.Newsflash;
                 result.AdditionalData = "20";
             }
+            
             return result;
         }
         /// <summary>
@@ -453,6 +455,19 @@ namespace HTEXLib.Animations
             {
                 result.InitialState = 3;
             }
+           
+            else if (AnimationTypes.verb.Equals(commonTimeNode.PresetClass))
+            {
+                ///未用到
+                result.InitialState = 4;
+            }
+            else if (AnimationTypes.mediacall.Equals(commonTimeNode.PresetClass))
+            {
+                ///未用到
+                result.InitialState = 5;
+            }
+
+           
             /*
                   1 emph (Preset Type Enum ( Emphasis )) Emphasis Preset
                   1 entr (Preset Type Enum ( Entrance )) Entrance Preset
@@ -461,14 +476,15 @@ namespace HTEXLib.Animations
                    path (Preset Type Enum ( Path )) Path Preset
                    verb (Preset Type Enum ( Verb )) Verb Preset
                 */
-            ///  TODO   其他类型 mediacall(Preset Type Enum (Media Call )) Media Call Preset
-            /// verb(Preset Type Enum (Verb )) Verb Preset
+                ///  TODO   其他类型 mediacall(Preset Type Enum (Media Call )) Media Call Preset
+                /// verb(Preset Type Enum (Verb )) Verb Preset
             else return null;
             if (commonTimeNode.PresetId == null)
                 return null;
             result.timingType = commonTimeNode.NodeType;
-
+            result.Subtype = commonTimeNode.PresetSubtype;
             //Get the speed from one of the nodes common behavior. Hopefully all nodes have the same speed (since the animation is the same).
+            var a = commonTimeNode.Descendants();
             foreach (Object xmlEl in commonTimeNode.Descendants())
                 if (xmlEl.GetType().Equals(typeof(CommonBehavior)))
                 {
@@ -517,6 +533,7 @@ namespace HTEXLib.Animations
                     case 37: result.AdditionalData = "26"; break;   //Vertical out       
                     case 16: result.AdditionalData = "19"; break;   //in    
                     case 32: result.AdditionalData = "20"; break;   //out
+                    default: result.AdditionalData = commonTimeNode.PresetSubtype.Value+"";break;
                 }
 
             checkIsText(result);

+ 1 - 0
HTEXLib/Animations/SimpleAnimation.cs

@@ -22,6 +22,7 @@ namespace HTEXLib.Animations
         /// </summary>
         public int InitialState { get; set; }
         public string Type { get; set; }
+        public int Subtype { get; set; }
         public string AdditionalData { get; set; }
         public List<IAnimation> InnerAnimations { get; set; }
         public DocumentFormat.OpenXml.EnumValue<DocumentFormat.OpenXml.Presentation.TimeNodeValues> timingType { get; set; }

+ 12 - 1
HTEXLib/Animations/TransitionAnimation.cs

@@ -1,4 +1,4 @@
-using System;
+using System;
 using System.Collections.Generic;
 using System.Text;
 
@@ -8,6 +8,17 @@ namespace HTEXLib.Animations
     internal class TransitionAnimation : SimpleAnimation
     {
         public bool AdvanceOnClick { get; set; }
+        /// <summary>
+        /// 自动换片总时长
+        ///advTm小于 动画总时长 以动画总时长为准
+        ///当前页动画时长  |___ _____ ______ __|
+        ///当前页advTm时长 |________________|
+        ///advTm大于 动画总时长,以advTm 时长为准,动画间隔被平均
+        ///当前页动画时长  |___   _____   ______   __|
+        ///当前页advTm时长 |_________________________|
+        /// </summary>
+        public int advTm { get; set; }
+        public Dictionary<string, object> typeExt { get; set; }
 
         public override string GetJsonString()
         {

+ 1 - 0
HTEXLib/Builders/HtexGenerator.cs

@@ -17,6 +17,7 @@ namespace HTEXLib.Builders
             try {
 
                 XDocument document = XDocument.Load(stream);
+                presentation = PresentationDocument.FromFlatOpcDocument(document);
             } catch(Exception e) {
                  presentation = PresentationDocument.Open(stream, false);
             }

+ 1 - 1
HTEXLib/Controller/HtexController.cs

@@ -187,7 +187,7 @@ namespace HTEXLib.Controller
                 Background background = _mSlide.background;
                 if (background != null)
                 {
-                    slide.fill = PPTXHelper.DoBackgroundProperties(background.BackgroundProperties, _mSlide, "master");
+                    slide.fill = PPTXHelper.DoBackgroundProperties(background.BackgroundProperties, _mSlide,_mSlide.backgroundFrom);
                 };
                 htexElements.AddRange(htexSlide.DrawElement());
 

+ 3 - 3
HTEXLib/HTEXLib.csproj

@@ -4,9 +4,9 @@
     <Description>PPT解析</Description>
     <PackageReleaseNotes>PPT解析</PackageReleaseNotes>
     <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
-    <Version>1.0.5</Version>
-    <AssemblyVersion>1.0.5.5</AssemblyVersion>
-    <FileVersion>1.0.5.5</FileVersion>
+    <Version>1.0.8</Version>
+    <AssemblyVersion>1.0.8.8</AssemblyVersion>
+    <FileVersion>1.0.8.8</FileVersion>
   </PropertyGroup>
   <ItemGroup>
     <PackageReference Include="DocumentFormat.OpenXml" Version="2.11.3" />

+ 1 - 1
HTEXLib/Models/HTEX/HtexChart.cs

@@ -98,7 +98,7 @@ namespace HTEXLib.Models.HTEX
             }
             LinkedList<PPTParagraph> PPTParagraphs=  DoChartTitle(Chart.Title);
             List<Paragraph> paragraphs = DrawText(PPTParagraphs);
-            Shape shape= new Shape { type = "Shape", shapeType = "Rect", paragraph = paragraphs };
+            Shape shape= new Shape { type = "Sp", shapeType = "rect", paragraph = paragraphs };
             shape.style.fill = shapeStyle != null ? shapeStyle.fill : null;
             shape.style.border = shapeStyle != null ? shapeStyle.border : null;
             var  chart= new Chart { id = this.id,  charts =charts,title=shape};

+ 9 - 2
HTEXLib/Models/HTEX/HtexShape.cs

@@ -96,8 +96,15 @@ namespace HTEXLib.Models.HTEX
                     }
                 });
             }
-            if (shapeTypeNode != null && shapeTypeNode.Preset!=null  && !string.IsNullOrEmpty(shapeTypeNode.Preset.InnerText)) {
-                var shapeType = shapeTypeNode.Preset.InnerText;
+            var shapeType = "rect";
+            if (shapeTypeNode != null && shapeTypeNode.Preset != null && !string.IsNullOrEmpty(shapeTypeNode.Preset.InnerText))
+            {
+                shapeType = shapeTypeNode.Preset.InnerText;
+                Svg svg = PPTXSvg.GenShapeSvg(Shape.element, index, shapeType, position, shape.style.border);
+                shape.svg = svg;
+                shape.shapeType = shapeType;
+            }
+            else {
                 Svg svg = PPTXSvg.GenShapeSvg(Shape.element, index, shapeType, position, shape.style.border);
                 shape.svg = svg;
                 shape.shapeType = shapeType;

+ 263 - 1
HTEXLib/Models/PPTX/PPTSlide.cs

@@ -6,6 +6,7 @@ using HTEXLib.Builders;
 using HTEXLib.Models.Inner;
 using System;
 using System.Collections.Generic;
+using System.Linq;
 using System.Text;
 using System.Xml.Linq;
 
@@ -15,6 +16,7 @@ namespace HTEXLib.Models
     {
         public PPTSlide(SlidePart openXmlPart, int slideIndex, DefaultTextStyle defaultTextStyle,SlideSize SlideSizes, SlideMasterPart slideMasterPart, XElement root,IEnumerable<XElement> media,TableStylesPart tableStylesPart)
         {
+           
             base.tableStylesPart = tableStylesPart;
             base.SlidePart = openXmlPart;
             base.slideMasterPart = slideMasterPart;
@@ -30,24 +32,45 @@ namespace HTEXLib.Models
             SetSpecificProperties(SlideLayoutPart);
             SetBackground(openXmlPart, slideMasterPart);
             Id = "s1s0";
-            Transition = JSONGenerator.GenerateTransitionAnimationObject(openXmlPart.Slide.Transition);
+            //页面过渡 切换  https://docs.microsoft.com/zh-cn/dotnet/api/documentformat.openxml.presentation.transition?view=openxml-2.8.1
+
+            Transition transition = openXmlPart.Slide.Transition;
+          
+            if (transition == null) {
+                transition= openXmlPart.Slide.Descendants<DocumentFormat.OpenXml.Presentation.Transition>().FirstOrDefault();
+            }
+            Transition = JSONGenerator.GenerateTransitionAnimationObject(transition);
             Animations = new List<IAnimation>();
             AddAnimations(openXmlPart.Slide.Timing, Animations, SlideSizes);
+            AddTimings(openXmlPart.Slide.Timing, Animations, SlideSizes);
+            //TODO 处理layout 及 master 的 Transition Timing。
+            IAnimation transition_animation;
+            IAnimation slide_transition =  AddTransition(openXmlPart.Slide.Transition, "slide");
+            
+            IAnimation layout_transition = AddTransition(openXmlPart.SlideLayoutPart.SlideLayout.Transition, "layout");
+            IAnimation master_transition = AddTransition(slideMasterPart.SlideMaster.Transition, "master");
             
         }
 
+
+
         private void SetBackground(SlidePart slidePart, SlideMasterPart slideMasterPart)
         {
             background=  slidePart.Slide.CommonSlideData.Background;
+            backgroundFrom = "slide";
             if (background == null) {
+                backgroundFrom = "layout";
                 background = slidePart.SlideLayoutPart.SlideLayout.CommonSlideData.Background;
             }
             if (background == null) {
+                backgroundFrom = "master";
                 background = slideMasterPart.SlideMaster.CommonSlideData.Background;
             }
         }
         public List<string> lazyFiles { get; set; } = new List<string>();
         public Background background { get; set; }
+        public string backgroundFrom { get; set; }
+
         //Slide specific properties
         public DefaultTextStyle defaultTextStyle { get; set; }
         public PPTContainerShape ContainerShape { get; set; } = new PPTContainerShape();
@@ -143,6 +166,14 @@ namespace HTEXLib.Models
                 }
 
         }
+
+
+        private void AddTimings(OpenXmlCompositeElement element, List<IAnimation> animations, SlideSize slideSizes)
+        {
+            if (element == null)
+                return;
+        }
+       
         public void AddAnimations(OpenXmlCompositeElement element, List<IAnimation> resultList, SlideSize SlideSizes)
         {
             if (element == null)
@@ -215,5 +246,236 @@ namespace HTEXLib.Models
                 }
             }
         }
+        private IAnimation AddTransition(Transition trans,string partForm)
+        {
+            if (trans == null || trans.FirstChild == null)
+                return null;
+            TransitionAnimation result = new TransitionAnimation();
+            if (trans.Speed != null && TransitionSpeedValues.Fast.Equals(trans.Speed.Value))
+                result.Length = 500;
+            else if (trans.Speed != null && TransitionSpeedValues.Slow.Equals(trans.Speed.Value))
+                result.Length = 2000;
+            //用于播放 设置持续时长
+            else if (trans.Duration != null)
+                result.Length = int.Parse(trans.Duration.Value);
+            else
+                result.Length = 1000;
+            result.Start = 0;
+            result.InitialState = -1;
+            result.Repetitions = 1;
+            //指定鼠标单击是否推进幻灯片。如果未指定此属性,则假设值为true。
+            if (trans.AdvanceOnClick != null)
+                result.AdvanceOnClick = trans.AdvanceOnClick.Value;
+            else result.AdvanceOnClick = true;
+            //advTm小于 动画总时长 以动画总时长为准
+            //当前页动画时长  |___ _____ ______ __|
+            //当前页advTm时长 |________________|
+            //advTm大于 动画总时长,以advTm 时长为准,动画间隔被平均
+            //当前页动画时长  |___   _____   ______   __|
+            //当前页advTm时长 |_________________________|
+            if (trans.AdvanceAfterTime != null) {
+                result.advTm = int.Parse(trans.AdvanceAfterTime.Value);
+            }
+
+            if (typeof(DocumentFormat.OpenXml.Presentation.BlindsTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<BlindsTransition>();
+                result.Type = AnimationTypes.Blinds;
+                //§19.5.18
+                //Horizontal = 0, horz    Vertical = 1  vert
+                result.typeExt = new Dictionary<string, object>() { { result.Type, child.Direction.Value.ToString() } };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.CheckerTransition) == trans.FirstChild.GetType()) {
+
+                var child = trans.GetFirstChild<CheckerTransition>();
+                result.Type = AnimationTypes.Checker;
+                //	§19.5.24
+                //Horizontal = 0, horz    Vertical = 1  vert
+                result.typeExt = new Dictionary<string, object>() { { result.Type, child.Direction.Value.ToString() } };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.CircleTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<CircleTransition>();
+                result.Type = AnimationTypes.Circle;
+                //	§19.5.26
+                result.typeExt = new Dictionary<string, object>() { { result.Type,""} };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.DissolveTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<DissolveTransition>();
+                //§19.5.36
+                result.Type = AnimationTypes.Dissolve;// AnimationTypes.DissolveIn;
+                result.typeExt = new Dictionary<string, object>() { { result.Type,""} };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.CombTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<CombTransition>();
+                result.Type = AnimationTypes.Comb;
+                //	§19.5.30
+                //Horizontal = 0, horz    Vertical = 1  vert
+                result.typeExt = new Dictionary<string, object>() { { result.Type, child.Direction.Value.ToString() } };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.CoverTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<CoverTransition>();
+                result.Type = AnimationTypes.Cover;
+                //	§19.5.32
+                //u up 默认 , d down , l left  ,r right  ,ld left down  ,lu left up, rd right down ,ru right up 
+                result.typeExt = new Dictionary<string, object>() { { result.Type, child.Direction.Value.ToString() } };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.CutTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<CutTransition>();
+                result.Type = AnimationTypes.Cut;
+                bool flag = false;
+                if (child.ThroughBlack != null && child.ThroughBlack.Value) {
+                    result.Type = AnimationTypes.CutThroughBlack;
+                    flag = true;
+                }
+                //	§19.5.34
+                result.typeExt = new Dictionary<string, object>() { { result.Type, flag} };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.DiamondTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<DiamondTransition>();
+                result.Type = AnimationTypes.Diamond;
+                //§19.5.35
+                result.typeExt = new Dictionary<string, object>() { { result.Type,"" } };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.FadeTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<FadeTransition>();
+                result.Type = AnimationTypes.Fade;
+                bool flag = false;
+                if (child.ThroughBlack != null && child.ThroughBlack.Value)
+                {
+                    result.Type = AnimationTypes.FadeThroughBlack;
+                    flag = true;
+                }
+                //	§19.5.41
+                result.typeExt = new Dictionary<string, object>() { { result.Type, flag } };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.NewsflashTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<NewsflashTransition>();
+                result.Type = AnimationTypes.Newsflash;
+                //	§19.5.50
+                result.typeExt = new Dictionary<string, object>() { { result.Type,"" } };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.PlusTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<PlusTransition>();
+                result.Type = AnimationTypes.Plus;
+                //	§19.5.54
+                result.typeExt = new Dictionary<string, object>() { { result.Type, ""} };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.PullTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<PullTransition>();
+                result.Type = AnimationTypes.Pull;
+                //	§19.5.58
+                //u up 默认 , d down , l left  ,r right  ,ld left down  ,lu left up, rd right down ,ru right up 
+                result.typeExt = new Dictionary<string, object>() { { result.Type, child.Direction.Value.ToString() } };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.PushTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<PushTransition>();
+                result.Type = AnimationTypes.Push;
+                //	§19.5.59
+                //u up 默认  d down  l left  r right
+                result.typeExt =new Dictionary<string, object>() { { result.Type, child.Direction.Value.ToString() } };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.RandomTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<RandomTransition>();
+                result.Type = AnimationTypes.Random;
+                //§19.5.60
+                result.typeExt = new Dictionary<string, object>() { { result.Type,"" } };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.RandomBarTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<RandomBarTransition>();
+                result.Type = AnimationTypes.RandomBar;
+                // Horizontal = 0, horz Vertical = 1  vert
+                //	§19.5.61
+                result.typeExt = new Dictionary<string, object>() { { result.Type, child.Direction.Value.ToString() } };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.SplitTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<SplitTransition>();
+                result.Type = AnimationTypes.Split;
+                // Out = 0, out In = 1  in
+                var dir = child.Direction.Value.ToString();
+                // Horizontal = 0, horz Vertical = 1  vert
+                //	§19.5.71
+                var orient = child.Orientation.Value.ToString();
+                result.typeExt = new Dictionary<string, object>() { { result.Type,new { dir , orient } } };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.StripsTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<StripsTransition>();
+                result.Type = AnimationTypes.Strips;
+                //  Left-Up lu , Right-Up ru ,Left-Downld , Right-Down rd 
+                //	§19.5.74
+                result.typeExt = new Dictionary<string, object>() { { result.Type, child.Direction.Value.ToString() } };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.WedgeTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<WedgeTransition>();
+                result.Type = AnimationTypes.Wedge;
+                //	§19.5.94
+                result.typeExt = new Dictionary<string, object>() { { result.Type, "" } };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.WheelTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<WheelTransition>();
+                result.Type = AnimationTypes.Wheel;
+                //19.5.95
+                // 1,一个扇形中心旋转一圈,右上角开始,  2 两个扇形旋转, 3三个扇形旋转,4 四个扇形旋转, 8 八个扇形旋转
+                result.typeExt = new Dictionary<string, object>() { { result.Type, child.Spokes.Value.ToString() } };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.WipeTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<WipeTransition>();
+                result.Type = AnimationTypes.Wipe;
+                //u up 默认 , d down , l left  ,r right 
+                //	§19.5.96
+                result.typeExt = new Dictionary<string, object>() { { result.Type, child.Direction.Value.ToString() } };
+            }
+            else if (typeof(DocumentFormat.OpenXml.Presentation.ZoomTransition) == trans.FirstChild.GetType()) {
+                var child = trans.GetFirstChild<ZoomTransition>();
+                result.Type = AnimationTypes.Zoom;
+                // Out = 0, out In = 1  in
+                //	§19.5.97
+                result.typeExt = new Dictionary<string, object>() { { result.Type, child.Direction.Value.ToString() } };
+            }
+            var SoundAction = trans.GetFirstChild<SoundAction>();
+            if (SoundAction != null) {
+                var loop = false;
+                if (SoundAction.StartSoundAction.Loop != null) {
+                    loop = true;
+                }
+                var url = "";
+                var name = "";
+                if (SoundAction.StartSoundAction.Sound != null) {
+                    var Sound = SoundAction.StartSoundAction.Sound;
+
+                    var Embed = Sound.Embed;
+                    DataPartReferenceRelationship part = null;
+                    if (partForm == "slide")
+                    {
+                        part = SlidePart.DataPartReferenceRelationships.Where(x => x.Id == Embed).FirstOrDefault();
+                    }
+                    if (partForm == "layout")
+                    {
+                        part =  SlideLayoutPart.DataPartReferenceRelationships.Where(x => x.Id == Embed).FirstOrDefault();
+
+                    }
+                    if (partForm == "master")
+                    {
+                        part = slideMasterPart.DataPartReferenceRelationships.Where(x => x.Id == Embed).FirstOrDefault();
+                    }
+                    if (part != null)
+                    {
+                         url = part.Uri.ToString().Replace("../", "/ppt/");
+                         var thumbnail = Media.Where(x => x.Attributes().Select(y => y.Value == url).FirstOrDefault()).FirstOrDefault();
+                        //if (thumbnail != null)
+                        //{
+                        //    var contentType = thumbnail.Attribute("{http://schemas.microsoft.com/office/2006/xmlPackage}contentType").Value;
+                        //    //var data = thumbnail.Value;
+                        //    //url = "data:" + contentType + ";base64," + data;
+                        //    //url = url.Replace("\r\n", "");
+                        //    result.url = url;
+                        //    // htexBlipFill.urlType = "base64";
+                        //    //   htexBlipFill.contentType = contentType;
+                        //}
+                    }
+                    result.typeExt = new Dictionary<string, object>() { { "sndAc", new { loop, url, name } } };
+                }
+            }
+            ///TODO  Office2013|Office2010 
+            return result;
+        }
     }
 }

+ 2 - 1
HTEXMarkWeb/appsettings.Development.json

@@ -5,5 +5,6 @@
       "Microsoft": "Warning",
       "Microsoft.Hosting.Lifetime": "Information"
     }
-  }
+  },
+  "urls": "https://*:9527"
 }

+ 2 - 1
HTEXMarkWeb/appsettings.json

@@ -6,5 +6,6 @@
       "Microsoft.Hosting.Lifetime": "Information"
     }
   },
-  "AllowedHosts": "*"
+  "AllowedHosts": "*",
+  "urls": "https://*:9527"
 }

+ 2 - 1
HTEXWeb/appsettings.Development.json

@@ -5,5 +5,6 @@
       "Microsoft": "Warning",
       "Microsoft.Hosting.Lifetime": "Information"
     }
-  }
+  },
+  "urls": "https://*:9527"
 }

+ 2 - 1
HTEXWeb/appsettings.json

@@ -6,5 +6,6 @@
       "Microsoft.Hosting.Lifetime": "Information"
     }
   },
-  "AllowedHosts": "*"
+  "AllowedHosts": "*",
+  "urls": "https://*:9527"
 }

+ 73 - 0
HTEXWeb/对比.xml

@@ -0,0 +1,73 @@
+<p:par>
+  <p:cTn id="17" presetID="2" presetClass="entr" presetSubtype="8" fill="hold" grpId="0" nodeType="clickEffect">
+    <p:stCondLst>
+      <p:cond delay="0"/>
+    </p:stCondLst>
+    <p:childTnLst>
+      <p:set>
+        <p:cBhvr>
+          <p:cTn id="18" dur="1" fill="hold">
+            <p:stCondLst>
+              <p:cond delay="0"/>
+            </p:stCondLst>
+          </p:cTn>
+          <p:tgtEl>
+            <p:spTgt spid="2"/>
+          </p:tgtEl>
+          <p:attrNameLst>
+            <p:attrName>style.visibility</p:attrName>
+          </p:attrNameLst>
+        </p:cBhvr>
+        <p:to>
+          <p:strVal val="visible"/>
+        </p:to>
+      </p:set>
+      <p:anim calcmode="lin" valueType="num">
+        <p:cBhvr additive="base">
+          <p:cTn id="19" dur="500" fill="hold"/>
+          <p:tgtEl>
+            <p:spTgt spid="2"/>
+          </p:tgtEl>
+          <p:attrNameLst>
+            <p:attrName>ppt_x</p:attrName>
+          </p:attrNameLst>
+        </p:cBhvr>
+        <p:tavLst>
+          <p:tav tm="0">
+            <p:val>
+              <p:strVal val="0-#ppt_w/2"/>
+            </p:val>
+          </p:tav>
+          <p:tav tm="100000">
+            <p:val>
+              <p:strVal val="#ppt_x"/>
+            </p:val>
+          </p:tav>
+        </p:tavLst>
+      </p:anim>
+      <p:anim calcmode="lin" valueType="num">
+        <p:cBhvr additive="base">
+          <p:cTn id="20" dur="500" fill="hold"/>
+          <p:tgtEl>
+            <p:spTgt spid="2"/>
+          </p:tgtEl>
+          <p:attrNameLst>
+            <p:attrName>ppt_y</p:attrName>
+          </p:attrNameLst>
+        </p:cBhvr>
+        <p:tavLst>
+          <p:tav tm="0">
+            <p:val>
+              <p:strVal val="#ppt_y"/>
+            </p:val>
+          </p:tav>
+          <p:tav tm="100000">
+            <p:val>
+              <p:strVal val="#ppt_y"/>
+            </p:val>
+          </p:tav>
+        </p:tavLst>
+      </p:anim>
+    </p:childTnLst>
+  </p:cTn>
+</p:par>