diff --git a/src/GroupDocs.Editor.MVC.csproj b/src/GroupDocs.Editor.MVC.csproj index 9faaa6c..2ec5926 100644 --- a/src/GroupDocs.Editor.MVC.csproj +++ b/src/GroupDocs.Editor.MVC.csproj @@ -47,8 +47,8 @@ ..\packages\Castle.Core.4.3.1\lib\net45\Castle.Core.dll - - ..\packages\GroupDocs.Editor.20.8.0\lib\net20\GroupDocs.Editor.dll + + ..\packages\GroupDocs.Editor.20.10.0\lib\net40\GroupDocs.Editor.dll True @@ -278,7 +278,7 @@ - + diff --git a/src/Products/Editor/Controllers/EditorApiController.cs b/src/Products/Editor/Controllers/EditorApiController.cs index c279edd..f6620bf 100644 --- a/src/Products/Editor/Controllers/EditorApiController.cs +++ b/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); @@ -666,20 +672,44 @@ private LoadDocumentEntity LoadDocument(string guid, string password) { for (var i = 0; i < documentInfo.PageCount; i++) { - // Create editing options - 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") > 0) + { + // 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/src/Products/Editor/Entity/Web/Request/EditDocumentRequest.cs b/src/Products/Editor/Entity/Web/Request/EditDocumentRequest.cs index 9db0b7f..e8ac7bc 100644 --- a/src/Products/Editor/Entity/Web/Request/EditDocumentRequest.cs +++ b/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 diff --git a/src/packages.config b/src/packages.config index 8708efd..450fa7c 100644 --- a/src/packages.config +++ b/src/packages.config @@ -2,7 +2,7 @@ - +