diff --git a/Demos/MVC/src/Products/Editor/Controllers/EditorApiController.cs b/Demos/MVC/src/Products/Editor/Controllers/EditorApiController.cs index c279edd..130ba38 100644 --- a/Demos/MVC/src/Products/Editor/Controllers/EditorApiController.cs +++ b/Demos/MVC/src/Products/Editor/Controllers/EditorApiController.cs @@ -15,6 +15,7 @@ using System.Net; using System.Net.Http; using System.Net.Http.Headers; +using System.Text.RegularExpressions; using System.Web; using System.Web.Http; using System.Web.Http.Cors; @@ -286,6 +287,11 @@ public HttpResponseMessage SaveFile(EditDocumentRequest postedData) saveOptions.EnablePagination = true; } + if (saveOptions is PresentationSaveOptions) + { + saveOptions.SlideNumber = postedData.getPageNumber() + 1; + } + using (FileStream outputStream = File.Create(tempPath)) { editor.Save(htmlContentDoc, outputStream, saveOptions); @@ -670,16 +676,43 @@ private LoadDocumentEntity LoadDocument(string guid, string password) PresentationEditOptions presentationEditOptions = new PresentationEditOptions(); // Specify slide index from original document. editOptions.SlideNumber = i; // Because index is 0-based, it is 1st slide - EditableDocument slideBeforeEdit = editor.Edit(presentationEditOptions); - - // Get document as a single base64-encoded string, where all resources (images, fonts, etc) - // are embedded inside this string along with main textual content - string allEmbeddedInsideString = slideBeforeEdit.GetEmbeddedHtml(); - PageDescriptionEntity page = new PageDescriptionEntity(); - page.SetData(allEmbeddedInsideString); - page.number = i + 1; - loadDocumentEntity.SetPages(page); - slideBeforeEdit.Dispose(); + using (EditableDocument slideBeforeEdit = editor.Edit(editOptions)) + { + // Get document as a single base64-encoded string, where all resources (images, fonts, etc) + // are embedded inside this string along with main textual content + string allEmbeddedInsideString = slideBeforeEdit.GetEmbeddedHtml(); + PageDescriptionEntity page = new PageDescriptionEntity(); + if (allEmbeddedInsideString.IndexOf(".slide", StringComparison.Ordinal) > -1) + { + // TODO: extract from controller + string regex = @"\.slide.{(.*?)}"; + Match match = Regex.Match(allEmbeddedInsideString, regex, RegexOptions.IgnoreCase); + if (match.Success) + { + string rules = match.Groups[1].Value.Trim().TrimEnd(';'); + Dictionary keyValuePairs = rules.Split(';') + .Select(value => value.Split(':')) + .ToDictionary(pair => pair[0].Trim(), pair => pair[1].Trim()); + + if (keyValuePairs.ContainsKey("height")) + { + string height = string.Empty; + keyValuePairs.TryGetValue("height", out height); + page.height = Convert.ToDouble(height.Replace("pt", "").Replace("px", "")); + } + + if (keyValuePairs.ContainsKey("width")) + { + string width = string.Empty; + keyValuePairs.TryGetValue("width", out width); + page.width = Convert.ToDouble(width.Replace("pt", "").Replace("px", "")); + } + } + } + page.SetData(allEmbeddedInsideString); + page.number = i + 1; + loadDocumentEntity.SetPages(page); + } } } } diff --git a/Demos/MVC/src/Products/Editor/Entity/Web/Request/EditDocumentRequest.cs b/Demos/MVC/src/Products/Editor/Entity/Web/Request/EditDocumentRequest.cs index 9db0b7f..e8ac7bc 100644 --- a/Demos/MVC/src/Products/Editor/Entity/Web/Request/EditDocumentRequest.cs +++ b/Demos/MVC/src/Products/Editor/Entity/Web/Request/EditDocumentRequest.cs @@ -15,6 +15,9 @@ public class EditDocumentRequest : LoadDocumentEntity [JsonProperty] private String password; + [JsonProperty] + private int pageNumber; + public String getContent() { return content; @@ -34,5 +37,15 @@ public void setPassword(String password) { this.password = password; } + + public int getPageNumber() + { + return pageNumber; + } + + public void setPageNumber(int pageNumber) + { + this.pageNumber = pageNumber; + } } } \ No newline at end of file