using DocumentFormat.OpenXml.Packaging;
using HTEXLib.Builders;
using HTEXLib.Controller;
using HTEXLib.Models;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml.Linq;
namespace HTEXLib.Translator
{
public class PPTX2HTEXTranslator
{
///
/// pptx官方的js操作相关接口。 https://docs.microsoft.com/zh-cn/javascript/api/powerpoint?view=powerpoint-js-preview
///
///
///
public Htex Translate(Stream stream) {
PresentationDocument presentation;
var htexBuilder = new HtexBuilder();
try {
XDocument document = XDocument.Load(stream);
presentation = PresentationDocument.FromFlatOpcDocument(document);
} catch {
presentation = PresentationDocument.Open(stream, false,openSettings:new OpenSettings { });
presentation = PresentationDocument.Open(stream, false);
}
var pptSlides = htexBuilder.GetPPTSlides(presentation);
double width = htexBuilder.getSlideWidth();
double height = htexBuilder.getSlideHeight();
int slideCounter = 1;
Htex htex = htexBuilder.Htex;
htex.page = pptSlides.Count;
htex.size = new HtexSize { width = width, height = height };
List slides = new List();
List lazyFiles = new List();
foreach (PPTSlide pptSlide in pptSlides)
{
var htexController = new HtexController(pptSlide, slideCounter, pptSlides.Count)
{
SlideWidth = width,
SlideHeight = height
};
Slide slide = htexController.GenerateHtex();
slide.width = width;
slide.transition = pptSlide.slideTransition;
slide.height = height;
slide.help = pptSlide.note;
slides.Add(slide);
slideCounter++;
lazyFiles.AddRange(pptSlide.lazyFiles);
}
foreach(var lzfie in lazyFiles)
{
htex.stores[lzfie] = new Store { path = lzfie, isLazy = true, contentType = null, url = null };
}
htexBuilder.presentationDocument.Close();
GC.Collect();
htex.slides = slides;
htex.page = slides.Count;
return htex;
}
}
}