/// <summary> /// Do all the extraction to generate JSON /// </summary> public void extractSlide() { if (Globals.Ribbons.PowerPointStudioRibbon.ediBxExerKey.Text == "") { System.Windows.Forms.MessageBox.Show("Please Enter Excercise Key First"); return; } Application pptApp = new Application(); Presentation presentation = pptApp.ActivePresentation; prevPresentationName = Globals.ThisAddIn.Application.ActivePresentation.Name; //it will be stored in a static variable for later use if (presentation.Name.Contains("pptx")) //pptx files are only extractable { string pptPath = presentation.Path; //Provides directory //Copying this presentation to the same original directory with temp name //All the work will be done on the copied presentation //So not visible to user if (File.Exists(pptPath + @"\temp\CSV.csv")) { try { File.Delete(pptPath + @"\temp\CSV.csv"); if (File.Exists(pptPath + @"\temp\Json.JSON")) { File.Delete(pptPath + @"\temp\Json.JSON"); } } catch { System.Windows.Forms.MessageBox.Show("Please close the CSV or JSON file if already opened"); } } while (Directory.Exists(pptPath + @"\temp")) { //Waiting until the temp directory is successfully deleted try { Directory.Delete(pptPath + @"\temp", true); } catch (Exception err) { //MessageBox.Show(err.ToString()); } } Directory.CreateDirectory(pptPath + @"\temp"); File.Copy(pptPath + @"\" + presentation.Name, pptPath + @"\temp\temp.pptx"); Presentation tempPresentation = pptApp.Presentations.Open(pptPath + @"/temp/temp.pptx", Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse); currentPPTPath = tempPresentation.Path; //Extract medias from this presentation and copy them in a medias folder //Setting media path mediaPath = Utility.createZipAndExtract(tempPresentation); //Getting copy of the current presentation with zip extension path //Extract info from this tempPresentation ezPresentation cusPresentation = new ezPresentation(tempPresentation); //Creating and writing JSON Utility.writeJsonToFile(cusPresentation, currentPPTPath + "\\Json.JSON"); //Close the presentation tempPresentation.Close(); System.Windows.Forms.MessageBox.Show("Extraction Complete"); Utility.staticResourceClear(); prevTotalShapeCount = getTotalShapeCount(presentation); prevTotalSlideCount = presentation.Slides.Count; } else { System.Windows.Forms.MessageBox.Show("Extraction is only possible with pptx files"); } }
/// <summary> /// Generate HTML from JSON of the ezPresentation /// </summary> /// <param name="JSON"></param> public HtmlGenerator(string JSON) { //delete directory if already exists if (Directory.Exists(PowerPointStudioRibbon.currentPPTPath + "\\HTML")) { Directory.Delete(PowerPointStudioRibbon.currentPPTPath + "\\HTML", true); } //Parse JSON to ezPresentation ezPresentation presentation = Newtonsoft.Json.JsonConvert.DeserializeObject <ezPresentation>(JSON); //Vatiables Global Level int PageWidth = 960; int PageHeight = 700; int htmlCount = 0; //Generate HTML for all slides foreach (ezSlide slide in presentation.ezSlides) { string styleClass = "a {" + " text-decoration: none;" + " display: inline-block;" + " padding: 8px 16px;" + "}" + "a:hover {" + " background-color: #ddd;" + " color: black;" + "}" + ".previous {" + " background-color: #d49764;" + " color: black;" + "}" + ".next {" + " background-color: #4CAF50;" + " color: white;" + "}" + ".round {" + " border-radius: 50%;" + "}"; string headHtml = "<html lang=\"en\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1252\">" + " <title>Test Application </title>" + "</head>" + "<style>" + styleClass + "</style>" + "<body style=\"width: " + PageWidth + "; height:" + PageHeight + "; margin: 8px;\">"; //headHtml = headHtml + SlideDiv(slide.backGround.image.actualUrl, (float)Convert.ToDouble(slide.backGround.css.width.Replace("px", "")), // (float)Convert.ToDouble(slide.backGround.css.height.Replace("px", "")), (float)Convert.ToDouble(slide.backGround.css.left.Replace("px", "")), // (float)Convert.ToDouble(slide.backGround.css.top.Replace("px", ""))); foreach (ezShape shape in slide.shapes) { if (shape.image.imgurlLarge != null) { string imageActualUrl = ((shape.image.imgurlLarge).Replace("https://ezilmdev.org", Globals.ThisAddIn.Application.ActivePresentation.Path + @"\temp")).Replace(@"/", @"\"); headHtml = headHtml + DivAdded(imageActualUrl, (float)Convert.ToDouble(shape.image.css.width.Replace("px", "")), (float)Convert.ToDouble(shape.image.css.height.Replace("px", "")), (float)Convert.ToDouble(shape.image.css.left.Replace("px", "")), (float)Convert.ToDouble(shape.image.css.top.Replace("px", "")), false, false, shape.image.css.rotation); } } //Adding navigation button string navigation = ""; if (htmlCount == 0 && presentation.ezSlides.Count > 1) { navigation = "<div style=\"margin: 0px; position: absolute; top: 720px; left: 400px;\">" + " <a href=\"html0.html\" class=\"previous\">« Previous</a><a href=\"html" + (htmlCount + 1) + ".html\" class=\"next\">Next »</a>" + " </div>"; headHtml = headHtml + navigation; } else if (htmlCount == 0 && presentation.ezSlides.Count == 1) { navigation = "<div style=\"margin: 0px; position: absolute; top: 720px; left: 400px;\">" + " <a href=\"html0.html\" class=\"previous\">« Previous</a><a href=\"html" + (htmlCount) + ".html\" class=\"next\">Next »</a>" + " </div>"; headHtml = headHtml + navigation; } else if (htmlCount < presentation.ezSlides.Count - 1) { navigation = "<div style=\"margin: 0px; position: absolute; top: 720px; left: 400px;\">" + " <a href=\"html" + (htmlCount - 1) + ".html\" class=\"previous\">« Previous</a><a href=\"html" + (htmlCount + 1) + ".html\" class=\"next\">Next »</a>" + " </div>"; headHtml = headHtml + navigation; } else if (htmlCount < presentation.ezSlides.Count) { navigation = "<div style=\"margin: 0px; position: absolute; top: 720px; left: 400px;\">" + " <a href=\"html" + (htmlCount - 1) + ".html\" class=\"previous\">« Previous</a><a href=\"html" + (htmlCount) + ".html\" class=\"next\">Next »</a>" + " </div>"; headHtml = headHtml + navigation; } string closeString; if (headHtml != "") { closeString = @"</div></body>" + Environment.NewLine + @"</html > "; headHtml = headHtml + closeString; } //creates a directory to save html files if (!Directory.Exists(PowerPointStudioRibbon.currentPPTPath + "\\HTML")) { Directory.CreateDirectory(PowerPointStudioRibbon.currentPPTPath + "\\HTML"); } System.IO.File.WriteAllText(PowerPointStudioRibbon.currentPPTPath + "\\HTML" + "\\html" + htmlCount + ".html", headHtml); htmlCount++; } if (File.Exists(PowerPointStudioRibbon.currentPPTPath + "\\HTML" + "\\html" + 0 + ".html")) { Process.Start(PowerPointStudioRibbon.currentPPTPath + "\\HTML" + "\\html" + 0 + ".html"); } else { System.Windows.Forms.MessageBox.Show("No HTML found"); } }
private System.Data.DataTable GetDataTableFromJSON(string JSON) { System.Data.DataTable dataTable = new System.Data.DataTable(); ezPresentation dt = JsonConvert.DeserializeObject <ezPresentation>(JSON); dataTable.Columns.Add("sid", typeof(string)); dataTable.Columns.Add("shapeId", typeof(string)); dataTable.Columns.Add("shClass", typeof(string)); dataTable.Columns.Add("objectType", typeof(string));//can not get this from JSON dataTable.Columns.Add("width", typeof(string)); dataTable.Columns.Add("height", typeof(string)); dataTable.Columns.Add("left", typeof(string)); dataTable.Columns.Add("top", typeof(string)); dataTable.Columns.Add("rotation", typeof(float)); dataTable.Columns.Add("zindex", typeof(int)); dataTable.Columns.Add("imagePath", typeof(string)); dataTable.Columns.Add("uploadImagePath", typeof(string)); dataTable.Columns.Add("imageUrlLarge", typeof(string)); dataTable.Columns.Add("imageUrlMedium", typeof(string)); dataTable.Columns.Add("imageUrlSmall", typeof(string)); dataTable.Columns.Add("onClick", typeof(string)); dataTable.Columns.Add("onHover", typeof(string)); dataTable.Columns.Add("onLoad", typeof(string)); dataTable.Columns.Add("audioUrl", typeof(string)); foreach (ezSlide sld in dt.ezSlides) { //DataRow dataRow=null; foreach (ezShape shp in sld.shapes) { DataRow dataRow = dataTable.NewRow(); dataRow[0] = sld.sid; dataRow[1] = shp.id; //shape id dataRow[2] = shp.@class; //shape.class dataRow[3] = "N//A"; //objectType if (shp.image.css != null) { dataRow[4] = shp.image.css.width; //width dataRow[5] = shp.image.css.height; //height dataRow[6] = shp.image.css.left; //left dataRow[7] = shp.image.css.top; //top dataRow[8] = shp.image.css.rotation; //rotation dataRow[9] = shp.image.css.zIndex; //zindex } if (shp.image.imgurlLarge != null) { dataRow[10] = currentPPTPath + (shp.image.imgurlLarge.Replace("https://ezilmdev.org", "")).Replace("/", @"\"); //imagePath Actual dataRow[11] = sld.sid.Replace("_", "/") + @"/" + sld.sid + "-" + (shp.image.imgurlLarge.Replace("https://ezilmdev.org/images/", "")); //uploadImagePath dataRow[12] = shp.image.imgurlLarge; //imageUrlLarge dataRow[13] = shp.image.imgurlMedium; //imageUrlMedium dataRow[14] = shp.image.imgurlSmall; //imageUrlSmall } if (shp.actions != null) { dataRow[15] = (shp.actions.onClick != null) ? shp.actions.onClick : ""; //onClick dataRow[16] = (shp.actions.onHover != null) ? shp.actions.onHover : ""; //onHover dataRow[17] = (shp.actions.onLoad != null) ? shp.actions.onLoad : ""; //onLoad } dataRow[18] = shp.audioUrl != null? shp.audioUrl:""; //audioUrl dataTable.Rows.Add(dataRow); } } return(dataTable); }
/// <summary> /// Generate HTML from ezPresentation /// </summary> /// <param name="presentation"></param> public HtmlGenerator(ezPresentation presentation) { }