From 8182b32c369a3ceee4e59548bc3f4f3b40bb9322 Mon Sep 17 00:00:00 2001 From: Egor Date: Tue, 22 Sep 2020 16:36:07 +0300 Subject: [PATCH 1/3] Added usage of passed page Number during saving changes in specific slide. --- .../Editor/Controllers/EditorApiController.cs | 5 +++++ .../Entity/Web/Request/EditDocumentRequest.cs | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/Products/Editor/Controllers/EditorApiController.cs b/src/Products/Editor/Controllers/EditorApiController.cs index c279edd..9515f46 100644 --- a/src/Products/Editor/Controllers/EditorApiController.cs +++ b/src/Products/Editor/Controllers/EditorApiController.cs @@ -286,6 +286,11 @@ public HttpResponseMessage SaveFile(EditDocumentRequest postedData) saveOptions.EnablePagination = true; } + if (saveOptions is PresentationSaveOptions) + { + saveOptions.SlideNumber = postedData.getPageNumber(); + } + using (FileStream outputStream = File.Create(tempPath)) { editor.Save(htmlContentDoc, outputStream, saveOptions); 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 From 09526342eef50292d39d1b383b10a8d7ff086ce7 Mon Sep 17 00:00:00 2001 From: Egor Date: Fri, 20 Nov 2020 01:08:40 +0300 Subject: [PATCH 2/3] Update library version and reading slides content. --- src/GroupDocs.Editor.MVC.csproj | 6 ++--- .../Editor/Controllers/EditorApiController.cs | 22 +++++++++---------- src/packages.config | 2 +- 3 files changed, 14 insertions(+), 16 deletions(-) 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 9515f46..3bb0001 100644 --- a/src/Products/Editor/Controllers/EditorApiController.cs +++ b/src/Products/Editor/Controllers/EditorApiController.cs @@ -671,20 +671,18 @@ 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(); + page.SetData(allEmbeddedInsideString); + page.number = i + 1; + loadDocumentEntity.SetPages(page); + } } } } 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 @@ - + From 6e6f36655f2e246b9a958e05452e30e4f91907e5 Mon Sep 17 00:00:00 2001 From: Egor Date: Fri, 20 Nov 2020 18:29:02 +0300 Subject: [PATCH 3/3] Fix slide number, add assigning slide dimensions if known. --- .../Editor/Controllers/EditorApiController.cs | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/src/Products/Editor/Controllers/EditorApiController.cs b/src/Products/Editor/Controllers/EditorApiController.cs index 3bb0001..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; @@ -288,7 +289,7 @@ public HttpResponseMessage SaveFile(EditDocumentRequest postedData) if (saveOptions is PresentationSaveOptions) { - saveOptions.SlideNumber = postedData.getPageNumber(); + saveOptions.SlideNumber = postedData.getPageNumber() + 1; } using (FileStream outputStream = File.Create(tempPath)) @@ -679,6 +680,32 @@ private LoadDocumentEntity LoadDocument(string guid, string password) // 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);