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 @@
-
+