using System; using System.Collections.Generic; using System.Text; using ClearSlideLibrary.Dom; using System.IO; namespace ClearSlideLibrary.HtmlController { internal class HtmlSlide : HtmlPresentationElement { public PPTContainerShape ContainerShape { get; set; } private readonly string _fileName; private readonly string dirPath; private int slideIndex; public HtmlSlide(string slideid, string slideClass, string fileName, string dirpath, int slideIndex) { base.id = slideid; base.cssClass = slideClass; this._fileName = fileName; this.dirPath = dirpath; this.slideIndex = slideIndex; } public override string DrawElement() { StringBuilder slideBuilder = new StringBuilder(1000); slideBuilder.Append("
"); try { GenerateElements(slideBuilder); } catch (ArgumentNullException ex) { Console.WriteLine("The slide has no shapes." + ex); } slideBuilder.Append("
"); return slideBuilder.ToString(); } private void GenerateElements(StringBuilder slide) { if (ContainerShape.Elements.Count > 0) { foreach (PPTShapeBase baseShape in ContainerShape.Elements) { DrawShapeHtml(slide, baseShape); } } } private void DrawShapeHtml(StringBuilder slide, PPTShapeBase baseShape) { int left = baseShape.VisualShapeProp.Left(); int width = baseShape.VisualShapeProp.PixelWidth(); int top = baseShape.VisualShapeProp.Top(); int height = baseShape.VisualShapeProp.PixelHeight(); string Id = baseShape.NonVisualShapeProp.Id; bool invisible = baseShape.Invisible; bool animatable = baseShape.Animatable; string clickLinkUrl = baseShape.ClickLinkUrl; //simple fix (not good but work for now). DirectoryInfo dest = new DirectoryInfo(dirPath); FileInfo[] files = dest.GetFiles(); foreach (FileInfo file in files) { string fname = Path.GetFileNameWithoutExtension(file.Name); if (fname.Equals(Id)) { if (baseShape is PPTGraphicFrame) { HtmlSmartArt htmlSmartArt = new HtmlSmartArt(Id, width, height, top, left, invisible, animatable); slide.Append(htmlSmartArt.DrawElement()); } else if (baseShape is PPTGroupShape) { HtmlGroupShape htmlShape = new HtmlGroupShape(Id, width, height, top, left, invisible, animatable); slide.Append(htmlShape.DrawElement()); } else if (baseShape is PPTConnectionShape) { HtmlConnectionShape htmlShape = new HtmlConnectionShape(Id, width, height, top, left, invisible, animatable); slide.Append(htmlShape.DrawElement()); } else if (baseShape is PPTShape) { PPTShape s = (PPTShape)baseShape; HtmlShape htmlShape = new HtmlShape(Id, width, height, top, left, invisible, animatable, slideIndex) { Shape = s, Rotate = s.VisualShapeProp.Rotate, HyperLink = clickLinkUrl }; slide.Append(htmlShape.DrawElement()); } else if (baseShape is PPTImage) { string imageName = baseShape.NonVisualShapeProp.Name; //TODO Differentiate between gif and other image types. //HtmlImageGIF image = new HtmlImageGIF(Id, _fileName, imageName,top, left); //slide.Append(image.DrawElement()); HtmlImage htmlImage = new HtmlImage(Id, width, height, top, left, invisible, animatable,((PPTImage)baseShape).FileExtension ) { HyperLink = clickLinkUrl }; slide.Append(htmlImage.DrawElement()); } } } } public override string ToString() { Console.WriteLine("The id is:" + id); Console.WriteLine("The css class is:" + cssClass); return id + cssClass; } } }