diff --git a/src/ej2-documenteditor-server/Controllers/DocumentEditorController.cs b/src/ej2-documenteditor-server/Controllers/DocumentEditorController.cs index 0b71d4b..32ec4ff 100644 --- a/src/ej2-documenteditor-server/Controllers/DocumentEditorController.cs +++ b/src/ej2-documenteditor-server/Controllers/DocumentEditorController.cs @@ -380,6 +380,96 @@ private WDocument GetDocument(IFormCollection data) stream.Dispose(); return document; } + + [AcceptVerbs("Post")] + [HttpPost] + [EnableCors("AllowAllOrigins")] + [Route("CompareDocuments")] + public string CompareDocuments([FromBody] CompareParameter data) + { + if (data.OriginalFile == null || data.RevisedFile == null) + return null; + Stream originalDocumentStream = new MemoryStream(); + data.OriginalFile.CopyTo(originalDocumentStream); + originalDocumentStream.Position = 0; + Stream revisedDocumentStream = new MemoryStream(); + data.RevisedFile.CopyTo(revisedDocumentStream); + revisedDocumentStream.Position = 0; + string json = ""; + + using (WDocument originalDocument = new WDocument(originalDocumentStream, WFormatType.Docx)) + { + //Load the revised document. + using (WDocument revisedDocument = new WDocument(revisedDocumentStream, WFormatType.Docx)) + { + // Compare the original and revised Word documents. + originalDocument.Compare(revisedDocument); + WordDocument document = WordDocument.Load(originalDocument); + json = Newtonsoft.Json.JsonConvert.SerializeObject(document); + originalDocument.Dispose(); + revisedDocument.Dispose(); + document.Dispose(); + } + } + return json; + } + + [AcceptVerbs("Post")] + [HttpPost] + [EnableCors("AllowAllOrigins")] + [Route("CompareDocumentsFromUrl")] + public string CompareDocumentsFromUrl([FromBody] CompareUrlParameter data) + { + if (data.OriginalFilePath == null || data.RevisedFilePath == null) + return null; + string json = ""; + using (WDocument originalDocument = new WDocument(GetDocFromURL(data.OriginalFilePath).Result, WFormatType.Docx)) + { + using (WDocument revisedDocument = new WDocument(GetDocFromURL(data.RevisedFilePath).Result, WFormatType.Docx)) + { + originalDocument.Compare(revisedDocument); + WordDocument document = WordDocument.Load(originalDocument); + json = Newtonsoft.Json.JsonConvert.SerializeObject(document); + originalDocument.Dispose(); + revisedDocument.Dispose(); + document.Dispose(); + } + } + return json; + } + public class CompareUrlParameter + { + public string OriginalFilePath { get; set; } + public string RevisedFilePath { get; set; } + } + public class CompareParameter + { + public IFormFile OriginalFile { get; set; } + public IFormFile RevisedFile { get; set; } + } + + async Task GetDocFromURL(string url) + { + string documentPath = Path.Combine(path, url); + Stream stream = null; + if (System.IO.File.Exists(documentPath)) + { + byte[] bytes = System.IO.File.ReadAllBytes(documentPath); + stream = new MemoryStream(bytes); + } + else + { + bool result = Uri.TryCreate(url, UriKind.Absolute, out Uri uriResult) + && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps); + if (result) + { + stream = GetDocumentFromURL(url).Result; + if (stream != null) + stream.Position = 0; + } + } + return stream; + } } }