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;
///
/// string SC = ".SC {height: " + SlideHeight + "px; width: " + SlideWidth + "px; display: none;}";
///
private dynamic SC { get; set; }
///
/// string DC = ".DC1 {top: 0px; left: 0px; height: 100%; width: 100%; opacity: 1; }";
///
private dynamic DC1 { get; set; }
///
/// string DC0 = ".DC0 {top: 0px; left: 0px; height: 100%; width: 100%; opacity: 0;}";
///
private dynamic DC0 { get; set; }
///
/// 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};
///
private dynamic gv { get; set; }
// private readonly StringBuilder _htmlPart;
private List- 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
- ();
}
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 arr = new List();
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(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 newGroup = new List();
//处理组合图形在Wpf不能多层嵌套
int len = htexElements.Count;
for (int i =0;i newGroup)
{
if (group != null && group.shapes != null && group.shapes.Count > 0)
{
newGroup.Add(group);
int len = group.shapes.Count;
List
- groups = new List
- ();
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);
}
}
}
}
}