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