123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235 |
- using DocumentFormat.OpenXml.Presentation;
- using HTEXLib.Animations;
- using HTEXLib.Helpers.ShapeHelpers;
- using HTEXLib.Models;
- using HTEXLib.Models.HTEX;
- using Newtonsoft.Json.Linq;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Text.Json;
- using System.Text.RegularExpressions;
- namespace HTEXLib.Controller
- {
- public class HtexController
- {
- private readonly int _numberOfSlides;
- private readonly int _allSlidesCount;
- private readonly int _slideIndex;
- // private readonly string _fileName;
- // private readonly string _baseFileName;
- // private readonly string _filePath;
- /// <summary>
- /// string SC = ".SC {height: " + SlideHeight + "px; width: " + SlideWidth + "px; display: none;}";
- /// </summary>
- private dynamic SC { get; set; }
- /// <summary>
- /// string DC = ".DC1 {top: 0px; left: 0px; height: 100%; width: 100%; opacity: 1; }";
- /// </summary>
- private dynamic DC1 { get; set; }
- /// <summary>
- /// string DC0 = ".DC0 {top: 0px; left: 0px; height: 100%; width: 100%; opacity: 0;}";
- /// </summary>
- private dynamic DC0 { get; set; }
- /// <summary>
- /// var gv = {w: 0,h: 0,t: 1,a: " + "'" + this._fileName + "'" + ",v: 0,sh:" + SlideHeight + ",sw:" + SlideWidth + ",s: 0,i:" + numbers + ",f:1,r:1};
- /// </summary>
- private dynamic gv { get; set; }
- // private readonly StringBuilder _htmlPart;
- private List<Item> htexElements;
- private readonly PPTSlide _mSlide;
- private const string JS_DIR_NAME = "temp";
- public double SlideWidth { get; set; }
- public double SlideHeight { get; set; }
- public HtexController(PPTSlide aSlide, int slideCounter, int slidesNumber)
- {
-
- this._mSlide = aSlide;
- _numberOfSlides = 1;
- _allSlidesCount = slidesNumber;
- _slideIndex = slideCounter;
- this.htexElements = new List<Item>();
-
- }
- public Slide GenerateHtex() {
- this.GenerateHeader();
- Slide slide= this.GenerateBody();
- return slide;
- }
- private void GenerateHeader()
- {
- int[] numbers = DynamicHeaderJSPart();
- AppendHeader(numbers);
- }
- private int [] DynamicHeaderJSPart()
- {
- if (_numberOfSlides == 1)
- {
- return new int[] { 0, 1, 1 } ;
- }
- else
- {
- int count = 0;
- List<int> arr = new List<int>();
- StringBuilder numbers = new StringBuilder();
- numbers.Append("[");
- while (count <= _numberOfSlides - 1)
- {
- arr.Add(count);
- numbers.Append(count.ToString());
- numbers.Append(",");
- count++;
- }
- numbers.Append(count);
- arr.Add(count);
- int length = numbers.ToString().Length;
- string outputString = numbers.ToString().Remove(length - 1, 1);
- arr.Add(int.Parse(outputString));
- //return outputString + "]";
- return arr.ToArray();
- }
- }
- private void AppendHeader(int[] numbers) {
- SC = new {
- height =SlideHeight,
- width =SlideWidth,
- display="none"
- };
- DC1 = new {
- top = 0,
- left = 0,
- height= "100%",
- width = "100%",
- opacity=1
- };
- DC0 = new
- {
- top = 0,
- left = 0,
- height = "100%",
- width = "100%",
- opacity = 0
- };
- gv = new
- {
- w = 0,
- h = 0,
- t= 1,
- v=0,
- sh=SlideHeight,
- sw=SlideWidth,
- s=0,
- i= numbers,
- f=1,
- r=1
- };
- }
- private Slide GenerateBody() {
- ///当页 动画p:timing presetID代表 动画类型 presetClass是进入,强调,还是退出,还是路径方式
- ///tgtEl 子类型
- ///inkTgt (墨迹目标) §19.5.47
- ///sldTgt (幻灯片目标) §19.5.67
- ///sndTgt (声音目标) §19.5.70
- ///spTgt (形状目标) §19.5.72
- ///p:spTgt spid 绑定的sp
- ///AppendPlayer
- int netxPage = _slideIndex >= _allSlidesCount ? _slideIndex : _slideIndex + 1;
- int prevPage = _slideIndex >= _allSlidesCount ? _slideIndex : _slideIndex - 1;
- Slide slide= DynamicBodyPart();
- if (slide != null) {
- slide.netxPage = netxPage;
- slide.prevPage = prevPage;
- }
- return slide;
- }
- private Slide DynamicBodyPart()
- {
- if (_numberOfSlides != 0)
- {
- ////foreach (PPTSlide pptSlide in _mSlides)
- ////{
- ///string dirpath = Path.Combine(_filePath, _fileName);
- HtexSlide htexSlide = new HtexSlide(_mSlide, _mSlide.slideIndex)
- {
- ContainerShape = _mSlide.ContainerShape,
- };
- string anima = new JSONGenerator(_mSlide).GetAnimaVariable();
- //if (_mSlide.slideIndex == 27) {
- //}
-
- Slide slide = new Slide();
- //string jsonStro = anima.Replace(",", ",").Replace("'","");
- //object res = JsonHelper.ConvertJsonStr(jsonStro);
- //string s = res.ToString();
- //var m = Regex.Match(s, "\"[0-9]{1,}\"");
- //while (m.Success)
- //{
- // string testInfo = m.Value;
- // string newStr = testInfo.Replace("\"", "");
- // s = s.Replace(testInfo, newStr);
- // m = m.NextMatch();
- //}
- //JToken token=JsonHelper. FromJson<JToken>(s);
- //slide.animations = token;
- var Animations = _mSlide.Animations;
- if (Animations != null) {
- slide.animations = Animations;
- }
- Background background = _mSlide.background;
- if (background != null)
- {
- slide.fill = PPTXHelper.DoBackgroundProperties(background.BackgroundProperties, _mSlide,_mSlide.backgroundFrom);
- };
- htexElements.AddRange(htexSlide.DrawElement());
- List<Group> newGroup = new List<Group>();
- //处理组合图形在Wpf不能多层嵌套
- int len = htexElements.Count;
- for (int i =0;i<len;i++)
- {
- if (htexElements[i] is Group group)
- {
- doGroup(group, newGroup);
- newGroup.Remove(newGroup.First());
- group.shapes.AddRange(newGroup);
- }
- }
- slide.item = htexElements;
- return slide;
- }
- else { return null; }
- }
- public void doGroup(Group group, List<Group> newGroup)
- {
- if (group != null && group.shapes != null && group.shapes.Count > 0)
- {
- newGroup.Add(group);
- int len = group.shapes.Count;
- List<Item> groups = new List<Item>();
- for(int i= 0; i < len;i++ ){
- if (group.shapes[i] is Group gp)
- {
- doGroup(gp, newGroup);
- groups.Add(group.shapes[i]);
- }
- }
- foreach (var ag in groups) {
- group.shapes.Remove(ag);
- }
- }
- }
- }
- }
|