/// <summary> /// Constructor /// </summary> /// <param name="preambuleSettings">Preambule settings</param> /// <param name="slideNumber">Number of currently generated slide</param> /// <param name="baseFontSize">Base font size (optional)</param> public SlideBuilder(PreambuleSettings preambuleSettings, int slideNumber, float baseFontSize = 11.0f) { _slideNumber = slideNumber; _baseFontSize = baseFontSize; _preambuleSettings = preambuleSettings; }
/// <summary> /// Build presentation from document tree. /// </summary> /// <param name="filename">Filename of input file (used for output file)</param> /// <param name="outputPath">Output directory</param> /// <param name="document">Document tree</param> /// <param name="slideCount">Number of slides in document tree</param> /// <param name="sectionTable">Table of document sections</param> /// <param name="frametitleTable">Table of frame titles</param> public void Build(string filename, string outputPath, Node document, int slideCount, List<SectionRecord> sectionTable, Dictionary<int, FrametitleRecord> frametitleTable) { #region Initialize internal variables if (outputPath.Length == 0) { _filename = Path.Combine(Directory.GetCurrentDirectory(), "output", Path.GetFileNameWithoutExtension(filename)); try { // if output directory doesn't exist then create it if (!Directory.Exists(Path.Combine(Directory.GetCurrentDirectory(), "output"))) Directory.CreateDirectory(Path.Combine(Directory.GetCurrentDirectory(), "output")); } catch (Exception) { throw new PowerPointApplicationException("Couldn't create default output directory."); } } else { _filename = Path.Combine(outputPath, Path.GetFileNameWithoutExtension(filename)); try { // if output directory doesn't exist then create it if (!Directory.Exists(outputPath)) Directory.CreateDirectory(outputPath); } catch (Exception) { throw new PowerPointApplicationException("Couldn't create output directory."); } } _document = document; _slideCount = slideCount; _sectionTable = sectionTable ?? new List<SectionRecord>(); _frametitleTable = frametitleTable ?? new Dictionary<int, FrametitleRecord>(); _preambuleSettings = new PreambuleSettings(Path.GetDirectoryName(filename)); _currentSlide = 0; _slideIndex = 0; _currentProgress = BasicProgress; #endregion // Initialize internal variables Node preambule = _document.FindFirstNode("preambule"); if (preambule == null) throw new DocumentBuilderException("Couldn't build document, something went wrong. Please try again."); ProcessPreambule(preambule, _document.OptionalParams); // create new presentation without window _pptPresentation = _pptApplication.Presentations.Add(MsoTriState.msoFalse); Node body = _document.FindFirstNode("body"); if (body == null) throw new DocumentBuilderException("Couldn't build document, something went wrong. Please try again."); ProcessBody(body); try { _pptPresentation.SaveAs(_filename, Settings.Instance.SaveAs); } catch (Exception) { throw new DocumentBuilderException("Couldn't save output file."); } finally { // final progress change after saving RaiseProgress(); } // print save message switch (Settings.Instance.SaveAs) { case Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsDefault: case Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsOpenXMLPresentation: case Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsPresentation: Messenger.Instance.SendMessage(System.IO.Path.GetFileName(filename) + " - Output saved to: \"" + _pptPresentation.FullName + "\""); break; case Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsPDF: Messenger.Instance.SendMessage(System.IO.Path.GetFileName(filename) + " - Output saved to: \"" + _filename + ".pdf\""); break; default: Messenger.Instance.SendMessage(System.IO.Path.GetFileName(filename) + " - Output saved to output directory."); break; } try { _pptPresentation.Close(); _pptPresentation = null; } catch { } }