PPTX2HTEXTranslator.cs 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using DocumentFormat.OpenXml.Packaging;
  2. using HTEXLib.Builders;
  3. using HTEXLib.Controller;
  4. using HTEXLib.Models;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.IO;
  8. using System.Text;
  9. using System.Xml.Linq;
  10. namespace HTEXLib.Translator
  11. {
  12. public class PPTX2HTEXTranslator
  13. {
  14. /// <summary>
  15. /// pptx官方的js操作相关接口。 https://docs.microsoft.com/zh-cn/javascript/api/powerpoint?view=powerpoint-js-preview
  16. /// </summary>
  17. /// <param name="stream"></param>
  18. /// <returns></returns>
  19. public Htex Translate(Stream stream) {
  20. PresentationDocument presentation;
  21. var htexBuilder = new HtexBuilder();
  22. try {
  23. XDocument document = XDocument.Load(stream);
  24. presentation = PresentationDocument.FromFlatOpcDocument(document);
  25. } catch {
  26. presentation = PresentationDocument.Open(stream, false,openSettings:new OpenSettings { });
  27. presentation = PresentationDocument.Open(stream, false);
  28. }
  29. var pptSlides = htexBuilder.GetPPTSlides(presentation);
  30. double width = htexBuilder.getSlideWidth();
  31. double height = htexBuilder.getSlideHeight();
  32. int slideCounter = 1;
  33. Htex htex = htexBuilder.Htex;
  34. htex.page = pptSlides.Count;
  35. htex.size = new HtexSize { width = width, height = height };
  36. List<Slide> slides = new List<Slide>();
  37. List<string> lazyFiles = new List<string>();
  38. foreach (PPTSlide pptSlide in pptSlides)
  39. {
  40. var htexController = new HtexController(pptSlide, slideCounter, pptSlides.Count)
  41. {
  42. SlideWidth = width,
  43. SlideHeight = height
  44. };
  45. Slide slide = htexController.GenerateHtex();
  46. slide.width = width;
  47. slide.transition = pptSlide.slideTransition;
  48. slide.height = height;
  49. slide.help = pptSlide.note;
  50. slides.Add(slide);
  51. slideCounter++;
  52. lazyFiles.AddRange(pptSlide.lazyFiles);
  53. }
  54. foreach(var lzfie in lazyFiles)
  55. {
  56. htex.stores[lzfie] = new Store { path = lzfie, isLazy = true, contentType = null, url = null };
  57. }
  58. htexBuilder.presentationDocument.Close();
  59. GC.Collect();
  60. htex.slides = slides;
  61. htex.page = slides.Count;
  62. return htex;
  63. }
  64. }
  65. }