diff --git a/Controllers/DocumentEditor/AutoSaveController.cs b/Controllers/DocumentEditor/AutoSaveController.cs deleted file mode 100644 index 9077d2a7..00000000 --- a/Controllers/DocumentEditor/AutoSaveController.cs +++ /dev/null @@ -1,29 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class DocumentEditorController : Controller - { - public IActionResult AutoSave() - { - List exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} \ No newline at end of file diff --git a/Controllers/DocumentEditor/AutoShapesController.cs b/Controllers/DocumentEditor/AutoShapesController.cs deleted file mode 100644 index 7490682a..00000000 --- a/Controllers/DocumentEditor/AutoShapesController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult AutoShapes() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/BindUIToDocumentController.cs b/Controllers/DocumentEditor/BindUIToDocumentController.cs deleted file mode 100644 index 9034f94f..00000000 --- a/Controllers/DocumentEditor/BindUIToDocumentController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult BindUIToDocument() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/BulletsAndNumberingController.cs b/Controllers/DocumentEditor/BulletsAndNumberingController.cs deleted file mode 100644 index ef5271cb..00000000 --- a/Controllers/DocumentEditor/BulletsAndNumberingController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult BulletsAndNumbering() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/CharacterFormatController.cs b/Controllers/DocumentEditor/CharacterFormatController.cs deleted file mode 100644 index 5836f366..00000000 --- a/Controllers/DocumentEditor/CharacterFormatController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult CharacterFormat() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/ChartController.cs b/Controllers/DocumentEditor/ChartController.cs deleted file mode 100644 index 1fa02b30..00000000 --- a/Controllers/DocumentEditor/ChartController.cs +++ /dev/null @@ -1,29 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class DocumentEditorController : Controller - { - public ActionResult Chart() - { - List exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} \ No newline at end of file diff --git a/Controllers/DocumentEditor/ColorpickerCustomizationController.cs b/Controllers/DocumentEditor/ColorpickerCustomizationController.cs deleted file mode 100644 index 5de08065..00000000 --- a/Controllers/DocumentEditor/ColorpickerCustomizationController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult ColorpickerCustomization() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/CommentsController.cs b/Controllers/DocumentEditor/CommentsController.cs deleted file mode 100644 index 18f4c9e4..00000000 --- a/Controllers/DocumentEditor/CommentsController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult Comments() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/CustomContextMenuController.cs b/Controllers/DocumentEditor/CustomContextMenuController.cs deleted file mode 100644 index e52619e0..00000000 --- a/Controllers/DocumentEditor/CustomContextMenuController.cs +++ /dev/null @@ -1,29 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class DocumentEditorController : Controller - { - public ActionResult CustomContextMenu() - { - List exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} \ No newline at end of file diff --git a/Controllers/DocumentEditor/DefaultController.cs b/Controllers/DocumentEditor/DefaultController.cs deleted file mode 100644 index 77d50b23..00000000 --- a/Controllers/DocumentEditor/DefaultController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult Default() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/DocumentEditorController.cs b/Controllers/DocumentEditor/DocumentEditorController.cs deleted file mode 100644 index 21bc70c0..00000000 --- a/Controllers/DocumentEditor/DocumentEditorController.cs +++ /dev/null @@ -1,356 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using System.IO; -using Syncfusion.EJ2.DocumentEditor; -using Syncfusion.DocIORenderer; -using Microsoft.AspNetCore.Cors; -using Syncfusion.Pdf; -using WDocument = Syncfusion.DocIO.DLS.WordDocument; -using WFormatType = Syncfusion.DocIO.FormatType; - -namespace EJ2CoreSampleBrowser.Controllers.DocumentEditor -{ - [Route("api/[controller]")] - public class DocumentEditorController : Controller - { - [AcceptVerbs("Post")] - [HttpPost] - [Route("Import")] - public string Import(IFormCollection data) - { - - Stream stream = new MemoryStream(); - string type = "docx"; - if (data.Files.Count == 0) - return null; - IFormFile file = data.Files[0]; - int index = file.FileName.LastIndexOf('.'); - type = index > -1 && index < file.FileName.Length - 1 ? file.FileName.Substring(index + 1) : ""; - file.CopyTo(stream); - stream.Position = 0; - - WordDocument document = WordDocument.Load(stream, GetFormatType(type.ToLower())); - string json = Newtonsoft.Json.JsonConvert.SerializeObject(document); - document.Dispose(); - return json; - } - - [AcceptVerbs("Post")] - [HttpPost] - [Route("SystemClipboard")] - public string SystemClipboard([FromBody]CustomParameter param) - { - if (param.content != null && param.content != "") - { - WordDocument document = WordDocument.LoadString(param.content, GetFormatType(param.type.ToLower())); - string json = Newtonsoft.Json.JsonConvert.SerializeObject(document); - document.Dispose(); - return json; - } - return ""; - } - - [AcceptVerbs("Post")] - [HttpPost] - [Route("MailMerge")] - public string MailMerge([FromBody]ExportData exportData) - { - Byte[] data = Convert.FromBase64String(exportData.documentData.Split(',')[1]); - MemoryStream stream = new MemoryStream(); - stream.Write(data, 0, data.Length); - stream.Position = 0; - try - { - Syncfusion.DocIO.DLS.WordDocument document = new Syncfusion.DocIO.DLS.WordDocument(stream, Syncfusion.DocIO.FormatType.Docx); - document.MailMerge.RemoveEmptyGroup = true; - document.MailMerge.RemoveEmptyParagraphs = true; - document.MailMerge.ClearFields = true; - document.MailMerge.Execute(CustomerDataModel.GetAllRecords()); - document.Save(stream, Syncfusion.DocIO.FormatType.Docx); - } - catch (Exception) - { } - string sfdtText = ""; - Syncfusion.EJ2.DocumentEditor.WordDocument worddocument = Syncfusion.EJ2.DocumentEditor.WordDocument.Load(stream, Syncfusion.EJ2.DocumentEditor.FormatType.Docx); - sfdtText = Newtonsoft.Json.JsonConvert.SerializeObject(worddocument); - worddocument.Dispose(); - return sfdtText; - } - public class CustomerDataModel - { - public static List GetAllRecords() - { - List customers = new List(); - customers.Add(new Customer("9072379", "50%", "C/ Araquil, 67", "Madrid", "22020-08-10 00:00:00", "Spain", "Brittania", "2000", "19072379", "Folk och fä HB", "100000", "440", "32.34", "472.34", "28023", "12000", "2020-11-07 00:00:00", "2020-12-07 00:00:00")); - customers.Add(new Customer("9072378", "20%", "C/ Araquil, 67", "Madrid", "22020-08-10 00:00:00", "Spain", "", "2", "19072369", "Maersk", "140000", "245", "20", "265", "28024", "12400", "2020-11-31 00:00:00", "2020-12-22300:00:00")); - customers.Add(new Customer("9072377", "30%", "C/ Araquil, 67", "Madrid", "22020-08-10 00:00:00", "Spain", "Brittania", "100", "19072879", "Mediterranean Shipping Company", "104000", "434", "50.43", "484.43", "28025", "10000", "2020-11-07 00:00:00", "2020-12-02 00:00:00")); - customers.Add(new Customer("9072393", "10%", "C/ Araquil, 67", "Madrid", "22020-08-10 00:00:00", "Spain", "Brittania", "2050", "19072378", "China Ocean Shipping Company", "175000", "500", "32", "532", "28026", "17000", "2020-09-23 00:00:00", "2020-10-09 00:00:00")); - customers.Add(new Customer("9072377", "14%", "C/ Araquil, 67", "Madrid", "22020-08-10 00:00:00", "Spain", "Brittania", "2568", "19072380", "CGM", "155000", "655", "20.54", "675.54", "28027", "13000", "2020-10-11 00:00:00", "2020-11-17 00:00:00")); - customers.Add(new Customer("9072376", "0%", "C/ Araquil, 67", "Madrid", "22020-08-10 00:00:00", "Spain", "Brittania", "1532", "19072345", " Hapag-Lloyd", "106500", "344", "30", "374", "28028", "14500", "2020-06-17 00:00:00", "2020-07-07 00:00:00")); - customers.Add(new Customer("9072369", "05%", "C/ Araquil, 67", "Madrid", "22020-08-10 00:00:00", "Spain", "Brittania", "4462", "190723452", "Ocean Network Express", "100054", "541", "50", "591", "28029", "16500", "2020-04-07 00:00:00", "2020-05-07 00:00:00")); - customers.Add(new Customer("9072359", "4%", "C/ Araquil, 67", "Madrid", "22020-08-10 00:00:00", "Spain", "Brittania", "27547", "190723713", "Evergreen Line", "124000", "800", "10.23", "810.23", "28030", "12500", "2020-03-07 00:00:00", "2020-04-07 00:00:00")); - customers.Add(new Customer("9072380", "20%", "C/ Araquil, 67", "Madrid", "22020-08-10 00:00:00", "Spain", "Brittania", "7582", "19072312", "Yang Ming Marine Transport", "1046000", "290", "10", "300", "27631", "12670", "2020-11-10 00:00:00", "2020-12-13 00:00:00")); - customers.Add(new Customer("9072381", "42%", "C/ Araquil, 67", "Madrid", "22020-08-10 00:00:00", "Spain", "Brittania", "862", "19072354", "Hyundai Merchant Marine", "145000", "800", "10.23", "810.23", "28032", "45000", "2020-10-17 00:00:00", "2020-12-23 00:00:00")); - customers.Add(new Customer("9072391", "84%", "C/ Araquil, 67", "Madrid", "22020-08-10 00:00:00", "Spain", "Brittania", "82", "19072364", "Pacific International Line", "10094677", "344", "30", "374", "28033", "16500", "2020-11-14 00:00:00", "2020-12-21 00:00:00")); - customers.Add(new Customer("9072392", "92%", "C/ Araquil, 67", "Madrid", "22020-08-10 00:00:00", "Spain", "Brittania", "82", "19072385", "Österreichischer Lloyd", "104270", "500", "32", "532", "28034", "156500", "2020-06-07 00:00:00", "2020-07-07 00:00:00")); - return customers; - } - } - public class Customer - { - public string CustomerID { get; set; } - public string ProductName { get; set; } - public string Quantity { get; set; } - public string ShipName { get; set; } - public string UnitPrice { get; set; } - public string Discount { get; set; } - public string ShipAddress { get; set; } - public string ShipCity { get; set; } - public string OrderDate { get; set; } - public string ShipCountry { get; set; } - public string OrderId { get; set; } - public string Subtotal { get; set; } - public string Freight { get; set; } - public string Total { get; set; } - public string ShipPostalCode { get; set; } - public string RequiredDate { get; set; } - public string ShippedDate { get; set; } - public string ExtendedPrice { get; set; } - public Customer(string orderId, string discount, string shipAddress, string shipCity, string orderDate, string shipCountry, string productName, string quantity, string customerID, string shipName, string unitPrice, string subtotal, string freight, string total, string shipPostalCode, string extendedPrice, string requiredDate, string shippedDate) - { - this.CustomerID = customerID; - this.ProductName = productName; - this.Quantity = quantity; - this.ShipName = shipName; - this.UnitPrice = unitPrice; - this.Discount = discount; - this.ShipAddress = shipAddress; - this.ShipCity = shipCity; - this.OrderDate = orderDate; - this.ShipCountry = shipCountry; - this.OrderId = orderId; - this.Subtotal = subtotal; - this.Freight = freight; - this.Total = total; - this.ShipPostalCode = shipPostalCode; - this.ShippedDate = shippedDate; - this.RequiredDate = requiredDate; - this.ExtendedPrice = extendedPrice; - } - } - public class ExportData - { - public string fileName { get; set; } - public string documentData { get; set; } - } - - private string RetrieveFileType(string name) - { - int index = name.LastIndexOf('.'); - string format = index > -1 && index < name.Length - 1 ? - name.Substring(index) : ".doc"; - return format; - } - - internal static WFormatType GetWFormatType(string format) - { - if (string.IsNullOrEmpty(format)) - throw new NotSupportedException("EJ2 DocumentEditor does not support this file format."); - switch (format.ToLower()) - { - case ".dotx": - return WFormatType.Dotx; - case ".docx": - return WFormatType.Docx; - case ".docm": - return WFormatType.Docm; - case ".dotm": - return WFormatType.Dotm; - case ".dot": - return WFormatType.Dot; - case ".doc": - return WFormatType.Doc; - case ".rtf": - return WFormatType.Rtf; - case ".html": - return WFormatType.Html; - case ".txt": - return WFormatType.Txt; - case ".xml": - return WFormatType.WordML; - case ".odt": - return WFormatType.Odt; - case ".md": - return WFormatType.Markdown; - default: - throw new NotSupportedException("EJ2 DocumentEditor does not support this file format."); - } - } - - public class SaveParameter - { - public string Content { get; set; } - public string FileName { get; set; } - public string Format { get; set; } - } - - [AcceptVerbs("Post")] - [HttpPost] - [Route("Export")] - public FileStreamResult Export([FromBody] SaveParameter data) - { - string fileName = data.FileName; - string format = RetrieveFileType(string.IsNullOrEmpty(data.Format) ? fileName : data.Format); - if (string.IsNullOrEmpty(fileName)) - { - fileName = "Document1.docx"; - } - WDocument document; - if (format.ToLower() == ".pdf") - { - Stream stream = WordDocument.Save(data.Content, FormatType.Docx); - document = new Syncfusion.DocIO.DLS.WordDocument(stream, Syncfusion.DocIO.FormatType.Docx); - } - else - { - document = WordDocument.Save(data.Content); - } - return SaveDocument(document, format, fileName); - } - - private FileStreamResult SaveDocument(WDocument document, string format, string fileName) - { - Stream stream = new MemoryStream(); - string contentType = ""; - if (format.ToLower() == ".pdf") - { - contentType = "application/pdf"; - DocIORenderer render = new DocIORenderer(); - PdfDocument pdfDocument = render.ConvertToPDF(document); - stream = new MemoryStream(); - pdfDocument.Save(stream); - pdfDocument.Close(); - } - else - { - WFormatType type = GetWFormatType(format); - switch (type) - { - case WFormatType.Rtf: - contentType = "application/rtf"; - break; - case WFormatType.WordML: - contentType = "application/xml"; - break; - case WFormatType.Html: - contentType = "application/html"; - break; - case WFormatType.Dotx: - contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.template"; - break; - case WFormatType.Docx: - contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document"; - break; - case WFormatType.Doc: - contentType = "application/msword"; - break; - case WFormatType.Dot: - contentType = "application/msword"; - break; - case WFormatType.Odt: - contentType = "application/vnd.oasis.opendocument.text"; - break; - case WFormatType.Markdown: - contentType = "text/markdown"; - break; - } - document.Save(stream, type); - } - document.Close(); - stream.Position = 0; - return new FileStreamResult(stream, contentType) - { - FileDownloadName = fileName - }; - } - - - [AcceptVerbs("Post")] - [HttpPost] - [Route("RestrictEditing")] - public string[] RestrictEditing([FromBody]CustomRestrictParameter param) - { - if (param.passwordBase64 == "" && param.passwordBase64 == null) - return null; - return WordDocument.ComputeHash(param.passwordBase64, param.saltBase64, param.spinCount); - } - - internal static FormatType GetFormatType(string format) - { - if (string.IsNullOrEmpty(format)) - throw new NotSupportedException("EJ2 Document editor does not support this file format."); - switch (format.ToLower()) - { - case "dotx": - case "docx": - case "docm": - case "dotm": - return FormatType.Docx; - case "dot": - case "doc": - return FormatType.Doc; - case "rtf": - case ".rtf": - return FormatType.Rtf; - case "txt": - return FormatType.Txt; - case "xml": - return FormatType.WordML; - case "html": - case ".html": - return FormatType.Html; - default: - throw new NotSupportedException("EJ2 Document editor does not support this file format."); - } - } - - internal WDocument GetDocument(IFormCollection data) - { - Stream stream = new MemoryStream(); - if (data.Files.Count == 0) - return null; - IFormFile file = data.Files[0]; - - file.CopyTo(stream); - stream.Position = 0; - - WDocument document = new WDocument(stream, WFormatType.Docx); - stream.Dispose(); - return document; - } - } - - public class CustomParameter - { - public string content { get; set; } - public string type { get; set; } - } - - public class CustomRestrictParameter - { - public string passwordBase64 { get; set; } - public string saltBase64 { get; set; } - public int spinCount { get; set; } - } -} \ No newline at end of file diff --git a/Controllers/DocumentEditor/DocumentListController.cs b/Controllers/DocumentEditor/DocumentListController.cs deleted file mode 100644 index 2d42572e..00000000 --- a/Controllers/DocumentEditor/DocumentListController.cs +++ /dev/null @@ -1,45 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult DocumentList() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } - public class UserModel - { - [Required(ErrorMessage = "UserName is Required.")] - public string UserName { get; set; } - - [Required(ErrorMessage = "Date of Birth is Required")] - public DateTime? DOB { get; set; } - - [Required(ErrorMessage = "Addresss is Required")] - public string Address { get; set; } - - [Required(ErrorMessage = "City is Required")] - public string City { get; set; } - - [Required(ErrorMessage = "State is Required")] - public string State { get; set; } - } -} diff --git a/Controllers/DocumentEditor/DocumentProtectionController.cs b/Controllers/DocumentEditor/DocumentProtectionController.cs deleted file mode 100644 index 2a666665..00000000 --- a/Controllers/DocumentEditor/DocumentProtectionController.cs +++ /dev/null @@ -1,29 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class DocumentEditorController : Controller - { - public ActionResult DocumentProtection() - { - List exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} \ No newline at end of file diff --git a/Controllers/DocumentEditor/ExportController.cs b/Controllers/DocumentEditor/ExportController.cs deleted file mode 100644 index b46d0cd1..00000000 --- a/Controllers/DocumentEditor/ExportController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult Export() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/FormFieldsController.cs b/Controllers/DocumentEditor/FormFieldsController.cs deleted file mode 100644 index e2330cd6..00000000 --- a/Controllers/DocumentEditor/FormFieldsController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult FormFields() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/HeadersAndFootersController.cs b/Controllers/DocumentEditor/HeadersAndFootersController.cs deleted file mode 100644 index a36e20f0..00000000 --- a/Controllers/DocumentEditor/HeadersAndFootersController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult HeadersAndFooters() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/HeadingNavigationController.cs b/Controllers/DocumentEditor/HeadingNavigationController.cs deleted file mode 100644 index 4fdaa5da..00000000 --- a/Controllers/DocumentEditor/HeadingNavigationController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult HeadingNavigation() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/HyperlinksAndBookmarksController.cs b/Controllers/DocumentEditor/HyperlinksAndBookmarksController.cs deleted file mode 100644 index 2af1cc1c..00000000 --- a/Controllers/DocumentEditor/HyperlinksAndBookmarksController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult HyperlinksAndBookmarks() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/MailMergeController.cs b/Controllers/DocumentEditor/MailMergeController.cs deleted file mode 100644 index 295b90aa..00000000 --- a/Controllers/DocumentEditor/MailMergeController.cs +++ /dev/null @@ -1,109 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult MailMerge() - { - List exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - - List listdata = new List(); - listdata.Add(new - { - text = "ProductName", - id = "_productname", - Category = "Drag or click the field to insert.", - htmlAttributes = new { draggable = true } - }); - listdata.Add(new - { - text = "ShipName", - id = "_shipname", - Category = "Drag or click the field to insert.", - htmlAttributes = new { draggable = true } - }); - listdata.Add(new - { - text = "CustomerID", - id = "_customerid", - Category = "Drag or click the field to insert.", - htmlAttributes = new { draggable = true } - }); - listdata.Add(new - { - text = "Quantity", - id = "_quantity", - Category = "Drag or click the field to insert.", - htmlAttributes = new { draggable = true } - }); - listdata.Add(new - { - text = "UnitPrice", - id = "_unitprice", - Category = "Drag or click the field to insert.", - htmlAttributes = new { draggable = true } - }); - listdata.Add(new - { - text = "Discount", - id = "_discount", - Category = "Drag or click the field to insert.", - htmlAttributes = new { draggable = true } - }); - listdata.Add(new - { - text = "ShipAddress", - id = "_shipaddress", - Category = "Drag or click the field to insert.", - htmlAttributes = new { draggable = true } - }); - listdata.Add(new - { - text = "ShipCity", - id = "_shipcity", - Category = "Drag or click the field to insert.", - htmlAttributes = new { draggable = true } - }); - listdata.Add(new - { - text = "ShipCountry", - id = "_shipcountry", - Category = "Drag or click the field to insert.", - htmlAttributes = new { draggable = true } - }); - listdata.Add(new - { - text = "OrderId", - id = "_orderid", - Category = "Drag or click the field to insert.", - htmlAttributes = new { draggable = true } - }); - listdata.Add(new - { - text = "OrderDate", - id = "_orderdate", - Category = "Drag or click the field to insert.", - htmlAttributes = new { draggable = true } - }); - ViewData["dataSource"] = listdata; - return View(); - } - - } - } - diff --git a/Controllers/DocumentEditor/MultipleColumnsController.cs b/Controllers/DocumentEditor/MultipleColumnsController.cs deleted file mode 100644 index b039bfc0..00000000 --- a/Controllers/DocumentEditor/MultipleColumnsController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult MultipleColumns() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/NotesController.cs b/Controllers/DocumentEditor/NotesController.cs deleted file mode 100644 index 0be7e88e..00000000 --- a/Controllers/DocumentEditor/NotesController.cs +++ /dev/null @@ -1,28 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class DocumentEditorController : Controller - { - public ActionResult Notes() - { - List exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/ParagraphFormatController.cs b/Controllers/DocumentEditor/ParagraphFormatController.cs deleted file mode 100644 index b0c3671c..00000000 --- a/Controllers/DocumentEditor/ParagraphFormatController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult ParagraphFormat() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/PrintController.cs b/Controllers/DocumentEditor/PrintController.cs deleted file mode 100644 index 414c8f0f..00000000 --- a/Controllers/DocumentEditor/PrintController.cs +++ /dev/null @@ -1,42 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class DocumentEditorController : Controller - { - public ActionResult Print() - { - this.StatusBar(); - return View(); - } - - public PartialViewResult StatusBar() - { - List zoomItems = new List(); - zoomItems.Add(new { text = "200%" }); - zoomItems.Add(new { text = "175%" }); - zoomItems.Add(new { text = "150%" }); - zoomItems.Add(new { text = "125%" }); - zoomItems.Add(new { text = "100%" }); - zoomItems.Add(new { text = "75%" }); - zoomItems.Add(new { text = "50%" }); - zoomItems.Add(new { text = "25%" }); - zoomItems.Add(new { separator = true }); - zoomItems.Add(new { text = "Fit one page" }); - zoomItems.Add(new { text = "Fit page width" }); - ViewData["zoomList"] = zoomItems; - - return PartialView(); - } - } -} \ No newline at end of file diff --git a/Controllers/DocumentEditor/RibbonCustomizationController.cs b/Controllers/DocumentEditor/RibbonCustomizationController.cs deleted file mode 100644 index a631c85e..00000000 --- a/Controllers/DocumentEditor/RibbonCustomizationController.cs +++ /dev/null @@ -1,28 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class DocumentEditorController : Controller - { - public ActionResult RibbonCustomization() - { - List exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/RightToLeftController.cs b/Controllers/DocumentEditor/RightToLeftController.cs deleted file mode 100644 index cf086792..00000000 --- a/Controllers/DocumentEditor/RightToLeftController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult RightToLeft() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/RulerController.cs b/Controllers/DocumentEditor/RulerController.cs deleted file mode 100644 index b5d315f4..00000000 --- a/Controllers/DocumentEditor/RulerController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult Ruler() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/SectionFormatController.cs b/Controllers/DocumentEditor/SectionFormatController.cs deleted file mode 100644 index 62cc77a7..00000000 --- a/Controllers/DocumentEditor/SectionFormatController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult SectionFormat() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/StylesController.cs b/Controllers/DocumentEditor/StylesController.cs deleted file mode 100644 index 0f12c026..00000000 --- a/Controllers/DocumentEditor/StylesController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult Styles() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/TableFormatController.cs b/Controllers/DocumentEditor/TableFormatController.cs deleted file mode 100644 index 4c82100c..00000000 --- a/Controllers/DocumentEditor/TableFormatController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult TableFormat() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/TableOfContentsController.cs b/Controllers/DocumentEditor/TableOfContentsController.cs deleted file mode 100644 index be479b10..00000000 --- a/Controllers/DocumentEditor/TableOfContentsController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult TableOfContents() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/ToolbarCustomizationController.cs b/Controllers/DocumentEditor/ToolbarCustomizationController.cs deleted file mode 100644 index 6f934e16..00000000 --- a/Controllers/DocumentEditor/ToolbarCustomizationController.cs +++ /dev/null @@ -1,31 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class DocumentEditorController : Controller - { - public IActionResult ToolbarCustomization() - { - List exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - ViewData["toolbarItems"] = new string[] {"New", "Open", "Undo", "Redo","Comments", "Image","Table", "Hyperlink","Bookmark", "TableOfContents", "Header", "Footer", - "PageSetup", "PageNumber","Break","Find","LocalClipboard", "RestrictEditing" }; - return View(); - } - } -} \ No newline at end of file diff --git a/Controllers/DocumentEditor/TrackChangesController.cs b/Controllers/DocumentEditor/TrackChangesController.cs deleted file mode 100644 index 2a5b2ab1..00000000 --- a/Controllers/DocumentEditor/TrackChangesController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult TrackChanges() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/DocumentEditor/WebLayoutController.cs b/Controllers/DocumentEditor/WebLayoutController.cs deleted file mode 100644 index d7bbeccb..00000000 --- a/Controllers/DocumentEditor/WebLayoutController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers { - public partial class DocumentEditorController : Controller - { - public ActionResult WebLayout() - { - List < object > exportItems = new List(); - exportItems.Add(new { text = "Syncfusion Document Text (*.sfdt)", id = "sfdt" }); - exportItems.Add(new { text = "Word Document (*.docx)", id = "word" }); - exportItems.Add(new { text = "Word Template (*.dotx)", id = "dotx" }); - exportItems.Add(new { text = "Plain Text (*.txt)", id = "txt" }); - ViewData["ExportItems"] = exportItems; - return View(); - } - } -} diff --git a/Controllers/Excel/CollectionObjectsController.cs b/Controllers/Excel/CollectionObjectsController.cs deleted file mode 100644 index 1affb71a..00000000 --- a/Controllers/Excel/CollectionObjectsController.cs +++ /dev/null @@ -1,330 +0,0 @@ -#region Copyright Syncfusion Inc. 2001-2017. -// Copyright Syncfusion Inc. 2001-2017. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.XlsIO; -using Syncfusion.Drawing; -using System.Globalization; -using System.IO; -using Microsoft.AspNetCore.Hosting; -using System.Data; -using Newtonsoft.Json; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Builder; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; -using EJ2CoreSampleBrowser.Models; -using System.ComponentModel; - -namespace EJ2CoreSampleBrowser.Controllers.Excel -{ - - public partial class ExcelController : Controller - { - public static List _sales = new List(); - public static List businessObjects = null; - private readonly IWebHostEnvironment _hostingEnvironment; - public ExcelController(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - //For Session - //public HttpSessionStateBase Session { get; } - public ActionResult CollectionObjects(string saveOption, string button) - { - string basePath = _hostingEnvironment.WebRootPath; - - ViewData["exportButtonState"] = "disabled=\"disabled\""; - - ///SaveOption Null - if (saveOption == null || button == null) - { - _sales = new List(); - return View(); - } - - //Start Business Object Functions - if (button == "Input Template") - { - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - FileStream inputStream = new FileStream(basePath + @"/XlsIO/ExportData.xlsx", FileMode.Open, FileAccess.Read); - - // Opening the Existing Worksheet from a Workbook. - IWorkbook workbook = application.Workbooks.Open(inputStream); - try - { - string ContentType = null; - string fileName = null; - workbook.Version = ExcelVersion.Excel2013; - ContentType = "Application/msexcel"; - fileName = "ExportData.xlsx"; - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, ContentType, fileName); - } - catch (Exception) - { - } - - } - else if (button == "Import From Excel") - { - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - FileStream inputStream = new FileStream(basePath + @"/XlsIO/ExportData.xlsx", FileMode.Open, FileAccess.Read); - IWorkbook workbook = application.Workbooks.Open(inputStream); - IWorksheet sheet = workbook.Worksheets[0]; - //Export Bussiness Objects - Dictionary mappingProperties = new Dictionary(); - mappingProperties.Add("Brand", "BrandName"); - mappingProperties.Add("Vehicle Type", "VehicleType.VehicleName"); - mappingProperties.Add("Model", "VehicleType.Model.ModelName"); - - List businessObjects = sheet.ExportData(4, 1, 141, 3, mappingProperties); - //Close the workbook. - workbook.Close(); - excelEngine.Dispose(); - int temp = 1; - foreach (Brand brand in businessObjects) - { - brand.ID = temp; - temp++; - } - //Set the grid value to the Session - _sales = businessObjects; - ViewData["DataSource"] = _sales; - ViewData["exportButtonState"] = ""; - return View(); - } - else - { - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - IApplication application = excelEngine.Excel; - - if (saveOption == "Xls") - application.DefaultVersion = ExcelVersion.Excel97to2003; - else - application.DefaultVersion = ExcelVersion.Excel2016; - - //Open an existing spreadsheet which will be used as a template for generating the new spreadsheet. - //After opening, the workbook object represents the complete in-memory object model of the template spreadsheet. - IWorkbook workbook; - workbook = excelEngine.Excel.Workbooks.Create(1); - //The first worksheet object in the worksheets collection is accessed. - IWorksheet sheet = workbook.Worksheets[0]; - - //Import Bussiness Object to worksheet - sheet.ImportData(_sales, 4, 1, true); - - #region Define Styles - IStyle pageHeader = workbook.Styles.Add("PageHeaderStyle"); - IStyle tableHeader = workbook.Styles.Add("TableHeaderStyle"); - - pageHeader.Font.FontName = "Calibri"; - pageHeader.Font.Size = 16; - pageHeader.Font.Bold = true; - pageHeader.Color = Color.FromArgb(0, 146, 208, 80); - pageHeader.HorizontalAlignment = ExcelHAlign.HAlignCenter; - pageHeader.VerticalAlignment = ExcelVAlign.VAlignCenter; - - tableHeader.Font.Bold = true; - tableHeader.Font.FontName = "Calibri"; - tableHeader.Color = Color.FromArgb(0, 146, 208, 80); - - #endregion - - #region Apply Styles - // Apply style for header - sheet["A1:C2"].Merge(); - sheet["A1"].Text = "Automobile Brands in the US"; - sheet["A1"].CellStyle = pageHeader; - - sheet["A4:C4"].CellStyle = tableHeader; - - sheet["A1:C1"].CellStyle.Font.Bold = true; - sheet.UsedRange.AutofitColumns(); - - #endregion - - try - { - string ContentType = null; - string fileName = null; - if (saveOption == "Xls") - { - workbook.Version = ExcelVersion.Excel97to2003; - ContentType = "Application/vnd.ms-excel"; - fileName = "ExportData.xls"; - } - else - { - workbook.Version = ExcelVersion.Excel2013; - ContentType = "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - fileName = "ExportData.xlsx"; - } - - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, ContentType, fileName); - } - catch (Exception) - { - } - - //Close the workbook. - workbook.Close(); - excelEngine.Dispose(); - } - return View(); - } - public ActionResult Update([FromBody]CRUDModel myObject) - { - List salesList = _sales; - foreach (Brand brand in salesList) - { - if (brand.ID == myObject.value.ID) - { - brand.BrandName = myObject.value.BrandName; - brand.VehicleType.VehicleName = myObject.value.VehicleType.VehicleName; - brand.VehicleType.Model.ModelName = myObject.value.VehicleType.Model.ModelName; - } - } - _sales = salesList; - return Json(myObject.value); - } - } - - #region Helper Class - public class Data - { - - public bool requiresCounts { get; set; } - public int skip { get; set; } - public int take { get; set; } - } - public class CRUDModel where T : class - { - public string action { get; set; } - - public string table { get; set; } - - public string keyColumn { get; set; } - - public object key { get; set; } - - public T value { get; set; } - - public List added { get; set; } - - public List changed { get; set; } - - public List deleted { get; set; } - - public IDictionary @params { get; set; } - } - //[Serializable] - public class Brand - { - private int m_Id; - [Bindable(false)] - public int ID - { - get { return m_Id; } - set { m_Id = value; } - } - - private string m_brandName; - [DisplayNameAttribute("Brand")] - public string BrandName - { - get { return m_brandName; } - set { m_brandName = value; } - } - - private VehicleType m_vehicleType; - public VehicleType VehicleType - { - get { return m_vehicleType; } - set { m_vehicleType = value; } - } - - public Brand(string brandName) - { - m_brandName = brandName; - } - public Brand() - { - - } - } - - public class VehicleType - { - private string m_vehicleName; - [DisplayNameAttribute("Vehicle Type")] - public string VehicleName - { - get { return m_vehicleName; } - set { m_vehicleName = value; } - } - - private Model m_model; - public Model Model - { - get { return m_model; } - set { m_model = value; } - } - - public VehicleType(string vehicle) - { - m_vehicleName = vehicle; - } - public VehicleType() - { - - } - } - - public class Model - { - private string m_modelName; - [DisplayNameAttribute("Model")] - public string ModelName - { - get { return m_modelName; } - set { m_modelName = value; } - } - - public Model(string name) - { - m_modelName = name; - } - public Model() - { - - } - } - #endregion -} \ No newline at end of file diff --git a/Controllers/Excel/ImportExportDataTableController.cs b/Controllers/Excel/ImportExportDataTableController.cs deleted file mode 100644 index 85014f59..00000000 --- a/Controllers/Excel/ImportExportDataTableController.cs +++ /dev/null @@ -1,181 +0,0 @@ -#region Copyright Syncfusion Inc. 2001 - 2018 -// Copyright Syncfusion Inc. 2001 - 2016. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using System.Drawing; -using Microsoft.AspNetCore.Mvc; -using System.IO; -using Syncfusion.XlsIO; -using Syncfusion.XlsIO.Implementation; -using System.Data; - -namespace EJ2CoreSampleBrowser.Controllers.Excel -{ - public partial class ExcelController : Controller - { - public static DataTable dataTable = null; - - public ActionResult ImportExportDataTable(string saveOption, string button, string importOption) - { - string basePath = _hostingEnvironment.WebRootPath; - - ViewData["exportButtonState"] = "disabled=\"disabled\""; - - ///SaveOption Null - if (saveOption == null || button == null) - { - ViewData["DataSource"] = null; - return View(); - } - - //Start Business Object Functions - if (button == "Input Template") - { - Stream ms = new FileStream(basePath + @"/XlsIO/NorthwindDataTemplate.xls", FileMode.Open, FileAccess.Read); - string ContentType = "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - string fileName = "NorthwindDataTemplate.xls"; - return File(ms, ContentType, fileName); - } - else if (button == "Import From Excel") - { - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - Stream sampleFile = new FileStream(basePath + @"/XlsIO/NorthwindDataTemplate.xls", FileMode.Open, FileAccess.Read); - IWorkbook workbook = application.Workbooks.Open(sampleFile); - - IWorksheet sheet = workbook.Worksheets[0]; - - if (importOption == "Skip") - { - sheet.ExportDataTableEvent += Sheet_ExportDataTableEventSkip; - ViewData["importOptionSkip"] = "value=" + importOption + " checked = \"checked\""; - } - else if (importOption == "Replace") - { - sheet.ExportDataTableEvent += Sheet_ExportDataTableEventReplace; - ViewData["importOptionReplace"] = "value=" + importOption + " checked = \"checked\""; - } - else if (importOption == "Stop") - { - sheet.ExportDataTableEvent += Sheet_ExportDataTableEventStop; - ViewData["importOptionStop"] = "value=" + importOption + " checked = \"checked\""; - } - else - { - sheet.ExportDataTableEvent += Sheet_ExportDataTableEventNone; - ViewData["importOptionNone"] = "value=" + importOption + " checked = \"checked\""; - } - - dataTable = sheet.ExportDataTable(sheet.UsedRange, ExcelExportDataTableOptions.ColumnNames); - - //Close the workbook. - workbook.Close(); - excelEngine.Dispose(); - - ViewData["DataSource"] = dataTable; - ViewData["exportButtonState"] = ""; - - return View(); - } - else - { - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - IApplication application = excelEngine.Excel; - - if (saveOption == "Xls") - application.DefaultVersion = ExcelVersion.Excel97to2003; - else - application.DefaultVersion = ExcelVersion.Excel2016; - - //Open an existing spreadsheet which will be used as a template for generating the new spreadsheet. - //After opening, the workbook object represents the complete in-memory object model of the template spreadsheet. - IWorkbook workbook; - workbook = excelEngine.Excel.Workbooks.Create(1); - //The first worksheet object in the worksheets collection is accessed. - IWorksheet sheet = workbook.Worksheets[0]; - - //Import data table to worksheet - sheet.ImportDataTable(dataTable, true, 1, 1, true); - - sheet.UsedRange.AutofitColumns(); - - try - { - //Saving the workbook to disk. This spreadsheet is the result of opening and modifying - //an existing spreadsheet and then saving the result to a new workbook. - string ContentType = null; - string fileName = null; - if (saveOption == "Xlsx") - { - workbook.Version = ExcelVersion.Excel2013; - ContentType = "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - fileName = "ExportDataTable.xlsx"; - } - else - { - ContentType = "Application/vnd.ms-excel"; - fileName = "ExportDataTable.xls"; - } - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, ContentType, fileName); - } - catch (Exception) - { - } - - //Close the workbook. - workbook.Close(); - excelEngine.Dispose(); - } - return View(); - } - /// - /// Skip Row - /// - /// ExportDataTableEventArgs - private void Sheet_ExportDataTableEventSkip(ExportDataTableEventArgs exportDataTableArgs) - { - if (exportDataTableArgs.ExcelColumnIndex == 4 && exportDataTableArgs.ExcelValue.ToString() == "Owner") - exportDataTableArgs.ExportDataTableAction = ExportDataTableActions.SkipRow; - } - /// - /// Replace value - /// - /// ExportDataTableEventArgs - private void Sheet_ExportDataTableEventReplace(ExportDataTableEventArgs exportDataTableArgs) - { - if (exportDataTableArgs.ExcelValue != null && exportDataTableArgs.ExcelValue.ToString() == "México D.F.") - exportDataTableArgs.DataTableValue = "Mexico"; - } - /// - /// Stop Exporting - /// - /// ExportDataTableEventArgs - private void Sheet_ExportDataTableEventStop(ExportDataTableEventArgs exportDataTableArgs) - { - if (exportDataTableArgs.ExcelValue != null && exportDataTableArgs.ExcelValue.ToString() == "BLONP") - exportDataTableArgs.ExportDataTableAction = ExportDataTableActions.StopExporting; - } - private void Sheet_ExportDataTableEventNone(ExportDataTableEventArgs exportDataTableArgs) - { - exportDataTableArgs.ExportDataTableAction = ExportDataTableActions.Default; - } - } -} \ No newline at end of file diff --git a/Controllers/PDF/AdventureCycleController.cs b/Controllers/PDF/AdventureCycleController.cs deleted file mode 100644 index e840e648..00000000 --- a/Controllers/PDF/AdventureCycleController.cs +++ /dev/null @@ -1,161 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Pdf.Grid; -using System.Data; -using System.IO; -using System.Xml.Linq; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.Rendering; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Controllers.PDF -{ - public partial class PdfController : Controller - { - #region Private Members - - #endregion - // - // GET: /AdventureCycle/ - - public ActionResult AdventureCycle() - { - List styleList = new List(); - - foreach (var style in Enum.GetValues(typeof(PdfGridBuiltinStyle))) - { - styleList.Add(style.ToString()); - } - ViewData.Add("styleName", new SelectList(styleList)); - - return View(); - } - - [HttpPost] - public ActionResult AdventureCycle(string styleName, string Header, string Bandedrow, string Bandedcolumn, string Firstcolumn, string Lastcolumn, string Lastrow, string InsideBrowser) - { - if (styleName == "" || styleName == null) - styleName = "GridTable4"; - //Create PDF document - PdfDocument doc = new PdfDocument(); - - //Set font - PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 7); - - //Create Pdf ben for drawing broder - PdfPen borderPen = new PdfPen(PdfBrushes.DarkBlue); - borderPen.Width = 0; - - //Create DataTable for source - PdfPage page = doc.Pages.Add(); - - - //Use DataTable as source - PdfGrid grid = new PdfGrid(); - - //Create dataset with the "Customers" table from Norwind database - IEnumerable orders = Provider.GetOrdersData(_hostingEnvironment.WebRootPath); - - grid.Style.AllowHorizontalOverflow = true; - - //Set Data source - grid.DataSource = orders; - - #region PdfGridBuiltinStyleSettings - PdfGridBuiltinStyleSettings setting = new PdfGridBuiltinStyleSettings(); - setting.ApplyStyleForHeaderRow = Header != null ? true : false; - setting.ApplyStyleForBandedRows = Bandedrow != null ? true : false; - setting.ApplyStyleForBandedColumns = Bandedcolumn != null ? true : false; - setting.ApplyStyleForFirstColumn = Firstcolumn != null ? true : false; - setting.ApplyStyleForLastColumn = Lastcolumn != null ? true : false; - setting.ApplyStyleForLastRow = Lastrow != null ? true : false; - #endregion - - //Set layout properties - PdfLayoutFormat format = new PdfLayoutFormat(); - format.Break = PdfLayoutBreakType.FitElement; - format.Layout = PdfLayoutType.Paginate; - - PdfGridBuiltinStyle style = ConvertToPdfGridBuiltStyle(styleName); - - grid.ApplyBuiltinStyle(style, setting); - grid.Style.Font = font; - grid.Style.CellPadding.All = 2; - grid.Style.AllowHorizontalOverflow = false; - //Draw table - grid.Draw(page, PointF.Empty, format); - - MemoryStream stream = new MemoryStream(); - - //Save the PDF document - doc.Save(stream); - - //Close the PDF document - doc.Close(true); - - stream.Position = 0; - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/pdf"); - fileStreamResult.FileDownloadName = "AdventureCycle.pdf"; - return fileStreamResult; - } - # region Helpher Methods - - - private PdfGridBuiltinStyle ConvertToPdfGridBuiltStyle(string styleName) - { - PdfGridBuiltinStyle value = (PdfGridBuiltinStyle)Enum.Parse(typeof(PdfGridBuiltinStyle), styleName); - return value; - } - - internal sealed class Provider - { - public static IEnumerable GetOrdersData(string webRootPath) - { - string dataPath = webRootPath + @"/PDF/"; - //Read the file - FileStream xmlStream = new FileStream(dataPath + "Orders.xml", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - using (StreamReader reader = new StreamReader(xmlStream, true)) - { - string data = reader.ReadToEnd(); - data = data.Replace(" xmlns=\"http://www.tempuri.org/DataSet1.xsd\"", ""); - return XElement.Parse(data) - .Elements("Orders") - .Select(c => new Orders - { - OrderID = c.Element("OrderID") != null ? c.Element("OrderID").Value : "", - CustomerID = c.Element("CustomerID") != null ? c.Element("CustomerID").Value : "", - ShipName = c.Element("ShipName") != null ? c.Element("ShipName").Value : "", - ShipAddress = c.Element("ShipAddress") != null ? c.Element("ShipAddress").Value : "", - ShipCity = c.Element("ShipCity") != null ? c.Element("ShipCity").Value : "", - ShipPostalCode = c.Element("ShipPostalCode") != null ? c.Element("ShipPostalCode").Value : "", - ShipCountry = c.Element("ShipCountry") != null ? c.Element("ShipCountry").Value : "", - }); - } - } - } - #endregion - } - public class Orders - { - public string OrderID { get; set; } - public string CustomerID { get; set; } - public string ShipName { get; set; } - public string ShipAddress { get; set; } - public string ShipCity { get; set; } - public string ShipPostalCode { get; set; } - public string ShipCountry { get; set; } - } -} diff --git a/Controllers/PDF/CompressExistingPDFController.cs b/Controllers/PDF/CompressExistingPDFController.cs deleted file mode 100644 index f1271cd4..00000000 --- a/Controllers/PDF/CompressExistingPDFController.cs +++ /dev/null @@ -1,92 +0,0 @@ -#region Copyright Syncfusion Inc. 2001 - 2024 -// Copyright Syncfusion Inc. 2001 - 2024. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using System.IO; -using Syncfusion.Pdf.Parsing; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc.Rendering; - -namespace EJ2CoreSampleBrowser.Controllers.PDF -{ - public partial class PdfController : Controller - { - - public ActionResult CompressExistingPDF() - { - ViewData.Add("imageQuality", new SelectList(new string[] { "10", "20", "30", "40", "50", "60", "70", "80", "90", "100" }, "50")); - return View(); - } - - [HttpPost] - public ActionResult CompressExistingPDF(bool compressImage =false , bool optPageContents =false , bool removeMetaData =false , bool optFont =false , string imageQuality = "50", string Browser = "null") - { - - if(Request.Form.Files != null && Request.Form.Files.Count != 0) - { - PdfLoadedDocument ldoc = new PdfLoadedDocument(Request.Form.Files[0].OpenReadStream()); - - PdfCompressionOptions options = new PdfCompressionOptions(); - if (compressImage) - { - //Compress image. - options.CompressImages = true; - options.ImageQuality = int.Parse((imageQuality)); - } - else - options.CompressImages = false; - - //Compress the font data - if (optFont) - options.OptimizeFont = true; - else - options.OptimizeFont = false; - - //Compress the page contents - if (optPageContents) - options.OptimizePageContents = true; - else - options.OptimizePageContents = false; - - //Remove the metadata information. - if (removeMetaData) - options.RemoveMetadata = true; - else - options.RemoveMetadata = false; - - //Set the options to loaded PDF document - ldoc.Compress(options); - - //If the position is not set to '0' then the PDF will be empty. - MemoryStream ms = new MemoryStream(); - ldoc.Save(ms); - ms.Position = 0; - ldoc.Close(true); - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "Compression.pdf"; - return fileStreamResult; - - - } - else - { - ViewData["lab"] = "Choose a valid PDF file."; - ViewData.Add("imageQuality", new SelectList(new string[] { "10", "20", "30", "40", "50", "60", "70", "80", "90", "100" }, "50")); - return View(); - } - } - - - - - } -} diff --git a/Controllers/PDF/DigitalSignatureValidationController.cs b/Controllers/PDF/DigitalSignatureValidationController.cs deleted file mode 100644 index 496e3a4e..00000000 --- a/Controllers/PDF/DigitalSignatureValidationController.cs +++ /dev/null @@ -1,150 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Security; -using System.IO; -using EJ2CoreSampleBrowser.Models; -using System.Text; -using Syncfusion.Pdf.Parsing; -using System.Security.Cryptography.X509Certificates; - -namespace EJ2CoreSampleBrowser.Controllers.PDF -{ - public partial class PdfController : Controller - { - public ActionResult DigitalSignatureValidation() - { - SignatureValidationMessage message = new SignatureValidationMessage(); - message.Message = string.Empty; - return View("DigitalSignatureValidation", message); - } - - [HttpPost] - public ActionResult DigitalSignatureValidation(string SignatureValidation) - { - string dataPath = _hostingEnvironment.WebRootPath + @"/PDF/"; - SignatureValidationMessage message = new SignatureValidationMessage(); - - FileStream fileStreamInput = new FileStream(dataPath + @"DigitalSignature.pdf", FileMode.Open, FileAccess.Read); - - //Load an existing signed PDF document - PdfLoadedDocument ldoc = new PdfLoadedDocument(fileStreamInput); - - //Get signature field. - PdfLoadedSignatureField lSigFld = ldoc.Form.Fields[0] as PdfLoadedSignatureField; - - //X509Certificate2Collection to check the signer's identity using root certificates. - X509CertificateCollection collection = new X509CertificateCollection(); - - //Read the certificate file. - FileStream pfxFile = new FileStream(dataPath + @"Root.cer", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - byte[] data = new byte[pfxFile.Length]; - - pfxFile.Read(data, 0, data.Length); - - X509Certificate2 certificate = new X509Certificate2(data); - - //Add the certificate to the collection. - collection.Add(certificate); - - pfxFile = new FileStream(dataPath + @"Intermediate0.cer", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - data = new byte[pfxFile.Length]; - - pfxFile.Read(data, 0, data.Length); - - certificate = new X509Certificate2(data); - - //Add the certificate to the collection. - collection.Add(certificate); - - pfxFile = new FileStream(dataPath + @"Intermediate1.cer", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - data = new byte[pfxFile.Length]; - - pfxFile.Read(data, 0, data.Length); - - certificate = new X509Certificate2(data); - - //Add the certificate to the collection. - collection.Add(certificate); - - //Validate signature and get the validation result - PdfSignatureValidationResult result = lSigFld.ValidateSignature(collection); - - StringBuilder builder = new StringBuilder(); - - builder.AppendLine("Signature is " + result.SignatureStatus); - - builder.AppendLine("----------Validation Summary----------"); - - //Checks whether the document is modified or not - bool isModified = result.IsDocumentModified; - if (isModified) - builder.AppendLine("The document has been altered or corrupted since the signature was applied."); - else - builder.AppendLine("The document has not been modified since the signature was applied."); - - //Signature details - builder.AppendLine("Digitally signed by " + lSigFld.Signature.Certificate.IssuerName); - builder.AppendLine("Valid From : " + lSigFld.Signature.Certificate.ValidFrom); - builder.AppendLine("Valid To : " + lSigFld.Signature.Certificate.ValidTo); - builder.AppendLine("Signature Algorithm : " + result.SignatureAlgorithm); - builder.AppendLine("Hash Algorithm : " + result.DigestAlgorithm); - - //Revocation validation details - builder.AppendLine("OCSP revocation status : " + result.RevocationResult.OcspRevocationStatus); - if (result.RevocationResult.OcspRevocationStatus == RevocationStatus.None && result.RevocationResult.IsRevokedCRL) - builder.AppendLine("CRL is revoked."); - - builder.AppendLine(); - builder.AppendLine("--------Revocation Information---------"); - builder.AppendLine(); - - foreach (PdfSignerCertificate signerCertificate in result.SignerCertificates) - { - if (signerCertificate.OcspCertificate != null) - { - builder.AppendLine("------------OCSP Certificate-------------"); - builder.AppendLine(); - foreach (X509Certificate2 item in signerCertificate.OcspCertificate.Certificates) - { - builder.AppendLine("The OCSP Response was signed by " + item.SubjectName.Name); - } - builder.AppendLine("Is Embedded: " + signerCertificate.OcspCertificate.IsEmbedded); - builder.AppendLine("ValidFrom: " + signerCertificate.OcspCertificate.ValidFrom); - builder.AppendLine("ValidTo: " + signerCertificate.OcspCertificate.ValidTo); - builder.AppendLine(); - continue; - } - if (signerCertificate.CrlCertificate != null) - { - builder.AppendLine("------------CRL Certificate--------------"); - builder.AppendLine(); - foreach (X509Certificate2 item in signerCertificate.CrlCertificate.Certificates) - { - builder.AppendLine("The CRL was signed by " + item.SubjectName.Name); - } - builder.AppendLine("Is Embedded: " + signerCertificate.CrlCertificate.IsEmbedded); - builder.AppendLine("ValidFrom: " + signerCertificate.CrlCertificate.ValidFrom); - builder.AppendLine("ValidTo: " + signerCertificate.CrlCertificate.ValidTo); - break; - } - } - - //Close the document - ldoc.Close(true); - - message.Message = builder.ToString(); - return View("DigitalSignatureValidation", message); - } - - } -} diff --git a/Controllers/PDF/FindPDFCorruptionController.cs b/Controllers/PDF/FindPDFCorruptionController.cs deleted file mode 100644 index dd6852c4..00000000 --- a/Controllers/PDF/FindPDFCorruptionController.cs +++ /dev/null @@ -1,59 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Parsing; -using System.IO; -using EJ2CoreSampleBrowser.Models; -using System.Text; - -namespace EJ2CoreSampleBrowser.Controllers.PDF -{ - public partial class PdfController : Controller - { - public ActionResult FindPDFCorruption() - { - - FindPDFCorruptionMessage message = new FindPDFCorruptionMessage(); - message.Message = string.Empty; - return View("FindPDFCorruption", message); - } - - [HttpPost] - public ActionResult FindPDFCorruption(string FindCorruption) - { - string dataPath = _hostingEnvironment.WebRootPath + @"/PDF/"; - FindPDFCorruptionMessage message = new FindPDFCorruptionMessage(); - - //Read the certificate file. - FileStream pdfFile = new FileStream(dataPath + @"CorruptedDocument.pdf", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - //Create a new instance for the PDF analyzer. - PdfDocumentAnalyzer analyzer = new PdfDocumentAnalyzer(pdfFile); - - //Get the syntax errors. - SyntaxAnalyzerResult result = analyzer.AnalyzeSyntax(); - - //Check whether the document is corrupted or not. - if (result.IsCorrupted) - { - StringBuilder builder = new StringBuilder(); - builder.AppendLine("The PDF document is corrupted."); - int count = 1; - foreach (PdfException exception in result.Errors) - { - builder.AppendLine(count++.ToString() + ": " + exception.Message); - } - message.Message = builder.ToString(); - } - - return View("FindPDFCorruption",message); - } - - } -} diff --git a/Controllers/PDF/FindTextController.cs b/Controllers/PDF/FindTextController.cs deleted file mode 100644 index f547b9ec..00000000 --- a/Controllers/PDF/FindTextController.cs +++ /dev/null @@ -1,110 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Hosting; -using System.IO; -using Syncfusion.Pdf.Parsing; -using EJ2CoreSampleBrowser.Models; -using Syncfusion.Pdf; -using Syncfusion.EJ2.Navigations; - -// For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860 - -namespace EJ2CoreSampleBrowser.Controllers.PDF -{ - public partial class PdfController : Controller - { - // GET: /FindText/ - public IActionResult FindText() - { - FindTextMessage message = new FindTextMessage(); - message.Message = string.Empty; - return View("FindText", message); - } - private readonly IWebHostEnvironment _hostingEnvironment; - public PdfController(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public IActionResult FindText(string ViewTemplate, string findText, string find) - { - if (!string.IsNullOrEmpty(find)) - { - Stream fileStream = GetSplitPDFDocument(); - PdfLoadedDocument loadedDocument = new PdfLoadedDocument(fileStream); - Dictionary> matchRects = new Dictionary>(); - bool matchFound = loadedDocument.FindText(findText, out matchRects); - FindTextMessage message = new FindTextMessage(); - List rectCoords = null; - string findTextResults = null; - int textCounts = 0; - - if (matchFound) - { - // Iterate through the matchedText bounds dictionary. - foreach (KeyValuePair> matchedText in matchRects) - { - int pageIndex = matchedText.Key; - rectCoords = matchedText.Value; - for (int j = 0; j < rectCoords.Count; j++) - { - textCounts++; - findTextResults += "Occurrence " + textCounts + " is on page " + (pageIndex + 1) + " with the following coordinates: X:" + rectCoords[j].X + "; Y:" + rectCoords[j].Y + "; Width:" + rectCoords[j].Width + "; Height:" + rectCoords[j].Height + Environment.NewLine; - - } - - } - var text = " The text \"" + findText + "\" appears " + textCounts + " times in this document " + "\n"; - message.Message = text + findTextResults; - - } - else - { - ViewData["Message"] = "No such word found in in the PDF document"; - } - - return View("FindText", message); - - } - return View("FindText"); - } - - private Stream GetSplitPDFDocument() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".pdf") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - ViewData["Message"] = string.Format("Please choose a valid PDF document to find the text"); - return null; - } - } - else - { - //Opens an existing document from stream through constructor of `WordDocument` class - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/PDF/PDF_Succinctly.pdf", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } - } -} diff --git a/Controllers/PDF/FormFillingController.cs b/Controllers/PDF/FormFillingController.cs deleted file mode 100644 index 81f51ad7..00000000 --- a/Controllers/PDF/FormFillingController.cs +++ /dev/null @@ -1,207 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Parsing; -using System.IO; -using EJ2CoreSampleBrowser.Models; -using Microsoft.AspNetCore.Mvc.Rendering; - -namespace EJ2CoreSampleBrowser.Controllers.PDF -{ - public partial class PdfController : Controller - { - public List Countries { get; set; } - // - // GET: /FormFilling/ - - public ActionResult FormFilling() - { - - UserRegisterationModel user = new UserRegisterationModel(); - user.Name = "John Milton"; - user.Gender = "Male"; - user.StateDropdown = "Alabama"; - user.DateOfBirth = new DateTime(2012, 05, 12); - user.EmailID = "john.milton@example.com"; - user.Newsletter = false; - user.States = GetStates(); - return View(user); - } - - [HttpPost] - public ActionResult FormFilling(string viewTemplate, string fillForm, string fillAndFlatten, UserRegisterationModel user) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - if (!string.IsNullOrEmpty(viewTemplate)) - { - //Read the file - FileStream file = new FileStream(dataPath + "FormFillingDocument.pdf", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - //Load the template document - PdfLoadedDocument doc = new PdfLoadedDocument(file); - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - doc.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the PDF document. - doc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "template.pdf"; - return fileStreamResult; - } - else if (!string.IsNullOrEmpty(fillForm) || !string.IsNullOrEmpty(fillAndFlatten)) - { - //Read the file - FileStream file = new FileStream(dataPath + "FormFillingDocument.pdf", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - //Load the template document - PdfLoadedDocument doc = new PdfLoadedDocument(file); - - PdfLoadedForm form = doc.Form; - - if (user.Name != null) - { - //Load the textbox field - PdfLoadedTextBoxField? nameText = form.Fields["name"] as PdfLoadedTextBoxField; - - //Fill the text box - nameText!.Text = user.Name; - } - - //Get the Radio button field - PdfLoadedRadioButtonListField? genderRadio = form.Fields["gender"] as PdfLoadedRadioButtonListField; - - switch (user.Gender) - { - case "Male": - genderRadio!.SelectedIndex = 0; - break; - case "Female": - genderRadio!.SelectedIndex = 2; - break; - case "Unspecified": - genderRadio!.SelectedIndex = 1; - break; - } - - //Load the textbox field - PdfLoadedTextBoxField? dobText = form.Fields["dob"] as PdfLoadedTextBoxField; - - //Fill the text box - dobText!.Text = user.DateOfBirth.Date.ToString("dd MMMM yyyy"); - - if (user.EmailID != null) - { - //Load the textbox field - PdfLoadedTextBoxField? emailText = form.Fields["email"] as PdfLoadedTextBoxField; - - //Fill the text box - emailText!.Text = user.EmailID; - } - - //Load the combo box field - PdfLoadedComboBoxField? countryCombo = form.Fields["state"] as PdfLoadedComboBoxField; - - countryCombo!.SelectedValue = user.StateDropdown; - - //Get the Checkbox field - PdfLoadedCheckBoxField? newsCheck = form.Fields["newsletter"] as PdfLoadedCheckBoxField; - - if (user.Newsletter) - newsCheck!.Checked = true; - - - if (!string.IsNullOrEmpty(fillAndFlatten)) - { - doc.Form.Flatten = true; - } - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - doc.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the PDF document. - doc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "Form.pdf"; - return fileStreamResult; - } - return View(); - } - private List GetStates() - { - return new List - { - new SelectListItem { Value = "Alabama", Text = "Alabama" }, - new SelectListItem { Value = "Alaska", Text = "Alaska" }, - new SelectListItem { Value = "Arizona", Text = "Arizona" }, - new SelectListItem { Value = "Arkansas", Text = "Arkansas" }, - new SelectListItem { Value = "California", Text = "California" }, - new SelectListItem { Value = "Colorado", Text = "Colorado" }, - new SelectListItem { Value = "Connecticut", Text = "Connecticut" }, - new SelectListItem { Value = "Delaware", Text = "Delaware" }, - new SelectListItem { Value = "Florida", Text = "Florida" }, - new SelectListItem { Value = "Georgia", Text = "Georgia" }, - new SelectListItem { Value = "Hawaii", Text = "Hawaii" }, - new SelectListItem { Value = "Idaho", Text = "Idaho" }, - new SelectListItem { Value = "Illinois", Text = "Illinois" }, - new SelectListItem { Value = "Indiana", Text = "Indiana" }, - new SelectListItem { Value = "Iowa", Text = "Iowa" }, - new SelectListItem { Value = "Kansas", Text = "Kansas" }, - new SelectListItem { Value = "Kentucky", Text = "Kentucky" }, - new SelectListItem { Value = "Louisiana", Text = "Louisiana" }, - new SelectListItem { Value = "Maine", Text = "Maine" }, - new SelectListItem { Value = "Maryland", Text = "Maryland" }, - new SelectListItem { Value = "Massachusetts", Text = "Massachusetts" }, - new SelectListItem { Value = "Michigan", Text = "Michigan" }, - new SelectListItem { Value = "Minnesota", Text = "Minnesota" }, - new SelectListItem { Value = "Mississippi", Text = "Mississippi" }, - new SelectListItem { Value = "Missouri", Text = "Missouri" }, - new SelectListItem { Value = "Montana", Text = "Montana" }, - new SelectListItem { Value = "Nebraska", Text = "Nebraska" }, - new SelectListItem { Value = "Nevada", Text = "Nevada" }, - new SelectListItem { Value = "New Jersey", Text = "New Jersey" }, - new SelectListItem { Value = "New Mexico", Text = "New Mexico" }, - new SelectListItem { Value = "New York", Text = "New York" }, - new SelectListItem { Value = "North Carolina", Text = "North Carolina" }, - new SelectListItem { Value = "North Dakota", Text = "North Dakota" }, - new SelectListItem { Value = "Ohio", Text = "Ohio" }, - new SelectListItem { Value = "Oklahoma", Text = "Oklahoma" }, - new SelectListItem { Value = "Oregon", Text = "Oregon" }, - new SelectListItem { Value = "Pennsylvania", Text = "Pennsylvania" }, - new SelectListItem { Value = "South Carolina", Text = "South Carolina" }, - new SelectListItem { Value = "South Dakota", Text = "South Dakota" }, - new SelectListItem { Value = "Tennessee", Text = "Tennessee" }, - new SelectListItem { Value = "Texas", Text = "Texas" }, - new SelectListItem { Value = "Utah", Text = "Utah" }, - new SelectListItem { Value = "Vermont", Text = "Vermont" }, - new SelectListItem { Value = "Virginia", Text = "Virginia" }, - new SelectListItem { Value = "Washington", Text = "Washington" }, - new SelectListItem { Value = "West Virginia", Text = "West Virginia" }, - new SelectListItem { Value = "Wisconsin", Text = "Wisconsin" }, - new SelectListItem { Value = "Wyoming", Text = "Wyoming" } - }; - } - } -} diff --git a/Controllers/PDF/HtmltoPDFController.cs b/Controllers/PDF/HtmltoPDFController.cs deleted file mode 100644 index d0722964..00000000 --- a/Controllers/PDF/HtmltoPDFController.cs +++ /dev/null @@ -1,28 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.IO; -using System.Diagnostics; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Hosting; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Drawing; -using System.Runtime.InteropServices; -using EJ2CoreSampleBrowser.Models; - -namespace HtmlToPdf.Controllers -{ - public partial class PdfController : Controller - { - public ActionResult HtmltoPDF() - { - return View(); - } - } -} diff --git a/Controllers/PdfViewer/AnnotationsController.cs b/Controllers/PdfViewer/AnnotationsController.cs deleted file mode 100644 index 574c5846..00000000 --- a/Controllers/PdfViewer/AnnotationsController.cs +++ /dev/null @@ -1,32 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Hosting; -using Syncfusion.EJ2.PdfViewer; -using System.IO; -using Newtonsoft.Json; -using Microsoft.Extensions.Caching.Memory; - -namespace EJ2CoreSampleBrowser.Controllers.PdfViewer -{ - - public partial class PdfViewerController : Controller - { - // GET: Default - public ActionResult Annotations() - { - return View(); - } - - } -} \ No newline at end of file diff --git a/Controllers/PdfViewer/CustomContextMenuController.cs b/Controllers/PdfViewer/CustomContextMenuController.cs deleted file mode 100644 index a22d85e1..00000000 --- a/Controllers/PdfViewer/CustomContextMenuController.cs +++ /dev/null @@ -1,31 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Hosting; -using Syncfusion.EJ2.PdfViewer; -using System.IO; -using Newtonsoft.Json; - -namespace EJ2CoreSampleBrowser.Controllers.PdfViewer -{ - - public partial class PdfViewerController : Controller - { - // GET: Default - public ActionResult CustomContextMenu() - { - return View(); - } - - } -} \ No newline at end of file diff --git a/Controllers/PdfViewer/CustomToolbarController.cs b/Controllers/PdfViewer/CustomToolbarController.cs deleted file mode 100644 index 2778e378..00000000 --- a/Controllers/PdfViewer/CustomToolbarController.cs +++ /dev/null @@ -1,31 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Hosting; -using Syncfusion.EJ2.PdfViewer; -using System.IO; -using Newtonsoft.Json; - -namespace EJ2CoreSampleBrowser.Controllers.PdfViewer -{ - - public partial class PdfViewerController : Controller - { - // GET: Default - public ActionResult CustomToolbar() - { - return View(); - } - - } -} \ No newline at end of file diff --git a/Controllers/PdfViewer/DefaultController.cs b/Controllers/PdfViewer/DefaultController.cs deleted file mode 100644 index 812605c3..00000000 --- a/Controllers/PdfViewer/DefaultController.cs +++ /dev/null @@ -1,809 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Caching.Memory; -using Syncfusion.EJ2.PdfViewer; -using System.IO; -using Newtonsoft.Json; -using Syncfusion.Pdf.Parsing; -using System.Security.Cryptography.X509Certificates; -using Syncfusion.Pdf.Security; -using Syncfusion.Pdf; -using System.Net; -using Syncfusion.DocIORenderer; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Presentation; -using Syncfusion.PresentationRenderer; -using Syncfusion.XlsIO; -using Syncfusion.XlsIORenderer; -using WFormatType = Syncfusion.DocIO.FormatType; -using Microsoft.AspNetCore.Cors; -using Syncfusion.Pdf.Interactive; -using Syncfusion.Pdf.Redaction; -using Syncfusion.Drawing; -#if REDIS -using Microsoft.Extensions.Caching.Distributed; -#endif - -namespace EJ2CoreSampleBrowser.Controllers.PdfViewer -{ - public partial class PdfViewerController : Controller - { - private IMemoryCache _cache; - private readonly IWebHostEnvironment _hostingEnvironment; -#if REDIS - private IDistributedCache _distributedCache; - public PdfViewerController(IMemoryCache memoryCache, IDistributedCache distributedCache, IWebHostEnvironment hostingEnvironment) -#else - public PdfViewerController(IMemoryCache memoryCache, IWebHostEnvironment hostingEnvironment) -#endif - { - _cache = memoryCache; -#if REDIS - _distributedCache = distributedCache; -#endif - _hostingEnvironment = hostingEnvironment; - } - // GET: Default - public ActionResult Default() - { - return View(); - } - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/Load")] - public IActionResult Load([FromBody] Dictionary jsonObject) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - MemoryStream stream = new MemoryStream(); - object jsonResult = new object(); - if (jsonObject != null && jsonObject.ContainsKey("document")) - { - if (bool.Parse(jsonObject["isFileName"])) - { - string documentPath = GetDocumentPath(jsonObject["document"]); - if (!string.IsNullOrEmpty(documentPath)) - { - byte[] bytes = System.IO.File.ReadAllBytes(documentPath); - stream = new MemoryStream(bytes); - } - else - { - string fileName = jsonObject["document"].Split(new string[] { "://" }, StringSplitOptions.None)[0]; - if (fileName == "http" || fileName == "https") - { - WebClient WebClient = new WebClient(); - byte[] pdfDoc = WebClient.DownloadData(jsonObject["document"]); - stream = new MemoryStream(pdfDoc); - } - else - return this.Content(jsonObject["document"] + " is not found"); - } - } - else - { - byte[] bytes = Convert.FromBase64String(jsonObject["document"]); - stream = new MemoryStream(bytes); - } - } - jsonResult = pdfviewer.Load(stream, jsonObject); - return Content(JsonConvert.SerializeObject(jsonResult)); - } - - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/ValidatePassword")] - public IActionResult ValidatePassword([FromBody] Dictionary jsonObject) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - MemoryStream stream = new MemoryStream(); - object jsonResult = new object(); - if (jsonObject != null && jsonObject.ContainsKey("document")) - { - if (bool.Parse(jsonObject["isFileName"])) - { - string documentPath = GetDocumentPath(jsonObject["document"]); - if (!string.IsNullOrEmpty(documentPath)) - { - byte[] bytes = System.IO.File.ReadAllBytes(documentPath); - stream = new MemoryStream(bytes); - } - else - { - string fileName = jsonObject["document"].Split(new string[] { "://" }, StringSplitOptions.None)[0]; - if (fileName == "http" || fileName == "https") - { - WebClient WebClient = new WebClient(); - byte[] pdfDoc = WebClient.DownloadData(jsonObject["document"]); - stream = new MemoryStream(pdfDoc); - } - else - return this.Content(jsonObject["document"] + " is not found"); - } - } - else - { - byte[] bytes = Convert.FromBase64String(jsonObject["document"]); - stream = new MemoryStream(bytes); - } - } - string password = null; - if (jsonObject.ContainsKey("password")) - { - password = jsonObject["password"]; - } - var result = pdfviewer.Load(stream, password); - - return Content(JsonConvert.SerializeObject(result)); - } - - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/RenderPdfPages")] - public IActionResult RenderPdfPages([FromBody] Dictionary jsonObject) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - object jsonResult = pdfviewer.GetPage(jsonObject); - return Content(JsonConvert.SerializeObject(jsonResult)); - } - [HttpPost] - [Route("api/[controller]/AddSignature")] - public IActionResult AddSignature([FromBody] Dictionary jsonObject) - { - if (jsonObject != null && jsonObject.ContainsKey("base64String")) - { - string base64 = jsonObject["base64String"]; - string base64String = base64.Split(new string[] { "data:application/pdf;base64," }, StringSplitOptions.None)[1]; - if (base64String != null || base64String != string.Empty) - { - byte[] documentBytes = Convert.FromBase64String(base64String); - PdfLoadedDocument loadedDocument = new PdfLoadedDocument(documentBytes); - loadedDocument.Pages[0].Annotations.Flatten = true; - loadedDocument.Form.Flatten = true; - MemoryStream stream = new MemoryStream(); - loadedDocument.Save(stream); - loadedDocument.Close(true); - loadedDocument = new PdfLoadedDocument(stream); - //Get the first page of the document. - PdfPageBase loadedPage = loadedDocument.Pages[0]; - //Create new X509Certificate2 with the root certificate. - X509Certificate2 certificate = new X509Certificate2(GetDocumentPath("localhost.pfx"), "Syncfusion@123"); - PdfCertificate pdfCertificate = new PdfCertificate(certificate); - //Creates a digital signature. - PdfSignature signature = new PdfSignature(loadedDocument, loadedPage, pdfCertificate, "Signature"); - signature.Certificated = true; - MemoryStream str = new MemoryStream(); - //Saves the document. - loadedDocument.Save(str); - loadedDocument.Close(true); - stream.Dispose(); - byte[] docBytes = str.ToArray(); - string docBase64 = "data:application/pdf;base64," + Convert.ToBase64String(docBytes); - return Content(docBase64); - } - } - return Content("data:application/pdf;base64," + ""); - } - - [HttpPost] - [Route("api/[controller]/ValidateSignature")] - public IActionResult ValidateSignature([FromBody] Dictionary jsonObject) - { - var hasDigitalSignature = false; - var errorVisible = false; - var successVisible = false; - var warningVisible = false; - var downloadVisibility = true; - var message = string.Empty; - if (jsonObject.ContainsKey("documentData")) - { - byte[] documentBytes = Convert.FromBase64String(jsonObject["documentData"].Split(",")[1]); - PdfLoadedDocument loadedDocument = new PdfLoadedDocument(documentBytes); - - PdfLoadedForm form = loadedDocument.Form; - if (form != null) - { - foreach (PdfLoadedField field in form.Fields) - { - if (field is PdfLoadedSignatureField) - { - //Gets the first signature field of the PDF document. - PdfLoadedSignatureField signatureField = field as PdfLoadedSignatureField; - if (signatureField.IsSigned) - { - hasDigitalSignature = true; - //X509Certificate2Collection to check the signers identity using root certificates. - X509Certificate2Collection collection = new X509Certificate2Collection(); - //Create new X509Certificate2 with the root certificate. - X509Certificate2 certificate = new X509Certificate2(GetDocumentPath("localhost.pfx"), "Syncfusion@123"); - //Add the certificate to the collection. - collection.Add(certificate); - //Validate all signatures in loaded PDF document and get the list of validation result. - PdfSignatureValidationResult result = signatureField.ValidateSignature(collection); - //Checks whether the document is modified or not. - if (result.IsDocumentModified) - { - errorVisible = true; - successVisible = false; - warningVisible = false; - downloadVisibility = false; - message = "The document has been digitally signed, but it has been modified since it was signed and at least one signature is invalid ."; - } - else - { - //Checks whether the signature is valid or not. - if (result.IsSignatureValid) - { - if (result.SignatureStatus.ToString() == "Unknown") - { - errorVisible = false; - successVisible = false; - warningVisible = true; - message = "The document has been digitally signed and at least one signature has problem"; - } - else - { - errorVisible = false; - successVisible = true; - warningVisible = false; - downloadVisibility = false; - message = "The document has been digitally signed and all the signatures are valid."; - } - } - } - } - } - } - } - } - return Content(JsonConvert.SerializeObject(new { hasDigitalSignature = hasDigitalSignature, errorVisible = errorVisible, successVisible = successVisible, warningVisible = warningVisible, downloadVisibility = downloadVisibility, message = message })); - - } - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/RenderAnnotationComments")] - public IActionResult RenderAnnotationComments([FromBody] Dictionary jsonObject) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - object jsonResult = pdfviewer.GetAnnotationComments(jsonObject); - return Content(JsonConvert.SerializeObject(jsonResult)); - } - - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/Unload")] - public IActionResult Unload([FromBody] Dictionary jsonObject) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - pdfviewer.ClearCache(jsonObject); - return this.Content("Document cache is cleared"); - } - - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/RenderThumbnailImages")] - public IActionResult RenderThumbnailImages([FromBody] Dictionary jsonObject) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - object result = pdfviewer.GetThumbnailImages(jsonObject); - return Content(JsonConvert.SerializeObject(result)); - } - - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/Bookmarks")] - public IActionResult Bookmarks([FromBody] Dictionary jsonObject) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - object jsonResult = pdfviewer.GetBookmarks(jsonObject); - return Content(JsonConvert.SerializeObject(jsonResult)); - } - - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/Download")] - public IActionResult Download([FromBody] Dictionary jsonObject) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - string documentBase = pdfviewer.GetDocumentAsBase64(jsonObject); - return Content(documentBase); - } - - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/FlattenDownload")] - public IActionResult FlattenDownload([FromBody] Dictionary jsonObject) - { - if (jsonObject != null && jsonObject.ContainsKey("base64String")) - { - string documentBase = jsonObject["base64String"]; - - string base64String = documentBase.Split(new string[] { "data:application/pdf;base64," }, StringSplitOptions.None)[1]; - byte[] byteArray = Convert.FromBase64String(base64String); - PdfLoadedDocument loadedDocument = new PdfLoadedDocument(byteArray); - if (loadedDocument.Form != null) - { - loadedDocument.FlattenAnnotations(); - loadedDocument.Form.Flatten = true; - } - //Save the PDF document. - MemoryStream stream = new MemoryStream(); - //Save the PDF document - loadedDocument.Save(stream); - stream.Position = 0; - //Close the document - loadedDocument.Close(true); - string updatedDocumentBase = Convert.ToBase64String(stream.ToArray()); - documentBase = "data:application/pdf;base64," + updatedDocumentBase; - return Content(documentBase); - } - return Content("data:application/pdf;base64,"); - } - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/PrintImages")] - public IActionResult PrintImages([FromBody] Dictionary jsonObject) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - object pageImage = pdfviewer.GetPrintImage(jsonObject); - return Content(JsonConvert.SerializeObject(pageImage)); - } - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/ExportAnnotations")] - public IActionResult ExportAnnotations([FromBody] Dictionary jsonObject) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - string result = pdfviewer.ExportAnnotation(jsonObject); - return Content(result); - } - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/ImportAnnotations")] - public IActionResult ImportAnnotations([FromBody] Dictionary jsonObject) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - string jsonResult = string.Empty; - object JsonResult; - if (jsonObject != null && jsonObject.ContainsKey("fileName")) - { - string documentPath = GetDocumentPath(jsonObject["fileName"]); - if (!string.IsNullOrEmpty(documentPath)) - { - jsonResult = System.IO.File.ReadAllText(documentPath); - string[] searchStrings = { "textMarkupAnnotation", "measureShapeAnnotation", "freeTextAnnotation", "stampAnnotations", "signatureInkAnnotation", "stickyNotesAnnotation", "signatureAnnotation", "AnnotationType" }; - bool isnewJsonFile = !searchStrings.Any(jsonResult.Contains); - if (isnewJsonFile) - { - byte[] bytes = System.IO.File.ReadAllBytes(documentPath); - jsonObject["importedData"] = Convert.ToBase64String(bytes); - JsonResult = pdfviewer.ImportAnnotation(jsonObject); - jsonResult = JsonConvert.SerializeObject(JsonResult); - } - } - else - { - return this.Content(jsonObject["document"] + " is not found"); - } - } - else - { - string extension = Path.GetExtension(jsonObject["importedData"]); - if (extension != ".xfdf") - { - JsonResult = pdfviewer.ImportAnnotation(jsonObject); - return Content(JsonConvert.SerializeObject(JsonResult)); - } - else - { - string documentPath = GetDocumentPath(jsonObject["importedData"]); - if (!string.IsNullOrEmpty(documentPath)) - { - byte[] bytes = System.IO.File.ReadAllBytes(documentPath); - jsonObject["importedData"] = Convert.ToBase64String(bytes); - JsonResult = pdfviewer.ImportAnnotation(jsonObject); - return Content(JsonConvert.SerializeObject(JsonResult)); - } - else - { - return this.Content(jsonObject["document"] + " is not found"); - } - } - } - return Content(jsonResult); - } - - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/RenderPdfTexts")] - public IActionResult RenderPdfTexts([FromBody] Dictionary jsonObject) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - object result = pdfviewer.GetDocumentText(jsonObject); - return Content(JsonConvert.SerializeObject(result)); - } - - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/ExportFormFields")] - public IActionResult ExportFormFields([FromBody] Dictionary jsonObject) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - string jsonResult = pdfviewer.ExportFormFields(jsonObject); - return Content(jsonResult); - } - - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/ImportFormFields")] - public IActionResult ImportFormFields([FromBody] Dictionary jsonObject) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - jsonObject["data"] = GetDocumentPath(jsonObject["data"]); - object jsonResult = pdfviewer.ImportFormFields(jsonObject); - return Content(JsonConvert.SerializeObject(jsonResult)); - } - - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/LoadFile")] - public IActionResult LoadFile([FromBody] Dictionary jsonObject) - { - if (jsonObject.ContainsKey("data")) - { - - string base64 = jsonObject["data"]; - //string fileName = args.FileData[0].Name; - string type = jsonObject["type"]; - string data = base64.Split(',')[1]; - byte[] bytes = Convert.FromBase64String(data); - var outputStream = new MemoryStream(); - Syncfusion.Pdf.PdfDocument pdfDocument = new Syncfusion.Pdf.PdfDocument(); - using (Stream stream = new MemoryStream(bytes)) - { - switch (type) - { - case "docx": - case "dot": - case "doc": - case "dotx": - case "docm": - case "dotm": - case "rtf": - Syncfusion.DocIO.DLS.WordDocument doc = new Syncfusion.DocIO.DLS.WordDocument(stream, GetWFormatType(type)); - //Initialization of DocIORenderer for Word to PDF conversion - DocIORenderer render = new DocIORenderer(); - //Converts Word document into PDF document - pdfDocument = render.ConvertToPDF(doc); - doc.Close(); - break; - case "pptx": - case "pptm": - case "potx": - case "potm": - //Loads or open an PowerPoint Presentation - IPresentation pptxDoc = Presentation.Open(stream); - pdfDocument = PresentationToPdfConverter.Convert(pptxDoc); - pptxDoc.Close(); - break; - case "xlsx": - case "xls": - ExcelEngine excelEngine = new ExcelEngine(); - //Loads or open an existing workbook through Open method of IWorkbooks - IWorkbook workbook = excelEngine.Excel.Workbooks.Open(stream); - //Initialize XlsIO renderer. - XlsIORenderer renderer = new XlsIORenderer(); - //Convert Excel document into PDF document - pdfDocument = renderer.ConvertToPDF(workbook); - workbook.Close(); - break; - case "jpeg": - case "jpg": - case "png": - case "bmp": - //Add a page to the document - PdfPage page = pdfDocument.Pages.Add(); - //Create PDF graphics for the page - PdfGraphics graphics = page.Graphics; - PdfBitmap image = new PdfBitmap(stream); - //Draw the image - graphics.DrawImage(image, 0, 0); - break; - case "pdf": - string pdfBase64String = Convert.ToBase64String(bytes); - return Content("data:application/pdf;base64," + pdfBase64String); - break; - } - - } - pdfDocument.Save(outputStream); - outputStream.Position = 0; - byte[] byteArray = outputStream.ToArray(); - pdfDocument.Close(); - outputStream.Close(); - - string base64String = Convert.ToBase64String(byteArray); - return Content("data:application/pdf;base64," + base64String); - - - } - return Content("data:application/pdf;base64," + ""); - } - public static WFormatType GetWFormatType(string format) - { - if (string.IsNullOrEmpty(format)) - throw new NotSupportedException("This is not a valid Word documnet."); - switch (format.ToLower()) - { - case "dotx": - return WFormatType.Dotx; - case "docx": - return WFormatType.Docx; - case "docm": - return WFormatType.Docm; - case "dotm": - return WFormatType.Dotm; - case "dot": - return WFormatType.Dot; - case "doc": - return WFormatType.Doc; - case "rtf": - return WFormatType.Rtf; - default: - throw new NotSupportedException("This is not a valid Word documnet."); - } - } - - private string GetDocumentPath(string document) - { - string documentPath = string.Empty; - if (!System.IO.File.Exists(document)) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PdfViewer/"; - if (System.IO.File.Exists(dataPath + document)) - documentPath = dataPath + document; - } - else - { - documentPath = document; - } - return documentPath; - } - - - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/Redaction")] - public IActionResult Redaction([FromBody] Dictionary jsonObject) - { - string RedactionText = "Redacted"; - var finalbase64 = string.Empty; - if (jsonObject != null && jsonObject.ContainsKey("base64String")) - { - string base64 = jsonObject["base64String"]; - string base64String = base64.Split(new string[] { "data:application/pdf;base64," }, StringSplitOptions.None)[1]; - if (base64String != null || base64String != string.Empty) - { - byte[] byteArray = Convert.FromBase64String(base64String); - Console.WriteLine("redaction"); - PdfLoadedDocument loadedDocument = new PdfLoadedDocument(byteArray); - foreach (PdfLoadedPage loadedPage in loadedDocument.Pages) - { - List removeItems = new List(); - foreach (PdfLoadedAnnotation annotation in loadedPage.Annotations) - { - if (annotation is PdfLoadedRectangleAnnotation) - { - if (annotation.Author == "Redaction") - { - // Add the annotation to the removeItems list - removeItems.Add(annotation); - // Create a new redaction with the annotation bounds and color - PdfRedaction redaction = new PdfRedaction(annotation.Bounds, annotation.Color); - // Add the redaction to the page - loadedPage.AddRedaction(redaction); - annotation.Flatten = true; - } - if (annotation.Author == "Text") - { - // Add the annotation to the removeItems list - removeItems.Add(annotation); - // Create a new redaction with the annotation bounds and color - PdfRedaction redaction = new PdfRedaction(annotation.Bounds); - //Set the font family and font size - PdfStandardFont font = new PdfStandardFont(PdfFontFamily.Courier, 8); - //Create the appearance like repeated text in the redaction area - CreateRedactionAppearance(redaction.Appearance.Graphics, PdfTextAlignment.Left, true, new SizeF(annotation.Bounds.Width, annotation.Bounds.Height), RedactionText, font, PdfBrushes.Red); - // Add the redaction to the page - loadedPage.AddRedaction(redaction); - annotation.Flatten = true; - } - //Apply the pattern for the Redaction - if (annotation.Author == "Pattern") - { - // Add the annotation to the removeItems list - removeItems.Add(annotation); - // Create a new redaction with the annotation bounds and color - PdfRedaction redaction = new PdfRedaction(annotation.Bounds); - Syncfusion.Drawing.RectangleF rect = new Syncfusion.Drawing.RectangleF(0, 0, 8, 8); - PdfTilingBrush tillingBrush = new PdfTilingBrush(rect); - tillingBrush.Graphics.DrawRectangle(PdfBrushes.Gray, new Syncfusion.Drawing.RectangleF(0, 0, 2, 2)); - tillingBrush.Graphics.DrawRectangle(PdfBrushes.White, new Syncfusion.Drawing.RectangleF(2, 0, 2, 2)); - tillingBrush.Graphics.DrawRectangle(PdfBrushes.LightGray, new Syncfusion.Drawing.RectangleF(4, 0, 2, 2)); - tillingBrush.Graphics.DrawRectangle(PdfBrushes.DarkGray, new Syncfusion.Drawing.RectangleF(6, 0, 2, 2)); - tillingBrush.Graphics.DrawRectangle(PdfBrushes.White, new Syncfusion.Drawing.RectangleF(0, 2, 2, 2)); - tillingBrush.Graphics.DrawRectangle(PdfBrushes.LightGray, new Syncfusion.Drawing.RectangleF(2, 2, 2, 2)); - tillingBrush.Graphics.DrawRectangle(PdfBrushes.Black, new Syncfusion.Drawing.RectangleF(4, 2, 2, 2)); - tillingBrush.Graphics.DrawRectangle(PdfBrushes.LightGray, new Syncfusion.Drawing.RectangleF(6, 2, 2, 2)); - tillingBrush.Graphics.DrawRectangle(PdfBrushes.LightGray, new Syncfusion.Drawing.RectangleF(0, 4, 2, 2)); - tillingBrush.Graphics.DrawRectangle(PdfBrushes.DarkGray, new Syncfusion.Drawing.RectangleF(2, 4, 2, 2)); - tillingBrush.Graphics.DrawRectangle(PdfBrushes.LightGray, new Syncfusion.Drawing.RectangleF(4, 4, 2, 2)); - tillingBrush.Graphics.DrawRectangle(PdfBrushes.White, new Syncfusion.Drawing.RectangleF(6, 4, 2, 2)); - tillingBrush.Graphics.DrawRectangle(PdfBrushes.Black, new Syncfusion.Drawing.RectangleF(0, 6, 2, 2)); - tillingBrush.Graphics.DrawRectangle(PdfBrushes.LightGray, new Syncfusion.Drawing.RectangleF(2, 6, 2, 2)); - tillingBrush.Graphics.DrawRectangle(PdfBrushes.Black, new Syncfusion.Drawing.RectangleF(4, 6, 2, 2)); - tillingBrush.Graphics.DrawRectangle(PdfBrushes.DarkGray, new Syncfusion.Drawing.RectangleF(6, 6, 2, 2)); - rect = new Syncfusion.Drawing.RectangleF(0, 0, 16, 14); - PdfTilingBrush tillingBrushNew = new PdfTilingBrush(rect); - tillingBrushNew.Graphics.DrawRectangle(tillingBrush, rect); - //Set the pattern for the redaction area - redaction.Appearance.Graphics.DrawRectangle(tillingBrushNew, new Syncfusion.Drawing.RectangleF(0, 0, annotation.Bounds.Width, annotation.Bounds.Height)); - // Add the redaction to the page - loadedPage.AddRedaction(redaction); - annotation.Flatten = true; - } - } - else if (annotation is PdfLoadedRubberStampAnnotation) - { - if (annotation.Author == "Image") - { - Stream[] images = PdfLoadedRubberStampAnnotationExtension.GetImages(annotation as PdfLoadedRubberStampAnnotation); - // Create a new redaction with the annotation bounds and color - PdfRedaction redaction = new PdfRedaction(annotation.Bounds); - images[0].Position = 0; - PdfImage image = new PdfBitmap(images[0]); - //Apply the image to redaction area - redaction.Appearance.Graphics.DrawImage(image, new Syncfusion.Drawing.RectangleF(0, 0, annotation.Bounds.Width, annotation.Bounds.Height)); - // Add the redaction to the page - loadedPage.AddRedaction(redaction); - annotation.Flatten = true; - } - } - } - foreach (PdfLoadedAnnotation annotation1 in removeItems) - { - loadedPage.Annotations.Remove(annotation1); - } - } - loadedDocument.Redact(); - MemoryStream stream = new MemoryStream(); - loadedDocument.Save(stream); - stream.Position = 0; - loadedDocument.Close(true); - byteArray = stream.ToArray(); - finalbase64 = "data:application/pdf;base64," + Convert.ToBase64String(byteArray); - stream.Dispose(); - return Content(finalbase64); - } - } - return Content("data:application/pdf;base64," + ""); - } - - //The Method used for apply the text in the full area of redaction rectangle - private static void CreateRedactionAppearance(PdfGraphics graphics, PdfTextAlignment alignment, bool repeat, SizeF size, string overlayText, PdfFont font, PdfBrush textcolor) - { - float col = 0, row; - if (font == null) font = new PdfStandardFont(PdfFontFamily.Helvetica, 10); - int textAlignment = Convert.ToInt32(alignment); - float y = 0, x = 0, diff = 0; - Syncfusion.Drawing.RectangleF rect; - Syncfusion.Drawing.SizeF textsize = font.MeasureString(overlayText); - - if (repeat) - { - col = size.Width / textsize.Width; - row = (float)Math.Floor(size.Height / font.Size); - diff = Math.Abs(size.Width - (float)(Math.Floor(col) * textsize.Width)); - if (textAlignment == 1) - x = diff / 2; - if (textAlignment == 2) - x = diff; - for (int i = 1; i < col; i++) - { - for (int j = 0; j < row; j++) - { - rect = new Syncfusion.Drawing.RectangleF(x, y, 0, 0); - graphics.DrawString(overlayText, font, textcolor, rect); - y = y + font.Size; - } - x = x + textsize.Width; - y = 0; - } - } - else - { - diff = Math.Abs(size.Width - textsize.Width); - if (textAlignment == 1) - { - x = diff / 2; - } - if (textAlignment == 2) - { - x = diff; - } - rect = new Syncfusion.Drawing.RectangleF(x, 0, 0, 0); - graphics.DrawString(overlayText, font, textcolor, rect); - } - } - - } -} diff --git a/Controllers/PdfViewer/DocumentListController.cs b/Controllers/PdfViewer/DocumentListController.cs deleted file mode 100644 index 88f719c8..00000000 --- a/Controllers/PdfViewer/DocumentListController.cs +++ /dev/null @@ -1,45 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.EJ2.Popups; -using EJ2CoreSampleBrowser.Models; -using Syncfusion.EJ2.Navigations; -using System.ComponentModel.DataAnnotations; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class PdfViewerController : Controller - { - // GET: DefaultFunctionalities - public IActionResult DocumentList() - { - return View(); - } - } - public class UserModels - { - [Required(ErrorMessage = "UserName is Required.")] - public string UserName { get; set; } - - [Required(ErrorMessage = "Date of Birth is Required")] - public DateTime? DOB { get; set; } - - [Required(ErrorMessage = "Addresss is Required")] - public string Address { get; set; } - - [Required(ErrorMessage = "City is Required")] - public string City { get; set; } - - [Required(ErrorMessage = "State is Required")] - public string State { get; set; } - } -} \ No newline at end of file diff --git a/Controllers/PdfViewer/ESigningFormDesigner.cs b/Controllers/PdfViewer/ESigningFormDesigner.cs deleted file mode 100644 index 406ac61a..00000000 --- a/Controllers/PdfViewer/ESigningFormDesigner.cs +++ /dev/null @@ -1,31 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Hosting; -using Syncfusion.EJ2.PdfViewer; -using System.IO; -using Newtonsoft.Json; - -namespace EJ2CoreSampleBrowser.Controllers.PdfViewer -{ - - public partial class PdfViewerController : Controller - { - // GET: Default - public ActionResult ESigningFormDesigner() - { - return View(); - } - - } -} diff --git a/Controllers/PdfViewer/ESigningPdfForms.cs b/Controllers/PdfViewer/ESigningPdfForms.cs deleted file mode 100644 index 95d82ba1..00000000 --- a/Controllers/PdfViewer/ESigningPdfForms.cs +++ /dev/null @@ -1,31 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Hosting; -using Syncfusion.EJ2.PdfViewer; -using System.IO; -using Newtonsoft.Json; - -namespace EJ2CoreSampleBrowser.Controllers.PdfViewer -{ - - public partial class PdfViewerController : Controller - { - // GET: Default - public ActionResult ESigningPdfForms() - { - return View(); - } - - } -} diff --git a/Controllers/PdfViewer/FormDesignerController.cs b/Controllers/PdfViewer/FormDesignerController.cs deleted file mode 100644 index a9a1820d..00000000 --- a/Controllers/PdfViewer/FormDesignerController.cs +++ /dev/null @@ -1,31 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Hosting; -using Syncfusion.EJ2.PdfViewer; -using System.IO; -using Newtonsoft.Json; - -namespace EJ2CoreSampleBrowser.Controllers.PdfViewer -{ - - public partial class PdfViewerController : Controller - { - // GET: Default - public ActionResult FormDesigner() - { - return View(); - } - - } -} diff --git a/Controllers/PdfViewer/FormFillingController.cs b/Controllers/PdfViewer/FormFillingController.cs deleted file mode 100644 index 2d4b7c0c..00000000 --- a/Controllers/PdfViewer/FormFillingController.cs +++ /dev/null @@ -1,31 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Hosting; -using Syncfusion.EJ2.PdfViewer; -using System.IO; -using Newtonsoft.Json; - -namespace EJ2CoreSampleBrowser.Controllers.PdfViewer -{ - - public partial class PdfViewerController : Controller - { - // GET: Default - public ActionResult FormFilling() - { - return View(); - } - - } -} \ No newline at end of file diff --git a/Controllers/PdfViewer/HandWrittenSignatureController.cs b/Controllers/PdfViewer/HandWrittenSignatureController.cs deleted file mode 100644 index 47fb07a1..00000000 --- a/Controllers/PdfViewer/HandWrittenSignatureController.cs +++ /dev/null @@ -1,31 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Hosting; -using Syncfusion.EJ2.PdfViewer; -using System.IO; -using Newtonsoft.Json; - -namespace EJ2CoreSampleBrowser.Controllers.PdfViewer -{ - - public partial class PdfViewerController : Controller - { - // GET: Default - public ActionResult HandWrittenSignature() - { - return View(); - } - - } -} \ No newline at end of file diff --git a/Controllers/PdfViewer/InvisibleDigitalSignatureController.cs b/Controllers/PdfViewer/InvisibleDigitalSignatureController.cs deleted file mode 100644 index 1b87563c..00000000 --- a/Controllers/PdfViewer/InvisibleDigitalSignatureController.cs +++ /dev/null @@ -1,19 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser_NET6.Controllers.PdfViewer -{ - public class PdfViewerController : Controller - { - public ActionResult InvisibleDigitalSignature() - { - return View(); - } - } -} diff --git a/Controllers/PdfViewer/InvisibleSignatureController.cs b/Controllers/PdfViewer/InvisibleSignatureController.cs deleted file mode 100644 index 031c0ce8..00000000 --- a/Controllers/PdfViewer/InvisibleSignatureController.cs +++ /dev/null @@ -1,19 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser_NET6.Controllers.PdfViewer -{ - public class PdfViewerController : Controller - { - public ActionResult InvisibleSignature() - { - return View(); - } - } -} diff --git a/Controllers/PdfViewer/MultiFormatViewerController.cs b/Controllers/PdfViewer/MultiFormatViewerController.cs deleted file mode 100644 index ab141948..00000000 --- a/Controllers/PdfViewer/MultiFormatViewerController.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Web; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.EJ2.Popups; -using EJ2CoreSampleBrowser.Models; -using Syncfusion.EJ2.Navigations; -using System.ComponentModel.DataAnnotations; - -namespace EJ2CoreSampleBrowser.Controllers.Dialog -{ - public partial class PdfViewerController : Controller - { - public IActionResult MultiFormatViewer() - { - return View(); - } - } -} \ No newline at end of file diff --git a/Controllers/PdfViewer/OrganizePagesController.cs b/Controllers/PdfViewer/OrganizePagesController.cs deleted file mode 100644 index 164f19a6..00000000 --- a/Controllers/PdfViewer/OrganizePagesController.cs +++ /dev/null @@ -1,31 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Hosting; -using Syncfusion.EJ2.PdfViewer; -using System.IO; -using Newtonsoft.Json; - -namespace EJ2CoreSampleBrowser.Controllers.PdfViewer -{ - - public partial class PdfViewerController : Controller - { - // GET: Default - public ActionResult OrganizePages() - { - return View(); - } - - } -} \ No newline at end of file diff --git a/Controllers/PdfViewer/ProgrammaticOperationsController.cs b/Controllers/PdfViewer/ProgrammaticOperationsController.cs deleted file mode 100644 index 9567cc51..00000000 --- a/Controllers/PdfViewer/ProgrammaticOperationsController.cs +++ /dev/null @@ -1,36 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Hosting; -using Syncfusion.EJ2.PdfViewer; -using System.IO; -using Newtonsoft.Json; -using Microsoft.AspNetCore.Cors; - -namespace EJ2CoreSampleBrowser.Controllers.PdfViewer -{ - - public partial class PdfViewerController : Controller - { - // GET: Default - public ActionResult ProgrammaticOperations() - { - return View(); - } - } -} \ No newline at end of file diff --git a/Controllers/PdfViewer/ReadOnlyController.cs b/Controllers/PdfViewer/ReadOnlyController.cs deleted file mode 100644 index 8790becc..00000000 --- a/Controllers/PdfViewer/ReadOnlyController.cs +++ /dev/null @@ -1,31 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Hosting; -using Syncfusion.EJ2.PdfViewer; -using System.IO; -using Newtonsoft.Json; - -namespace EJ2CoreSampleBrowser.Controllers.PdfViewer -{ - - public partial class PdfViewerController : Controller - { - // GET: Default - public ActionResult ReadOnly() - { - return View(); - } - - } -} \ No newline at end of file diff --git a/Controllers/PdfViewer/RedactionController.cs b/Controllers/PdfViewer/RedactionController.cs deleted file mode 100644 index 67ca5370..00000000 --- a/Controllers/PdfViewer/RedactionController.cs +++ /dev/null @@ -1,42 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Hosting; -using Syncfusion.EJ2.PdfViewer; -using System.IO; -using Newtonsoft.Json; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Pdf.Interactive; -using Syncfusion.Pdf.Parsing; -using Syncfusion.Pdf.Redaction; -using Syncfusion.Pdf; -using Syncfusion.Drawing; -using Microsoft.AspNetCore.Cors; - -namespace EJ2CoreSampleBrowser.Controllers.PdfViewer -{ - - public partial class PdfViewerController : Controller - { - // GET: Default - public ActionResult Redaction() - { - return View(); - } - - - - - - } -} \ No newline at end of file diff --git a/Controllers/PdfViewer/RightToLeftController.cs b/Controllers/PdfViewer/RightToLeftController.cs deleted file mode 100644 index bc39ca8a..00000000 --- a/Controllers/PdfViewer/RightToLeftController.cs +++ /dev/null @@ -1,31 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Hosting; -using Syncfusion.EJ2.PdfViewer; -using System.IO; -using Newtonsoft.Json; - -namespace EJ2CoreSampleBrowser.Controllers.PdfViewer -{ - - public partial class PdfViewerController : Controller - { - // GET: Default - public ActionResult RightToLeft() - { - return View(); - } - - } -} \ No newline at end of file diff --git a/Controllers/PowerPoint/ImportDataController.cs b/Controllers/PowerPoint/ImportDataController.cs deleted file mode 100644 index 9a4f8acc..00000000 --- a/Controllers/PowerPoint/ImportDataController.cs +++ /dev/null @@ -1,353 +0,0 @@ -#region Copyright Syncfusion Inc. 2001-2018. -// Copyright Syncfusion Inc. 2001-2018. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using System.IO; -using Syncfusion.Presentation; -using Microsoft.AspNetCore.Hosting; -using EJ2CoreSampleBrowser.Models; -using Syncfusion.EJ2.Base; -using System.Collections.Generic; -using System.Collections; -using Syncfusion.OfficeChart; -using System.Globalization; -using Microsoft.Extensions.Caching.Memory; -#if REDIS -using Microsoft.Extensions.Caching.Distributed; -#endif - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class PowerPointController : Controller - { - private IMemoryCache _cache; - private List order1 = new List(); - private readonly IWebHostEnvironment _hostingEnvironment; -#if REDIS - private IDistributedCache _distributedCache; - public PowerPointController(IWebHostEnvironment hostingEnvironment, IMemoryCache memoryCache, IDistributedCache distributedCache) -#else - public PowerPointController(IWebHostEnvironment hostingEnvironment, IMemoryCache memoryCache) -#endif - { - _cache = memoryCache; -#if REDIS - _distributedCache = distributedCache; -#endif - _hostingEnvironment = hostingEnvironment; - } - #region Action Methods - /// - /// Imports the data to the Grid. - /// - /// - public ActionResult ImportData() - { - PresentationData.presentationData = new PresentationData().GetAllRecords(); - order1.Add(new DataPosition() { text = "Top" }); - order1.Add(new DataPosition() { text = "Bottom" }); - ViewData["ddData"] = order1; - return View(); - } - /// - /// - /// - /// Button name to perfrom specific operation - /// Radio button group value - /// - [HttpPost] - public ActionResult Export(string Group) - { - //Instatiate the presentation - IPresentation presentation = null; - //Checks whether the export option is table - if (Group == "Table") - { - //Gets the generated presentation after importing the data to the presentation slide as table - presentation = CreateTableFromGrid(); - } - else if (Group == "Chart") - { - //Gets the generated presentation after importing the data to the presentation slide as chart - presentation = CreateChartFromGrid(); - } - - MemoryStream ms = new MemoryStream(); - - //Saves the presentation to the memory stream. - presentation.Save(ms); - //Set the position of the stream to beginning. - ms.Position = 0; - - //Initialize the file stream to download the presentation. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/vnd.openxmlformats-officedocument.presentationml.presentation"); - //Set the file name. - fileStreamResult.FileDownloadName = Group + ".pptx"; - - return fileStreamResult; - - } - /// - /// Update the edited data to the Grid - /// - /// - /// - public ActionResult Update([FromBody] CRUDModel model) - { - var ord = model.Value; - PresentationData val = PresentationData.presentationData.Where(or => or.Year == ord.Year).FirstOrDefault(); - if(val != null) - { - val.Year = ord.Year; - val.Jan = ord.Jan; - val.Feb = ord.Feb; - val.Mar = ord.Mar; - val.Apr = ord.Apr; - val.May = ord.May; - } - return Json(model.Value); - } - /// - /// Delete the specific data from the grid - /// - /// - /// - public ActionResult Delete([FromBody] CRUDModel model) - { - var ord = model.Value; - var key = model.key; - PresentationData.presentationData.Remove(PresentationData.presentationData.Where(or => or.Year == int.Parse(key.ToString())).FirstOrDefault()); - IEnumerable DataSource = PresentationData.presentationData; - return Json(DataSource); - } - /// - /// Insert the data into the start position of the grid - /// - /// - /// - public ActionResult Insert([FromBody] CRUDModel model) - { - int insertPosition = 0; - string position = PresentationData.dropBoxValue; - if (position == "Bottom") - { - insertPosition = PresentationData.presentationData.Count; - } - else - { - insertPosition = 0; - } - var ord = model.Value; - PresentationData.presentationData.Insert(insertPosition, ord); - return Json(model.Value); - } - /// - /// Gets the data from server and update it to the grid - /// - /// - /// - public ActionResult UrlDatasource([FromBody] DataManagerRequest dm) - { - //Gets the data - IEnumerable DataSource = PresentationData.presentationData; - //Create a new instance of DataOperations - DataOperations operation = new DataOperations(); - //Gets the count of the data - int count = DataSource.Cast().Count(); - if (dm.Skip != 0) - { - DataSource = operation.PerformSkip(DataSource, dm.Skip); - } - if (dm.Take != 0) - { - DataSource = operation.PerformTake(DataSource, dm.Take); - } - return dm.RequiresCounts ? Json(new { result = DataSource, count = count }) : Json(DataSource); - - } - /// - /// Gets the current position of Grid to add data into the grid - /// - /// Gets the position of the value should get added from the View - /// - public IActionResult Dropdown([FromBody] CRUDModel model) - { - var value = model.rowPosition; - PresentationData.dropBoxValue = value; - return View(); - } - #endregion - #region Helper Methods - /// - /// Exports the Data as chart to the PowerPoint Slide - /// - /// Returns the generated presentation - private IPresentation CreateChartFromGrid() - { - string basePath = _hostingEnvironment.WebRootPath; - FileStream fileStreamInput = new FileStream(basePath + @"/PowerPoint/DataTemplate.pptx", FileMode.Open, FileAccess.Read); - IPresentation presentation = Presentation.Open(fileStreamInput); - foreach (ISlide slide in presentation.Slides) - { - //Iterate each shape in the slide - for (int i = 0; i < slide.Shapes.Count; i++) - { - //Retrieves the shape - IShape shape = slide.Shapes[i] as IShape; - //Removes the shape from the shape collection. - slide.Shapes.Remove(shape); - } - } - int slideIndex = 0; - //Clone the slide - ISlide clonedSlide = presentation.Slides[0].Clone(); - //Iterate each data of the Grid - foreach (PresentationData presentationData in PresentationData.presentationData) - { - if (slideIndex > 0) - { - presentation.Slides.Add(clonedSlide); - } - //Gets the slide of the presentation - ISlide slide = slide = presentation.Slides[slideIndex]; - //Adds chart to the slide with position and size - IPresentationChart chart = slide.Charts.AddChart(100, 10, 700, 500); - //Set the first row of the chart values - chart.ChartData.SetValue(1, 2, "Jan"); - chart.ChartData.SetValue(1, 3, "Feb"); - chart.ChartData.SetValue(1, 4, "Mar"); - chart.ChartData.SetValue(1, 5, "Apr"); - chart.ChartData.SetValue(1, 6, "May"); - //Initalize the row index - int rowIndex = 2; - int?[] array = new int?[] { presentationData.Year, presentationData.Jan, presentationData.Feb, presentationData.Mar, presentationData.Apr, presentationData.May }; - for (int i = 0; i < array.Length; i++) - { - //Initialize the column index - int columnIndex = i + 1; - //Set the value for chart - chart.ChartData.SetValue(rowIndex, columnIndex, array[i].Value); - if (columnIndex == array.Length) - { - //Creates a new chart series with the name - IOfficeChartSerie series = chart.Series.Add(array[0].Value.ToString()); - - //Sets the data range of chart series � start row, start column, end row, end column - series.Values = chart.ChartData[2, 2, 2, 6]; - - //Sets the data range of the category axis - chart.PrimaryCategoryAxis.CategoryLabels = chart.ChartData[1, 2, 1, 6]; - - //Sets the type of the chart - chart.ChartType = OfficeChartType.Pie; - - //Sets a value indicates wherher to fill style is visible or not - chart.ChartArea.Fill.Visible = false; - - IOfficeChartFrameFormat chartPlotArea = chart.PlotArea; - //Sets a value indicates wherher to fill style is visible or not - chartPlotArea.Fill.Visible = false; - - //Specifies the chart title - chart.ChartTitle = "Sales details of the year " + array[0].Value.ToString(); - - //Sets the legend position - chart.Legend.Position = OfficeLegendPosition.Right; - } - } - rowIndex++; - slideIndex++; - } - return presentation; - } - - /// - /// Exports the Data as table to the PowerPoint Slide - /// - /// Returns the generated presentation - private IPresentation CreateTableFromGrid() - { - string basePath = _hostingEnvironment.WebRootPath; - FileStream fileStreamInput = new FileStream(basePath + @"/PowerPoint/DataTemplate.pptx", FileMode.Open, FileAccess.Read); - IPresentation presentation = Presentation.Open(fileStreamInput); - //Clone the first slide of the presentation - ISlide clonedSlide = presentation.Slides[0].Clone(); - //Initialize the slide index value - int slideIndex = 0; - //Create a new instance of slide - ISlide slide = null; - //Iterate and get data from Grid - foreach (PresentationData presentationData in PresentationData.presentationData) - { - //Fetch all the grid details to array - int?[] array = new int?[] { presentationData.Year, presentationData.Jan, presentationData.Feb, presentationData.Mar, presentationData.Apr, presentationData.May }; - //Check whether the current slide is the first slide or not - if (slideIndex > 0) - { - //Adds the cloned slide to the presentation - presentation.Slides.Add(clonedSlide); - } - //Gets the slide based on slide index from presentation - slide = presentation.Slides[slideIndex]; - //Checks whether the slide has table - if (slide.Tables.Count > 0) - { - //Gets the first occurrence of table - ITable oldTable = slide.Tables[0]; - //Iterate each data from the grid - for (int i = 0; i < array.Length; i++) - { - //Gets the current instance of table cell - ICell cell = oldTable[i, 1]; - //Checks whether the current cell is first row and second column - if (i == 0) - { - //Add paragraph to the cell - cell.TextBody.Paragraphs[0].Text = array[i].Value.ToString(); - } - else - { - //Gets the month name - string monthName = CultureInfo.CurrentCulture.DateTimeFormat.GetMonthName(i); - //Add paragraph to the cell - cell.TextBody.Paragraphs[0].Text = monthName + " - " + array[i].Value.ToString(); - } - //Set the font size of the paragrpah - cell.TextBody.Paragraphs[0].Font.FontSize = 24; - } - } - slideIndex++; - } - return presentation; - } - #endregion - #region Helper Class - /// - /// Gets the data from the Grid - /// - public class CRUDModel - { - public PresentationData Value { get; set; } - - public int key { get; set; } - - public string action { get; set; } - - public string rowPosition { get; set; } - } - /// - /// Position of Data in the Grid - /// - public class DataPosition - { - //Gets ot sets the position of the data in Grid - public string text { get; set; } - - } - #endregion - } -} diff --git a/Controllers/PowerPoint/PowerPointViewerController.cs b/Controllers/PowerPoint/PowerPointViewerController.cs deleted file mode 100644 index 2c33cb9f..00000000 --- a/Controllers/PowerPoint/PowerPointViewerController.cs +++ /dev/null @@ -1,196 +0,0 @@ -#region Copyright Syncfusion Inc. 2001-2022. -// Copyright Syncfusion Inc. 2001-2022. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using System.IO; -using Syncfusion.Presentation; -using Microsoft.AspNetCore.Hosting; -using Syncfusion.PresentationRenderer; -using Syncfusion.Pdf; -using Syncfusion.Office; -using System.Collections.Generic; -using Syncfusion.EJ2.PdfViewer; -using System; -using Newtonsoft.Json; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class PowerPointController : Controller - { - public IActionResult PowerPointViewer() - { - return View(); - } - [HttpGet] - [Route("api/[controller]/ConvertPPTXToPDF")] - //Get action for obtaing the byte array of the PDF document - public IActionResult ConvertPPTXToPDF(string fileName) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - MemoryStream stream = new MemoryStream(); - if (!string.IsNullOrEmpty(fileName)) - { - string documentPath = GetDocumentPath(fileName); - if(!string.IsNullOrEmpty(documentPath)) - { - byte[] bytes = System.IO.File.ReadAllBytes(documentPath); - stream = new MemoryStream(bytes); - } - else - { - return this.Content(fileName + " is not found"); - } - } - - try - { - //Open the PowerPoint presentation using Syncfusion Presentation library - IPresentation presentation = Presentation.Open(stream); - //Convert a PowerPoint presentation as PDF to view the generated PDF file in our Syncfusion PdfViewer - PdfDocument pdfDocument = PresentationToPdfConverter.Convert(presentation); - stream.Dispose(); - //Save the converted Pdf document to get a physical DOM of PDF document. - stream = new MemoryStream(); - pdfDocument.Save(stream); - //Dispose the pdf and presentation instance. - pdfDocument.Dispose(); - presentation.Dispose(); - //Reset the pdf stream position. - stream.Position = 0; - } - catch - { - - } - // Return the byte array as a file - return File(stream.ToArray(), "application/pdf", fileName); - } - [HttpPost] - [AcceptVerbs("Post")] - [Route("api/[controller]/ConvertPPTXToPDFCustomer")] - public IActionResult ConvertPPTXToPDFCustomer([FromBody] Dictionary jsonObject) - { - string base64 = jsonObject["data"]; - string data = base64.Split(',')[1]; - MemoryStream stream = new MemoryStream(); - byte[] byteArray = Convert.FromBase64String(data); - stream = new MemoryStream(byteArray); - try - { - //Open the PowerPoint presentation using Syncfusion Presentation library - IPresentation presentation = Presentation.Open(stream); - //Convert a PowerPoint presentation as PDF to view the generated PDF file in our Syncfusion PdfViewer - PdfDocument pdfDocument = PresentationToPdfConverter.Convert(presentation); - stream.Dispose(); - //Save the converted Pdf document to get a physical DOM of PDF document. - stream = new MemoryStream(); - pdfDocument.Save(stream); - //Dispose the pdf and presentation instance. - pdfDocument.Dispose(); - presentation.Dispose(); - //Reset the pdf stream position. - stream.Position = 0; - } - catch - { - // Handle exceptions (if needed) - } - // Convert the updated PDF stream to a base64-encoded string - string updatedDocumentBase = Convert.ToBase64String(stream.ToArray()); - string documentBase = "data:application/pdf;base64," + updatedDocumentBase; - return Content(documentBase); - } - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/Unload")] - public IActionResult Unload([FromBody] Dictionary jsonObject) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - pdfviewer.ClearCache(jsonObject); - return this.Content("Document cache is cleared"); - } - - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/RenderPdfPages")] - public IActionResult RenderPdfPages([FromBody] Dictionary jsonObject) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - object jsonResult = pdfviewer.GetPage(jsonObject); - return Content(JsonConvert.SerializeObject(jsonResult)); - } - - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/RenderThumbnailImages")] - public IActionResult RenderThumbnailImages([FromBody] Dictionary jsonObject) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - object result = pdfviewer.GetThumbnailImages(jsonObject); - return Content(JsonConvert.SerializeObject(result)); - } - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/Download")] - public IActionResult Download([FromBody] Dictionary jsonObject) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - string documentBase = pdfviewer.GetDocumentAsBase64(jsonObject); - return Content(documentBase); - } - [AcceptVerbs("Post")] - [HttpPost] - [Route("api/[controller]/PrintImages")] - public IActionResult PrintImages([FromBody] Dictionary jsonObject) - { -#if REDIS - PdfRenderer pdfviewer = new PdfRenderer(_cache, _distributedCache); -#else - PdfRenderer pdfviewer = new PdfRenderer(_cache); -#endif - object pageImage = pdfviewer.GetPrintImage(jsonObject); - return Content(JsonConvert.SerializeObject(pageImage)); - } - private string GetDocumentPath(string document) - { - string documentPath = string.Empty; - if (!System.IO.File.Exists(document)) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PowerPoint/"; - if (System.IO.File.Exists(dataPath + document)) - documentPath = dataPath + document; - } - else - { - documentPath = document; - } - return documentPath; - } - } -} diff --git a/Controllers/Spreadsheet/CellDataBindingController.cs b/Controllers/Spreadsheet/CellDataBindingController.cs deleted file mode 100644 index a36d311a..00000000 --- a/Controllers/Spreadsheet/CellDataBindingController.cs +++ /dev/null @@ -1,23 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class SpreadsheetController : Controller - { - public IActionResult CellDataBinding() - { - return View(); - } - } -} \ No newline at end of file diff --git a/Controllers/Spreadsheet/CellFormattingController.cs b/Controllers/Spreadsheet/CellFormattingController.cs deleted file mode 100644 index 19e67bd2..00000000 --- a/Controllers/Spreadsheet/CellFormattingController.cs +++ /dev/null @@ -1,42 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class SpreadsheetController : Controller - { - public IActionResult CellFormatting() - { - List orderDetails = new List() - { - new { OrderID= 10248, CustomerName= "Paul Henriot", OrderDate= "07-04-1996", Address= "59 rue de l Abbaye", City= "Reims", PostalCode= "51100", Country= "France", Status= "Delivered", Freight= "32.38"}, - new { OrderID= 10249, CustomerName= "Karin Josephs", OrderDate= "07-05-1996", Address= "Luisenstr. 48", City= "Münster", PostalCode= "44087", Country= "Germany", Status= "Delivered", Freight= "11.61"}, - new { OrderID= 10250, CustomerName= "Mario Pontes", OrderDate= "07-08-1996", Address= "Rua do Paço, 67", City= "Rio de Janeiro", PostalCode= "05454876", Country= "Brazil", Status= "Shipped", Freight= "65.83"}, - new { OrderID= 10251, CustomerName= "Mary Saveley", OrderDate= "07-04-1996", Address= "2, rue du Commerce", City= "Lyon", PostalCode= "69004", Country= "France", Status= "Delivered", Freight= "41.34"}, - new { OrderID= 10252, CustomerName= "Pascale Cartrain", OrderDate= "07-08-1996", Address= "Boulevard Tirou, 255", City= "Charleroi", PostalCode= "6000", Country= "Belgium", Status= "Shipped", Freight= "51.3"}, - new { OrderID= 10253, CustomerName= "Carlos Hernández", OrderDate= "07-01-1996", Address= "Rua do Paço, 67", City= "Rio de Janeiro", PostalCode= "05454876", Country= "Brazil", Status= "Cancelled", Freight= "58.17"}, - new { OrderID= 10254, CustomerName= "Yang Wang", OrderDate= "07-18-1996", Address= "Hauptstr. 31", City= "Bern", PostalCode= "3012", Country= "Switzerland", Status= "Pending", Freight= "22.98"}, - new { OrderID= 10255, CustomerName= "Antonio Moreno", OrderDate= "07-07-1996", Address= "Starenweg 5", City= "Genève", PostalCode= "1204", Country= "Switzerland", Status= "Delivered", Freight= "148.33"}, - new { OrderID= 10256, CustomerName= "Paula Parente", OrderDate= "07-10-1996", Address= "Rua do Mercado, 12", City= "Resende", PostalCode= "08737363", Country= "Brazil", Status= "Shipped", Freight= "13.97"}, - new { OrderID= 10257, CustomerName= "Michael Holz", OrderDate= "07-09-1996", Address= "Carrera 22 con Ave. Carlos Soublette", City= "San Cristóbal", PostalCode= "5022", Country= "Venezuela", Status= "Delivered", Freight= "81.91"}, - new { OrderID= 10258, CustomerName= "Roland Mendel", OrderDate= "07-03-1996", Address= "Kirchgasse 6", City= "Graz", PostalCode= "8010", Country= "Austria", Status= "Cancelled", Freight= "140.51"}, - new { OrderID= 10259, CustomerName= "Francisco Chang", OrderDate= "07-22-1996", Address= "Sierras de Granada 9993", City= "México D.F.", PostalCode= "05022", Country= "Mexico", Status= "Pending", Freight= "3.25"}, - new { OrderID= 10260, CustomerName= "Henriette Pfalzheim", OrderDate= "07-12-1996", Address= "Mehrheimerstr. 369", City= "Köln", PostalCode= "50739", Country= "Germany", Status= "Delivered", Freight= "55.09"}, - new { OrderID= 10261, CustomerName= "Bernardo Batista", OrderDate= "07-15-1996", Address= "Rua da Panificadora, 12", City= "Rio de Janeiro", PostalCode= "02389673", Country= "Brazil", Status= "Shipped", Freight= "3.05"}, - new { OrderID= 10262, CustomerName= "Paula Wilson", OrderDate= "07-08-1996", Address= "2817 Milton Dr.", City= "Albuquerque", PostalCode= "87110", Country= "USA", Status= "Delivered", Freight= "48.29"} - }; - ViewData["orderDetails"] = orderDetails; - return View(); - } - } -} \ No newline at end of file diff --git a/Controllers/Spreadsheet/CellTemplatesController.cs b/Controllers/Spreadsheet/CellTemplatesController.cs deleted file mode 100644 index d387c893..00000000 --- a/Controllers/Spreadsheet/CellTemplatesController.cs +++ /dev/null @@ -1,25 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Http; -using Syncfusion.EJ2.Spreadsheet; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class SpreadsheetController : Controller - { - public IActionResult CellTemplates() - { - return View(); - } - } -} \ No newline at end of file diff --git a/Controllers/Spreadsheet/ChartController.cs b/Controllers/Spreadsheet/ChartController.cs deleted file mode 100644 index 14da4a80..00000000 --- a/Controllers/Spreadsheet/ChartController.cs +++ /dev/null @@ -1,48 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Http; -using Syncfusion.EJ2.Spreadsheet; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class SpreadsheetController : Controller - { - public IActionResult Chart() - { - List data = new List() - { - new { Country= "USA", Year2017= "18.00", Year2018= "20.40", Year2019= "21.42", Year2020= "19.48" }, - new { Country= "China", Year2017= "11.00", Year2018= "14.00", Year2019= "14.32", Year2020= "12.23" }, - new { Country= "Japan", Year2017= "4.4", Year2018= "5.10", Year2019= "5.08", Year2020= "4.87" }, - new { Country= "Germany", Year2017= "3.3", Year2018= "4.20", Year2019= "3.84", Year2020= "3.69" }, - new { Country= "India", Year2017= "2.00", Year2018= "2.85", Year2019= "2.87", Year2020= "2.65" }, - new { Country= "UK", Year2017= "2.90", Year2018= "2.94", Year2019= "2.82", Year2020= "2.63" }, - new { Country= "France", Year2017= "2.40", Year2018= "2.93", Year2019= "2.71", Year2020= "2.58" } - }; - ViewData["GDPData"] = data; - return View(); - } - - public IActionResult ChartOpen(IFormCollection openRequest) - { - OpenRequest open = new OpenRequest(); - open.File = openRequest.Files[0]; - return Content(Workbook.Open(open)); - } - - public IActionResult ChartSave(SaveSettings saveSettings) - { - return Workbook.Save(saveSettings); - } - } -} \ No newline at end of file diff --git a/Controllers/Spreadsheet/ConditionalFormattingController.cs b/Controllers/Spreadsheet/ConditionalFormattingController.cs deleted file mode 100644 index 6d9e43a8..00000000 --- a/Controllers/Spreadsheet/ConditionalFormattingController.cs +++ /dev/null @@ -1,57 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Http; -using Syncfusion.EJ2.Spreadsheet; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class SpreadsheetController : Controller - { - public IActionResult ConditionalFormatting() - { - List data = new List() - { - new { ItemCode="AG940Z", ItemName="Laser Printer", Quantity="144", PurchasePrice="169.50", SellingPrice="172.00", Profit= "=E3-D3", LastUpdated ="05-25-19", Rating="4.5" }, - new { ItemCode="BJ120K", ItemName="Scientific Calculator", Quantity="116", PurchasePrice="21.80", SellingPrice="23.00", Profit= "=E4-D4", LastUpdated="07-28-19", Rating="4.0" }, - new { ItemCode="BC120M", ItemName="Wired Keyboard", Quantity="438", PurchasePrice="26.80", SellingPrice="29.00", Profit= "=E5-D5", LastUpdated="03-30-20", Rating="4.25" }, - new { ItemCode="BS121L", ItemName="Memory Card", Quantity="486", PurchasePrice="23.50", SellingPrice="25.00", Profit= "=E6-D6", LastUpdated ="08-20-19", Rating="3.5" }, - new { ItemCode="BU121K", ItemName="Coffee Maker", Quantity="176", PurchasePrice="56.50", SellingPrice="59.00", Profit= "=E7-D7", LastUpdated ="02-02-20", Rating="4.5" }, - new { ItemCode="BD121M", ItemName="Table Lamp", Quantity="0", PurchasePrice="22.50", SellingPrice="25.00", Profit= "=E8-D8", LastUpdated ="11-11-19", Rating="5.0" }, - new { ItemCode="AT992X", ItemName="Document Scanner", Quantity="116", PurchasePrice="175.00", SellingPrice="177.00", Profit= "=E9-D9", LastUpdated ="04-13-19", Rating="4.75" }, - new { ItemCode="AP992Z", ItemName="Gaming Headset", Quantity="58", PurchasePrice="32.00", SellingPrice="35.00", Profit= "=E10-D10", LastUpdated ="02-14-20", Rating="4.4" }, - new { ItemCode="AW920X", ItemName="Laptop Bag", Quantity="232", PurchasePrice="18.90", SellingPrice="19.00", Profit= "=E11-D11", LastUpdated ="06-10-19", Rating="3.9" }, - new { ItemCode="AQ920Z", ItemName="Table Fan", Quantity="405", PurchasePrice="33.90", SellingPrice="35.00", Profit= "=E12-D12", LastUpdated ="05-28-19", Rating="3.75" }, - new { ItemCode="AE940X", ItemName="Electric Mop", Quantity="47", PurchasePrice="153.50", SellingPrice="155.00", Profit= "=E13-D13", LastUpdated ="12-18-19", Rating="3.9" }, - new { ItemCode="UI152C", ItemName="Smart LED TV", Quantity="232", PurchasePrice="201.25", SellingPrice="204.00", Profit= "=E14-D14", LastUpdated ="03-13-20", Rating="4.35" }, - new { ItemCode="UD152V", ItemName="Robotic Vacuum Cleaner", Quantity="210", PurchasePrice="182.25", SellingPrice="185.00", Profit= "=E15-D15", LastUpdated ="08-26-19", Rating="4.0" }, - new { ItemCode="BK120L", ItemName="Gaming Mouse", Quantity="225", PurchasePrice="34.8", SellingPrice="38", Profit= "=E16-D16", LastUpdated ="01-12-20", Rating="4.2" }, - new { ItemCode="UF162V", ItemName="Chair", Quantity="373", PurchasePrice="104.800", SellingPrice="108.00", Profit= "=E17-D17", LastUpdated ="04-12-19", Rating="3.25" }, - new { ItemCode="UR162C", ItemName="Welding Gloves", Quantity="216", PurchasePrice="19.00", SellingPrice="21.00", Profit= "=E18-D18", LastUpdated ="11-22-19", Rating="3.85" }, - }; - ViewData["ConditionalFormattingData"] = data; - return View(); - } - - public IActionResult ConditionalFormatOpen(IFormCollection openRequest) - { - OpenRequest open = new OpenRequest(); - open.File = openRequest.Files[0]; - return Content(Workbook.Open(open)); - } - - public IActionResult ConditionalFormatSave(SaveSettings saveSettings) - { - return Workbook.Save(saveSettings); - } - } -} \ No newline at end of file diff --git a/Controllers/Spreadsheet/DataValidationController.cs b/Controllers/Spreadsheet/DataValidationController.cs deleted file mode 100644 index 65fa1e56..00000000 --- a/Controllers/Spreadsheet/DataValidationController.cs +++ /dev/null @@ -1,37 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class SpreadsheetController : Controller - { - public IActionResult DataValidation() - { - List data = new List() - { - new { EmployeeId= "1001", EmployeeName= "Vin Disel", Date= "04-05-2021", Weekday= "Mon", TimeIn= "8:00 AM", TimeOut= "10:00 PM", HoursWorked= "14", Basic= "=G4*30", GrossPay= "=Sum(H4 + ((G4-8)*15))" }, - new { EmployeeId= "1002", EmployeeName= "Steve", Date= "04-06-2021", Weekday= "Tue", TimeIn= "8:00 AM", TimeOut= "6:00 PM", HoursWorked= "10", Basic= "=G5*30", GrossPay= "=Sum(H5 + ((G5-8)*15))" }, - new { EmployeeId= "1003", EmployeeName= "Paul Waulker", Date= "04-06-2021", Weekday= "Tue", TimeIn= "11:00 AM", TimeOut= "4:00 PM", HoursWorked= "9", Basic= "=G6*30", GrossPay= "=Sum(H6 + ((G6-8)*15))" }, - new { EmployeeId= "1004", EmployeeName= "John", Date= "04-08-2021", Weekday= "Thu", TimeIn= "8:00 AM", TimeOut= "4:00 PM", HoursWorked= "8", Basic= "=G7*30", GrossPay= "=Sum(H7 + ((G7-8)*15))" }, - new { EmployeeId= "1005", EmployeeName= "Sam", Date= "04-09-2021", Weekday= "Fri", TimeIn= "7:00 AM", TimeOut= "6:00 PM", HoursWorked= "11", Basic= "=G8*30", GrossPay= "=Sum(H8 + ((G8-8)*15))" }, - new { EmployeeId= "1006", EmployeeName= "Chistoper", Date= "04-12-2021", Weekday= "Mon", TimeIn= "10:00 AM", TimeOut= "6:00 PM", HoursWorked= "8", Basic= "=G9*30", GrossPay= "=Sum(H9 + ((G9-8)*15))" }, - new { EmployeeId= "1007", EmployeeName= "Adrew", Date= "04-13-2021", Weekday= "Tue", TimeIn= "10:00 AM", TimeOut= "7:00 PM", HoursWorked= "9", Basic= "=G10*30", GrossPay= "=Sum(H10 + ((G10-8)*15))" }, - new { EmployeeId= "1004", EmployeeName= "John", Date= "04-14-2021", Weekday= "Wed", TimeIn= "8:00 AM", TimeOut= "4:00 PM", HoursWorked= "8", Basic= "=G11*30", GrossPay= "=Sum(H11 + ((G11-8)*15))" }, - new { EmployeeId= "1009", EmployeeName= "Bravo", Date= "04-14-2021", Weekday= "Wed", TimeIn= "11:00 AM", TimeOut= "8:00 PM", HoursWorked= "9", Basic= "=G12*30", GrossPay= "=Sum(H12 + ((G12-8)*15))" }, - new { EmployeeId= "1002", EmployeeName= "Steve", Date= "04-15-2021", Weekday= "Thu", TimeIn= "9:00 AM", TimeOut= "8:00 PM", HoursWorked= "11", Basic= "=G13*30", GrossPay= "=Sum(H13 + ((G13-8)*15))" } - }; - ViewData["GrossPay"] = data; - return View(); - } - } -} \ No newline at end of file diff --git a/Controllers/Spreadsheet/DefaultFunctionalitiesController.cs b/Controllers/Spreadsheet/DefaultFunctionalitiesController.cs deleted file mode 100644 index 4af4766d..00000000 --- a/Controllers/Spreadsheet/DefaultFunctionalitiesController.cs +++ /dev/null @@ -1,80 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Http; -using Syncfusion.EJ2.Spreadsheet; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class SpreadsheetController : Controller - { - public IActionResult DefaultFunctionalities() - { - List data = new List() - { - new { CustomerName= "Romona Heaslip", Model= "Taurus", Color= "Aquamarine", PaymentMode= "Debit Card", DeliveryDate= "07-11-2015", Amount= "8529.22" }, - new { CustomerName= "Clare Batterton", Model= "Sparrow", Color= "Pink", PaymentMode= "Cash On Delivery", DeliveryDate= "07-13-2016", Amount= "17866.19" }, - new { CustomerName= "Eamon Traise", Model= "Grand Cherokee", Color= "Blue", PaymentMode= "Net Banking", DeliveryDate= "09-04-2015", Amount= "13853.09" }, - new { CustomerName= "Julius Gorner", Model= "GTO", Color= "Aquamarine", PaymentMode= "Credit Card", DeliveryDate= "12-15-2017", Amount= "2338.74" }, - new { CustomerName= "Jenna Schoolfield", Model= "LX", Color= "Yellow", PaymentMode= "Credit Card", DeliveryDate= "10-08-2014", Amount= "9578.45" }, - new { CustomerName= "Marylynne Harring", Model= "Catera", Color= "Green", PaymentMode= "Cash On Delivery", DeliveryDate= "07-01-2017", Amount= "19141.62" }, - new { CustomerName= "Vilhelmina Leipelt", Model= "7 Series", Color= "Goldenrod", PaymentMode= "Credit Card", DeliveryDate= "12-20-2015", Amount= "6543.30" }, - new { CustomerName= "Barby Heisler", Model= "Corvette", Color= "Red", PaymentMode= "Credit Card", DeliveryDate= "11-24-2014", Amount= "13035.06" }, - new { CustomerName= "Karyn Boik", Model= "Regal", Color= "Indigo", PaymentMode= "Debit Card", DeliveryDate= "05-12-2014", Amount= "18488.80" }, - new { CustomerName= "Jeanette Pamplin", Model= "S4", Color= "Fuscia", PaymentMode= "Net Banking", DeliveryDate= "12-30-2014", Amount= "12317.04" }, - new { CustomerName= "Cristi Espinos", Model= "TL", Color= "Aquamarine", PaymentMode= "Credit Card", DeliveryDate= "12-18-2013", Amount= "6230.13" }, - new { CustomerName= "Issy Humm", Model= "Club Wagon", Color= "Pink", PaymentMode= "Cash On Delivery", DeliveryDate= "02-02-2015", Amount= "9709.49" }, - new { CustomerName= "Tuesday Fautly", Model= "V8 Vantage", Color= "Crimson", PaymentMode= "Debit Card", DeliveryDate= "11-19-2014", Amount= "9766.10" }, - new { CustomerName= "Rosemaria Thomann", Model= "Caravan", Color= "Violet", PaymentMode= "Net Banking", DeliveryDate= "02-08-2014", Amount= "7685.49" }, - new { CustomerName= "Lyell Fuentez", Model= "Bravada", Color= "Violet", PaymentMode= "Debit Card", DeliveryDate= "08-05-2016", Amount= "18012.45" }, - new { CustomerName= "Raynell Layne", Model= "Colorado", Color= "Pink", PaymentMode= "Credit Card", DeliveryDate= "05-30-2016", Amount= "2785.49" }, - new { CustomerName= "Raye Whines", Model= "4Runner", Color= "Red", PaymentMode= "Debit Card", DeliveryDate= "12-10-2016", Amount= "9967.74" }, - new { CustomerName= "Virgina Aharoni", Model= "TSX", Color= "Pink", PaymentMode= "Cash On Delivery", DeliveryDate= "10-23-2014", Amount= "5584.33" }, - new { CustomerName= "Peta Cheshir", Model= "Pathfinder", Color= "Red", PaymentMode= "Net Banking", DeliveryDate= "12-24-2015", Amount= "5286.53" }, - new { CustomerName= "Jule Urion", Model= "Charger", Color= "Violet", PaymentMode= "Debit Card", DeliveryDate= "11-20-2013", Amount= "13511.91" }, - new { CustomerName= "Lew Gilyatt", Model= "Bonneville", Color= "Crimson", PaymentMode= "Credit Card", DeliveryDate= "11-19-2013", Amount= "6498.19" }, - new { CustomerName= "Jobey Fortun", Model= "B-Series", Color= "Blue", PaymentMode= "Net Banking", DeliveryDate= "10-30-2014", Amount= "10359.67" }, - new { CustomerName= "Blondie Crump", Model= "Voyager", Color= "Turquoise", PaymentMode= "Credit Card", DeliveryDate= "04-06-2018", Amount= "8118.39" }, - new { CustomerName= "Florentia Binns", Model= "Grand Prix", Color= "Orange", PaymentMode= "Cash On Delivery", DeliveryDate= "10-13-2016", Amount= "10204.37" }, - new { CustomerName= "Jaquelin Galtone", Model= "Sunbird", Color= "Red", PaymentMode= "Net Banking", DeliveryDate= "10-22-2013", Amount= "6528.06" }, - new { CustomerName= "Hakeem Easseby", Model= "Mirage", Color= "Crimson", PaymentMode= "Debit Card", DeliveryDate= "09-12-2014", Amount= "5619.25" }, - new { CustomerName= "Nickolaus Gidman", Model= "XK", Color= "Orange", PaymentMode= "Debit Card", DeliveryDate= "05-12-2016", Amount= "5091.43" }, - new { CustomerName= "Jenine Iglesia", Model= "Accord", Color= "Orange", PaymentMode= "Debit Card", DeliveryDate= "09-03-2018", Amount= "14566.08" }, - new { CustomerName= "Fax Witherspoon", Model= "Range Rover Sport", Color= "Orange", PaymentMode= "Credit Card", DeliveryDate= "02-22-2018", Amount= "5284.87" } - }; - ViewData["DefaultData"] = data; - return View(); - } - - public IActionResult Open(IFormCollection openRequest) - { - OpenRequest open = new OpenRequest(); - if (openRequest.Files.Count != 0) - { - open.File = openRequest.Files[0]; - } - open.Password = openRequest["Password"]; - if (openRequest["SheetIndex"].Count != 0) - { - open.SheetIndex = int.Parse(openRequest["SheetIndex"]); - } - open.SheetPassword = openRequest["SheetPassword"]; - return Content(Workbook.Open(open)); - - } - - public IActionResult Save(SaveSettings saveSettings) - { - return Workbook.Save(saveSettings); - } - } -} diff --git a/Controllers/Spreadsheet/FormulaController.cs b/Controllers/Spreadsheet/FormulaController.cs deleted file mode 100644 index 5062d671..00000000 --- a/Controllers/Spreadsheet/FormulaController.cs +++ /dev/null @@ -1,37 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class SpreadsheetController : Controller - { - public IActionResult Formula() - { - List formulaData = new List() - { - new { Date= "08-01-2019", Open= "2625.75", Close= "2640.75", High= "2634.45", Low= "2620.65", Profit= "=C2-B2" }, - new { Date= "08-02-2019", Open= "2640.75", Close= "2638.75", High= "2640.75", Low= "2638.75", Profit= "=C3-B3" }, - new { Date= "08-03-2019", Open= "2638.75", Close= "2697.65", High= "2690.25", Low= "2647.65", Profit= "=C4-B4" }, - new { Date= "08-04-2019", Open= "2697.65", Close= "2700.25", High= "2699.21", Low= "2585.10", Profit= "=C5-B5" }, - new { Date= "08-05-2019", Open= "2700.25", Close= "2730.25", High= "2727.65", Low= "2704.95", Profit= "=C6-B6" }, - new { Date= "08-06-2019", Open= "2730.25", Close= "2725.25", High= "2727.45", Low= "2725.67", Profit= "=C7-B7" }, - new { Date= "08-07-2019", Open= "2725.25", Close= "2778.75", High= "2770.45", Low= "2730.60", Profit= "=C8-B8" }, - new { Date= "08-08-2019", Open= "2778.75", Close= "2800.67", High= "2790.27", Low= "2780.78", Profit= "=C9-B9" }, - new { Date= "08-09-2019", Open= "2800.67", Close= "2840.80", High= "2838.78", Low= "2827.78", Profit= "=C10-B10" }, - new { Date= "08-10-2019", Open= "2840.80", Close= "2865.35", High= "2863.30", Low= "2850.20", Profit= "=C11-B11" } - }; - ViewData["formulaData"] = formulaData; - return View(); - } - } -} \ No newline at end of file diff --git a/Controllers/Spreadsheet/FreezePaneController.cs b/Controllers/Spreadsheet/FreezePaneController.cs deleted file mode 100644 index c50e6b02..00000000 --- a/Controllers/Spreadsheet/FreezePaneController.cs +++ /dev/null @@ -1,65 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Http; -using Syncfusion.EJ2.Spreadsheet; - -namespace EJ2CoreSampleBrowser.Controllers.Spreadsheet -{ - public partial class SpreadsheetController : Controller - { - public IActionResult FreezePane() - { - List data = new List() - { - new { Month= "January", Year= "2019", BasicSalary= 15100, RevisedBasicSalary= 15800, DA= 2000, RevisedDA= 2200, HRA= 5000, RevisedHRA= 6500, ConveyanceAllowance= 1500, RevisedConveyanceAllowance= 1700, MedicalExpenses= 1250, RevisedMedicalExpenses= 1500, SpecialAllowance= 1000, RevisedSpecialAllowance= 1200, TotalGrossSalary= "=SUM(C3,E3,G3,I3,K3,M3)", RevisedTotalGrossSalary= "=SUM(D3,F3,H3,J3,L3,N3)", }, - new { Month= "February", Year= "2019", BasicSalary= 15100, RevisedBasicSalary= 15800, DA= 2000, RevisedDA= 2200, HRA= 5000, RevisedHRA= 6500, ConveyanceAllowance= 1500, RevisedConveyanceAllowance= 1700, MedicalExpenses= 1250, RevisedMedicalExpenses= 1500, SpecialAllowance= 1000, RevisedSpecialAllowance= 1200, TotalGrossSalary= "=SUM(C4,E4,G4,I4,K4,M4)", RevisedTotalGrossSalary= "=SUM(D4,F4,H4,J4,L4,N4)", }, - new { Month= "March", Year= "2019", BasicSalary= 15100, RevisedBasicSalary= 15800, DA= 2000, RevisedDA= 2200, HRA= 5000, RevisedHRA= 6500, ConveyanceAllowance= 1500, RevisedConveyanceAllowance= 1700, MedicalExpenses= 1250, RevisedMedicalExpenses= 1500, SpecialAllowance= 1000, RevisedSpecialAllowance= 1200, TotalGrossSalary= "=SUM(C5,E5,G5,I5,K5,M5)", RevisedTotalGrossSalary= "=SUM(D5,F5,H5,J5,L5,N5)", }, - new { Month= "April", Year= "2019", BasicSalary= 15100, RevisedBasicSalary= 15800, DA= 2000, RevisedDA= 2200, HRA= 5000, RevisedHRA= 6500, ConveyanceAllowance= 1500, RevisedConveyanceAllowance= 1700, MedicalExpenses= 1250, RevisedMedicalExpenses= 1500, SpecialAllowance= 1000, RevisedSpecialAllowance= 1200, TotalGrossSalary= "=SUM(C6,E6,G6,I6,K6,M6)", RevisedTotalGrossSalary= "=SUM(D6,F6,H6,J6,L6,N6)", }, - new { Month= "May", Year= "2019", BasicSalary= 15100, RevisedBasicSalary= 15800, DA= 2000, RevisedDA= 2200, HRA= 5000, RevisedHRA= 6500, ConveyanceAllowance= 1500, RevisedConveyanceAllowance= 1700, MedicalExpenses= 1250, RevisedMedicalExpenses= 1500, SpecialAllowance= 1000, RevisedSpecialAllowance= 1200, TotalGrossSalary= "=SUM(C7,E7,G7,I7,K7,M7)", RevisedTotalGrossSalary= "=SUM(D7,F7,H7,J7,L7,N7)", }, - new { Month= "June", Year= "2019", BasicSalary= 15100, RevisedBasicSalary= 15800, DA= 2000, RevisedDA= 2200, HRA= 5000, RevisedHRA= 6500, ConveyanceAllowance= 1500, RevisedConveyanceAllowance= 1700, MedicalExpenses= 1250, RevisedMedicalExpenses= 1500, SpecialAllowance= 1000, RevisedSpecialAllowance= 1200, TotalGrossSalary= "=SUM(C8,E8,G8,I8,K8,M8)", RevisedTotalGrossSalary= "=SUM(D8,F8,H8,J8,L8,N8)", }, - new { Month= "July", Year= "2019", BasicSalary= 15100, RevisedBasicSalary= 15800, DA= 2000, RevisedDA= 2200, HRA= 5000, RevisedHRA= 6500, ConveyanceAllowance= 1500, RevisedConveyanceAllowance= 1700, MedicalExpenses= 1250, RevisedMedicalExpenses= 1500, SpecialAllowance= 1000, RevisedSpecialAllowance= 1200, TotalGrossSalary= "=SUM(C9,E9,G9,I9,K9,M9)", RevisedTotalGrossSalary= "=SUM(D9,F9,H9,J9,L9,N9)", }, - new { Month= "August", Year= "2019", BasicSalary= 15100, RevisedBasicSalary= 15800, DA= 2000, RevisedDA= 2200, HRA= 5000, RevisedHRA= 6500, ConveyanceAllowance= 1500, RevisedConveyanceAllowance= 1700, MedicalExpenses= 1250, RevisedMedicalExpenses= 1500, SpecialAllowance= 1000, RevisedSpecialAllowance= 1200, TotalGrossSalary= "=SUM(C10,E10,G10,I10,K10,M10)", RevisedTotalGrossSalary= "=SUM(D10,F10,H10,J10,L10,N10)", }, - new { Month= "September", Year= "2019", BasicSalary= 15100, RevisedBasicSalary= 15800, DA= 2000, RevisedDA= 2200, HRA= 5000, RevisedHRA= 6500, ConveyanceAllowance= 1500, RevisedConveyanceAllowance= 1700, MedicalExpenses= 1250, RevisedMedicalExpenses= 1500, SpecialAllowance= 1000, RevisedSpecialAllowance= 1200, TotalGrossSalary= "=SUM(C11,E11,G11,I11,K11,M11)", RevisedTotalGrossSalary= "=SUM(D11,F11,H11,J11,L11,N11)", }, - new { Month= "October", Year= "2019", BasicSalary= 15100, RevisedBasicSalary= 15800, DA= 2000, RevisedDA= 2200, HRA= 5000, RevisedHRA= 6500, ConveyanceAllowance= 1500, RevisedConveyanceAllowance= 1700, MedicalExpenses= 1250, RevisedMedicalExpenses= 1500, SpecialAllowance= 1000, RevisedSpecialAllowance= 1200, TotalGrossSalary= "=SUM(C12,E12,G12,I12,K12,M12)", RevisedTotalGrossSalary= "=SUM(D12,F12,H12,J12,L12,N12)", }, - new { Month= "November", Year= "2019", BasicSalary= 15100, RevisedBasicSalary= 15800, DA= 2000, RevisedDA= 2200, HRA= 5000, RevisedHRA= 6500, ConveyanceAllowance= 1500, RevisedConveyanceAllowance= 1700, MedicalExpenses= 1250, RevisedMedicalExpenses= 1500, SpecialAllowance= 1000, RevisedSpecialAllowance= 1200, TotalGrossSalary= "=SUM(C13,E13,G13,I13,K13,M13)", RevisedTotalGrossSalary= "=SUM(D13,F13,H13,J13,L13,N13)", }, - new { Month= "December", Year= "2019", BasicSalary= 15100, RevisedBasicSalary= 15800, DA= 2000, RevisedDA= 2200, HRA= 5000, RevisedHRA= 6500, ConveyanceAllowance= 1500, RevisedConveyanceAllowance= 1700, MedicalExpenses= 1250, RevisedMedicalExpenses= 1500, SpecialAllowance= 1000, RevisedSpecialAllowance= 1200, TotalGrossSalary= "=SUM(C14,E14,G14,I14,K14,M14)", RevisedTotalGrossSalary= "=SUM(D14,F14,H14,J14,L14,N14)", }, - new { Month= "January", Year= "2020", BasicSalary= 16610, RevisedBasicSalary= 17380, DA= 2200, RevisedDA= 2420, HRA= 5500, RevisedHRA= 7150, ConveyanceAllowance= 1650, RevisedConveyanceAllowance= 1870, MedicalExpenses= 1375, RevisedMedicalExpenses= 1650, SpecialAllowance= 1100, RevisedSpecialAllowance= 1320, TotalGrossSalary= "=SUM(C15,E15,G15,I15,K15,M15)", RevisedTotalGrossSalary= "=SUM(D15,F15,H15,J15,L15,N15)", }, - new { Month= "February", Year= "2020", BasicSalary= 16610, RevisedBasicSalary= 17380, DA= 2200, RevisedDA= 2420, HRA= 5500, RevisedHRA= 7150, ConveyanceAllowance= 1650, RevisedConveyanceAllowance= 1870, MedicalExpenses= 1375, RevisedMedicalExpenses= 1650, SpecialAllowance= 1100, RevisedSpecialAllowance= 1320, TotalGrossSalary= "=SUM(C16,E16,G16,I16,K16,M16)", RevisedTotalGrossSalary= "=SUM(D16,F16,H16,J16,L16,N16)", }, - new { Month= "March", Year= "2020", BasicSalary= 16610, RevisedBasicSalary= 17380, DA= 2200, RevisedDA= 2420, HRA= 5500, RevisedHRA= 7150, ConveyanceAllowance= 1650, RevisedConveyanceAllowance= 1870, MedicalExpenses= 1375, RevisedMedicalExpenses= 1650, SpecialAllowance= 1100, RevisedSpecialAllowance= 1320, TotalGrossSalary= "=SUM(C17,E17,G17,I17,K17,M17)", RevisedTotalGrossSalary= "=SUM(D17,F17,H17,J17,L17,N17)", }, - new { Month= "April", Year= "2020", BasicSalary= 16610, RevisedBasicSalary= 17380, DA= 2200, RevisedDA= 2420, HRA= 5500, RevisedHRA= 7150, ConveyanceAllowance= 1650, RevisedConveyanceAllowance= 1870, MedicalExpenses= 1375, RevisedMedicalExpenses= 1650, SpecialAllowance= 1100, RevisedSpecialAllowance= 1320, TotalGrossSalary= "=SUM(C18,E18,G18,I18,K18,M18)", RevisedTotalGrossSalary= "=SUM(D18,F18,H18,J18,L18,N18)", }, - new { Month= "May", Year= "2020", BasicSalary= 16610, RevisedBasicSalary= 17380, DA= 2200, RevisedDA= 2420, HRA= 5500, RevisedHRA= 7150, ConveyanceAllowance= 1650, RevisedConveyanceAllowance= 1870, MedicalExpenses= 1375, RevisedMedicalExpenses= 1650, SpecialAllowance= 1100, RevisedSpecialAllowance= 1320, TotalGrossSalary= "=SUM(C19,E19,G19,I19,K19,M19)", RevisedTotalGrossSalary= "=SUM(D19,F19,H19,J19,L19,N19)", }, - new { Month= "June", Year= "2020", BasicSalary= 16610, RevisedBasicSalary= 17380, DA= 2200, RevisedDA= 2420, HRA= 5500, RevisedHRA= 7150, ConveyanceAllowance= 1650, RevisedConveyanceAllowance= 1870, MedicalExpenses= 1375, RevisedMedicalExpenses= 1650, SpecialAllowance= 1100, RevisedSpecialAllowance= 1320, TotalGrossSalary= "=SUM(C20,E20,G20,I20,K20,M20)", RevisedTotalGrossSalary= "=SUM(D20,F20,H20,J20,L20,N20)", }, - new { Month= "July", Year= "2020", BasicSalary= 16610, RevisedBasicSalary= 17380, DA= 2200, RevisedDA= 2420, HRA= 5500, RevisedHRA= 7150, ConveyanceAllowance= 1650, RevisedConveyanceAllowance= 1870, MedicalExpenses= 1375, RevisedMedicalExpenses= 1650, SpecialAllowance= 1100, RevisedSpecialAllowance= 1320, TotalGrossSalary= "=SUM(C21,E21,G21,I21,K21,M21)", RevisedTotalGrossSalary= "=SUM(D21,F21,H21,J21,L21,N21)", }, - new { Month= "August", Year= "2020", BasicSalary= 16610, RevisedBasicSalary= 17380, DA= 2200, RevisedDA= 2420, HRA= 5500, RevisedHRA= 7150, ConveyanceAllowance= 1650, RevisedConveyanceAllowance= 1870, MedicalExpenses= 1375, RevisedMedicalExpenses= 1650, SpecialAllowance= 1100, RevisedSpecialAllowance= 1320, TotalGrossSalary= "=SUM(C22,E22,G22,I22,K22,M22)", RevisedTotalGrossSalary= "=SUM(D22,F22,H22,J22,L22,N22)", }, - new { Month= "September", Year= "2020", BasicSalary= 16610, RevisedBasicSalary= 17380, DA= 2200, RevisedDA= 2420, HRA= 5500, RevisedHRA= 7150, ConveyanceAllowance= 1650, RevisedConveyanceAllowance= 1870, MedicalExpenses= 1375, RevisedMedicalExpenses= 1650, SpecialAllowance= 1100, RevisedSpecialAllowance= 1320, TotalGrossSalary= "=SUM(C23,E23,G23,I23,K23,M23)", RevisedTotalGrossSalary= "=SUM(D23,F23,H23,J23,L23,N23)", }, - new { Month= "October", Year= "2020", BasicSalary= 16610, RevisedBasicSalary= 17380, DA= 2200, RevisedDA= 2420, HRA= 5500, RevisedHRA= 7150, ConveyanceAllowance= 1650, RevisedConveyanceAllowance= 1870, MedicalExpenses= 1375, RevisedMedicalExpenses= 1650, SpecialAllowance= 1100, RevisedSpecialAllowance= 1320, TotalGrossSalary= "=SUM(C24,E24,G24,I24,K24,M24)", RevisedTotalGrossSalary= "=SUM(D24,F24,H24,J24,L24,N24)", }, - new { Month= "November", Year= "2020", BasicSalary= 16610, RevisedBasicSalary= 17380, DA= 2200, RevisedDA= 2420, HRA= 5500, RevisedHRA= 7150, ConveyanceAllowance= 1650, RevisedConveyanceAllowance= 1870, MedicalExpenses= 1375, RevisedMedicalExpenses= 1650, SpecialAllowance= 1100, RevisedSpecialAllowance= 1320, TotalGrossSalary= "=SUM(C25,E25,G25,I25,K25,M25)", RevisedTotalGrossSalary= "=SUM(D25,F25,H25,J25,L25,N25)", }, - new { Month= "December", Year= "2020", BasicSalary= 16610, RevisedBasicSalary= 17380, DA= 2200, RevisedDA= 2420, HRA= 5500, RevisedHRA= 7150, ConveyanceAllowance= 1650, RevisedConveyanceAllowance= 1870, MedicalExpenses= 1375, RevisedMedicalExpenses= 1650, SpecialAllowance= 1100, RevisedSpecialAllowance= 1320, TotalGrossSalary= "=SUM(C26,E26,G26,I26,K26,M26)", RevisedTotalGrossSalary= "=SUM(D26,F26,H26,J26,L26,N26)", } - }; - ViewData["FreezePaneData"] = data; - return View(); - } - - public IActionResult FreezePaneOpen(IFormCollection openRequest) - { - OpenRequest open = new OpenRequest(); - open.File = openRequest.Files[0]; - return Content(Workbook.Open(open)); - } - - public IActionResult FreezePaneSave(SaveSettings saveSettings) - { - return Workbook.Save(saveSettings); - } - } -} diff --git a/Controllers/Spreadsheet/HyperlinkController.cs b/Controllers/Spreadsheet/HyperlinkController.cs deleted file mode 100644 index c110d300..00000000 --- a/Controllers/Spreadsheet/HyperlinkController.cs +++ /dev/null @@ -1,49 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class SpreadsheetController : Controller - { - public IActionResult Hyperlink() - { - List data = new List() - { - new { ProductName= "Coffee Maker", category="Kitchen", Quantity= "43", Price= "399", Total= "=E4*D4" }, - new { ProductName= "Apple Pencil", category="Electronics", Quantity= "7", Price= "200", Total= "=E5*D5" }, - new { ProductName= "Juicer", category="Kitchen", Quantity= "12", Price= "100", Total= "=E6*D6" }, - new { ProductName= "Toaster", category="Kitchen", Quantity= "69", Price= "183", Total= "=E7*D7" }, - new { ProductName= "Tea Kettle", category="Kitchen", Quantity= "83", Price= "169", Total= "=E8*D8" }, - new { ProductName= "Logitech Mouse", category="Electronics", Quantity= "16", Price= "250", Total= "=E9*D9" }, - new { ProductName= "Skillet", category="Kitchen", Quantity= "20", Price= "149", Total= "=E10*D10" }, - new { ProductName= "Hamilton Blender", category="Appliances", Quantity= "68", Price= "109", Total= "=E11*D11" }, - new { ProductName= "Plate set", category="Kitchen", Quantity= "59", Price= "168", Total= "=E12*D12" } - }; - List data1 = new List() - { - new { ProductId= "AG940Z", ProductsReceived= "100", ProductsSold= "=100-Cart!D4", AvailableQuantity= "=B2-C2" }, - new { ProductId= "BJ120K", ProductsReceived= "100", ProductsSold= "=100-Cart!D5", AvailableQuantity= "=B3-C3" }, - new { ProductId= "BC120M", ProductsReceived= "100", ProductsSold= "=100-Cart!D6", AvailableQuantity= "=B4-C4" }, - new { ProductId= "BS121L", ProductsReceived= "100", ProductsSold= "=100-Cart!D7", AvailableQuantity= "=B5-C5" }, - new { ProductId= "BU121K", ProductsReceived= "100", ProductsSold= "=100-Cart!D8", AvailableQuantity= "=B6-C6" }, - new { ProductId= "BD121M", ProductsReceived= "100", ProductsSold= "=100-Cart!D9", AvailableQuantity= "=B7-C7" }, - new { ProductId= "AT992X", ProductsReceived= "100", ProductsSold= "=100-Cart!D10", AvailableQuantity= "=B8-C8" }, - new { ProductId= "AP992Z", ProductsReceived= "100", ProductsSold= "=100-Cart!D11", AvailableQuantity= "=B9-C9" }, - new { ProductId= "AW920X", ProductsReceived= "100", ProductsSold= "=100-Cart!D12", AvailableQuantity= "=B10-C10" } - }; - ViewData["HyperlinkCart"] = data; - ViewData["HyperlinkStock"] = data1; - return View(); - } - } -} \ No newline at end of file diff --git a/Controllers/Spreadsheet/ImageController.cs b/Controllers/Spreadsheet/ImageController.cs deleted file mode 100644 index f669b26d..00000000 --- a/Controllers/Spreadsheet/ImageController.cs +++ /dev/null @@ -1,39 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Http; -using Syncfusion.EJ2.Spreadsheet; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class SpreadsheetController : Controller - { - public IActionResult Image() - { - string imageURL = "data:image/png;base64,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"; - ViewData["Base64ImageUrl"] = imageURL; - return View(); - } - - public IActionResult ImageOpen(IFormCollection openRequest) - { - OpenRequest open = new OpenRequest(); - open.File = openRequest.Files[0]; - return Content(Workbook.Open(open)); - } - - public IActionResult ImageSave(SaveSettings saveSettings) - { - return Workbook.Save(saveSettings); - } - } -} \ No newline at end of file diff --git a/Controllers/Spreadsheet/NotesController.cs b/Controllers/Spreadsheet/NotesController.cs deleted file mode 100644 index 04fe11ac..00000000 --- a/Controllers/Spreadsheet/NotesController.cs +++ /dev/null @@ -1,45 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Syncfusion.EJ2.Spreadsheet; - -namespace EJ2CoreSampleBrowser_NET6.Controllers.Spreadsheet -{ - public partial class SpreadsheetController : Controller - { - public IActionResult Notes() - { - List products = new List - { - new { ProductName = "Coffee Maker", Category = "Kitchen", Quantity = 43, Price = "399", Total = "=PRODUCT(E4,D4)" }, - new { ProductName = "Apple Pencil", Category = "Electronics", Quantity = 7, Price = "200", Total = "=PRODUCT(E5,D5)" }, - new { ProductName = "Juicer", Category = "Kitchen", Quantity = 12, Price = "100", Total = "=PRODUCT(E6,D6)" }, - new { ProductName = "Toaster", Category = "Kitchen", Quantity = 69, Price = "183", Total = "=PRODUCT(E7,D7)" }, - new { ProductName = "Tea Kettle", Category = "Kitchen", Quantity = 83, Price = "169", Total = "=PRODUCT(E8,D8)" }, - new { ProductName = "Logitech Mouse", Category = "Electronics", Quantity = 16, Price = "250", Total = "=PRODUCT(E9,D9)" }, - new { ProductName = "Skillet", Category = "Kitchen", Quantity = 20, Price = "149", Total = "=PRODUCT(E10,D10)" }, - new { ProductName = "Hamilton Blender", Category = "Appliances", Quantity = 68, Price = "109", Total = "=PRODUCT(E11,D11)" }, - new { ProductName = "Plate set", Category = "Kitchen", Quantity = 59, Price = "168", Total = "=PRODUCT(E12,D12)" } - }; - ViewData["notesData"] = products; - return View(); - } - - public IActionResult NotesOpen(IFormCollection openRequest) - { - OpenRequest open = new OpenRequest(); - open.File = openRequest.Files[0]; - return Content(Workbook.Open(open)); - } - - public IActionResult NotesSave(SaveSettings saveSettings) - { - return Workbook.Save(saveSettings); - } - } -} diff --git a/Controllers/Spreadsheet/NumberFormattingController.cs b/Controllers/Spreadsheet/NumberFormattingController.cs deleted file mode 100644 index 9de86e8e..00000000 --- a/Controllers/Spreadsheet/NumberFormattingController.cs +++ /dev/null @@ -1,38 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class SpreadsheetController : Controller - { - public IActionResult NumberFormatting() - { - List numberFormatData = new List() - { - new { ItemCode= "I231", ItemName= "Chinese Combo Noodle", Quantity= 2, Rate= 125, Amount= "=PRODUCT(C4,D4)" }, - new { ItemCode= "I245", ItemName= "Chinese Combo Rice", Quantity= 3, Rate= 125, Amount= "=PRODUCT(C5,D5)" }, - new { ItemCode= "I237", ItemName= "Amritsari Chola", Quantity= 2, Rate= 225, Amount= "=PRODUCT(C6,D6)" }, - new { ItemCode= "I291", ItemName= "Asian Mixed Entree Platt", Quantity= 3, Rate= 165, Amount= "=PRODUCT(C7,D7)" }, - new { ItemCode= "I268", ItemName= "Chinese Combo Chicken", Quantity= 3, Rate= 125, Amount= "=PRODUCT(C8,D8)" }, - new { ItemCode= "I251", ItemName= "Chivas Regal", Quantity= 1, Rate= 325, Amount= "=PRODUCT(C9,D9)" }, - new { ItemCode= "I256", ItemName= "Chicken Drumsticks", Quantity= 2, Rate= 180, Amount= "=PRODUCT(C10,D10)" }, - new { ItemCode= "I232", ItemName= "Manchow Soup", Quantity= 2, Rate= 160, Amount= "=PRODUCT(C11,D11)" }, - new { ItemCode= "I290", ItemName= "Schezuan Chicken", Quantity= 3, Rate= 180, Amount= "=PRODUCT(C12,D12)" }, - new { ItemCode= "I229", ItemName= "Manchow Soup", Quantity= 2, Rate= 125, Amount= "=PRODUCT(C13,D13)" }, - new { ItemCode= "I239", ItemName= "Jw Black Lable", Quantity= 2, Rate= 175, Amount= "=PRODUCT(C14,D14)" } - }; - ViewData["numberFormatData"] = numberFormatData; - return View(); - } - } -} \ No newline at end of file diff --git a/Controllers/Spreadsheet/PrintController.cs b/Controllers/Spreadsheet/PrintController.cs deleted file mode 100644 index 6ab0ccac..00000000 --- a/Controllers/Spreadsheet/PrintController.cs +++ /dev/null @@ -1,134 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Syncfusion.EJ2.Spreadsheet; - -namespace EJ2CoreSampleBrowser_NET6.Controllers.Spreadsheet -{ - public partial class SpreadsheetController : Controller - { - public IActionResult Print() - { - List printData = new List() - { - new { CustomerName= "Sarah Johnson", MailID= "sarah.johnson@example.com", Model= "Taurus", Noofcars= "2", DeliveryDate= "07-11-2020", Amount= "8529.22" }, - new { CustomerName= "Michael Smith", MailID= "michael.smith@example.com", Model= "Sparrow", Noofcars= "1", DeliveryDate= "07-13-2021", Amount= "17866.19" }, - new { CustomerName= "Emily Davis", MailID= "emily.davis@example.com", Model= "Grand Cherokee", Noofcars= "1", DeliveryDate= "09-04-2020", Amount= "13853.09" }, - new { CustomerName= "John Anderson", MailID= "john.anderson@example.com", Model= "GTO", Noofcars= "3", DeliveryDate= "12-15-2022", Amount= "2338.74" }, - new { CustomerName= "Jessica Martinez", MailID= "jessica.martinez@example.com", Model= "LX", Noofcars= "2", DeliveryDate= "10-08-2019", Amount= "9578.45" }, - new { CustomerName= "Daniel Thompson", MailID= "daniel.thompson@example.com", Model= "Catera", Noofcars= "1", DeliveryDate= "07-01-2022", Amount= "19141.62" }, - new { CustomerName= "Samantha Harris", MailID= "samantha.harris@example.com", Model= "Series 7", Noofcars= "3", DeliveryDate= "12-20-2020", Amount= "6543.30" }, - new { CustomerName= "Christopher Wilson", MailID= "christopher.wilson@example.com", Model= "Corvette", Noofcars= "2", DeliveryDate= "11-24-2019", Amount= "13035.06" }, - new { CustomerName= "Ashley Brown", MailID= "ashley.brown@example.com", Model= "Regal", Noofcars= "1", DeliveryDate= "05-12-2019", Amount= "18488.80" }, - new { CustomerName= "Matthew Taylor", MailID= "matthew.taylor@example.com", Model= "S4", Noofcars= "2", DeliveryDate= "12-30-2019", Amount= "12317.04" }, - new { CustomerName= "Olivia Garcia", MailID= "olivia.garcia@example.com", Model= "TL", Noofcars= "3", DeliveryDate= "12-18-2023", Amount= "6230.13" }, - new { CustomerName= "David Hernandez", MailID= "david.hernandez@example.com", Model= "Club Wagon", Noofcars= "2", DeliveryDate= "02-02-2020", Amount= "9709.49" }, - new { CustomerName= "Emma Moore", MailID= "emma.moore@example.com", Model= "V8 Vantage", Noofcars= "2", DeliveryDate= "11-19-2019", Amount= "9766.10" }, - new { CustomerName= "Andrew Lewis", MailID= "andrew.lewis@example.com", Model= "Caravan", Noofcars= "3", DeliveryDate= "02-08-2019", Amount= "7685.49" }, - new { CustomerName= "Elizabeth Clark", MailID= "elizabeth.clark@example.com", Model= "Bravada", Noofcars= "1", DeliveryDate= "08-05-2021", Amount= "18012.45" }, - new { CustomerName= "James Walker", MailID= "james.walker@example.com", Model= "Colorado", Noofcars= "3", DeliveryDate= "05-30-2021", Amount= "2785.49" }, - new { CustomerName= "Ava Rodriguez", MailID= "ava.rodriguez@example.com", Model= "Runner", Noofcars= "3", DeliveryDate= "12-10-2021", Amount= "9967.74" }, - new { CustomerName= "Ryan White", MailID= "ryan.white@example.com", Model= "TSX", Noofcars= "3", DeliveryDate= "10-23-2019", Amount= "5584.33" }, - new { CustomerName= "Madison Lee", MailID= "madison.lee@example.com", Model= "Pathfinder", Noofcars= "2", DeliveryDate= "12-24-2020", Amount= "5286.53" }, - new { CustomerName= "Nicholas Martin", MailID= "nicholas.martin@example.com", Model= "Charger", Noofcars= "2", DeliveryDate= "11-20-2023", Amount= "13511.91" }, - new { CustomerName= "Sophia Hall", MailID= "sophia.hall@example.com", Model= "Bonneville", Noofcars= "2", DeliveryDate= "11-19-2023", Amount= "6498.19" }, - new { CustomerName= "Joshua Young", MailID= "joshua.young@example.com", Model= "B-Series", Noofcars= "2", DeliveryDate= "10-30-2019", Amount= "10359.67" }, - new { CustomerName= "Isabella King", MailID= "isabella.king@example.com", Model= "Voyager", Noofcars= "3", DeliveryDate= "04-06-2023", Amount= "8118.39" }, - new { CustomerName= "Joseph Allen", MailID= "joseph.allen@example.com", Model= "Grand Prix", Noofcars= "1", DeliveryDate= "10-13-2021", Amount= "10204.37" }, - new { CustomerName= "Charlotte Scott", MailID= "charlotte.scott@example.com", Model= "Sunbird", Noofcars= "3", DeliveryDate= "10-22-2023", Amount= "6528.06" }, - new { CustomerName= "William Green", MailID= "william.green@example.com", Model= "Mirage", Noofcars= "2", DeliveryDate= "09-12-2019", Amount= "5619.25" }, - new { CustomerName= "Amelia Adams", MailID= "amelia.adams@example.com", Model= "XK", Noofcars= "1", DeliveryDate= "05-12-2021", Amount= "5091.43" }, - new { CustomerName= "Ethan Carter", MailID= "ethan.carter@example.com", Model= "Accord", Noofcars= "1", DeliveryDate= "09-03-2023", Amount= "14566.08" }, - new { CustomerName= "Mia Turner", MailID= "mia.turner@example.com", Model= "Range Rover Sport", Noofcars= "2", DeliveryDate= "02-22-2023", Amount= "5284.87" }, - new { CustomerName= "Alexander Baker", MailID= "alexander.baker@example.com", Model= "Runner", Noofcars= "3", DeliveryDate= "12-25-2023", Amount= "5524.25" }, - new { CustomerName= "Chloe Hill", MailID= "chloe.hill@example.com", Model= "TSX", Noofcars= "3", DeliveryDate= "2-25-2023", Amount= "2543.25" }, - new { CustomerName= "Benjamin Nelson", MailID= "benjamin.nelson@example.com", Model= "Pathfinder", Noofcars= "2", DeliveryDate= "11-19-2023", Amount= "8524.35" }, - new { CustomerName= "Grace Mitchell", MailID= "grace.mitchell@example.com", Model= "Charger", Noofcars= "2", DeliveryDate= "10-30-2019", Amount= "9542.35" }, - new { CustomerName= "Jacob Perez", MailID= "jacob.perez@example.com", Model= "Bonneville", Noofcars= "3", DeliveryDate= "04-06-2023", Amount= "8872.52" }, - new { CustomerName= "Avery Roberts", MailID= "avery.roberts@example.com", Model= "B-Series", Noofcars= "1", DeliveryDate= "10-13-2021", Amount= "12884.52" }, - new { CustomerName= "Ethan Thomas", MailID= "ethan.thomas@example.com", Model= "Voyager", Noofcars= "1", DeliveryDate= "10-22-2023", Amount= "19352.24" }, - new { CustomerName= "Lily Phillips", MailID= "lily.phillips@example.com", Model= "Grand Prix", Noofcars= "2", DeliveryDate= "09-12-2019", Amount= "8546.24" }, - new { CustomerName= "Samuel Davis", MailID= "samuel.davis@example.com", Model= "Sunbird", Noofcars= "3", DeliveryDate= "02-08-2019", Amount= "8844.25" }, - new { CustomerName= "Zoey Campbell", MailID= "zoey.campbell@example.com", Model= "Mirage", Noofcars= "2", DeliveryDate= "08-05-2021", Amount= "9635.25" }, - new { CustomerName= "Daniel Cooper", MailID= "daniel.cooper@example.com", Model= "XK", Noofcars= "3", DeliveryDate= "05-30-2021", Amount= "7854.24" }, - new { CustomerName= "Madeline Collins", MailID= "madeline.collins@example.com", Model= "Accord", Noofcars= "1", DeliveryDate= "12-10-2021", Amount= "14297.36" }, - new { CustomerName= "Nathan Edwards", MailID= "nathan.edwards@example.com", Model= "Range Rover Sport", Noofcars= "2", DeliveryDate= "12-24-2020", Amount= "8745.35" }, - new { CustomerName= "Evelyn Stewart", MailID= "evelyn.stewart@example.com", Model= "Runner", Noofcars= "1", DeliveryDate= "11-20-2023", Amount= "17825.52" }, - new { CustomerName= "Alexander Rivera", MailID= "alexander.rivera@example.com", Model= "TSX", Noofcars= "1", DeliveryDate= "12-20-2020", Amount= "15994.34" }, - new { CustomerName= "Sophia Henderson", MailID= "sophia.henderson@example.com", Model= "Pathfinder", Noofcars= "2", DeliveryDate= "08-30-2019", Amount= "9154.34" }, - new { CustomerName= "Isaac Morris", MailID= "isaac.morris@example.com", Model= "Charger", Noofcars= "3", DeliveryDate= "12-13-2023", Amount= "13082.34" }, - new { CustomerName= "Claire Rogers", MailID= "claire.rogers@example.com", Model= "Bonneville", Noofcars= "3", DeliveryDate= "10-01-2019", Amount= "7963.35" }, - new { CustomerName= "Luke Flores", MailID= "luke.flores@example.com", Model= "B-Series", Noofcars= "3", DeliveryDate= "10-31-2023", Amount= "6734.35" }, - new { CustomerName= "Aubrey Long", MailID= "aubrey.long@example.com", Model= "Voyager", Noofcars= "1", DeliveryDate= "08-21-2019", Amount= "12864.35" }, - new { CustomerName= "Julian Coleman", MailID= "julian.coleman@example.com", Model= "Grand Prix", Noofcars= "2", DeliveryDate= "07-07-2021", Amount= "7985.36" }, - new { CustomerName= "Leah Reed", MailID= "leah.reed@example.com", Model= "Sunbird", Noofcars= "1", DeliveryDate= "02-03-2022", Amount= "19245.36" }, - new { CustomerName= "Gabriel Bell", MailID= "gabriel.bell@example.com", Model= "Mirage", Noofcars= "3", DeliveryDate= "01-23-2021", Amount= "7835.36" }, - new { CustomerName= "Natalie Ward", MailID= "natalie.ward@example.com", Model= "XK", Noofcars= "1", DeliveryDate= "08-06-2020", Amount= "16324.35" }, - new { CustomerName= "Lucas Brooks", MailID= "lucas.brooks@example.com", Model= "Accord", Noofcars= "2", DeliveryDate= "11-01-2019", Amount= "8845.34" }, - new { CustomerName= "Hailey Mitchell", MailID= "hailey.mitchell@example.com", Model= "Range Rover Sport", Noofcars= "1", DeliveryDate= "08-17-2023", Amount= "12684.35" }, - new { CustomerName= "Jackson Ward", MailID= "jackson.ward@example.com", Model= "Runner", Noofcars= "1", DeliveryDate= "03-03-2019", Amount= "15093.36" } - - }; - List yearlyReportDataSource = new List() - { - new { Model= "Accord", Year2018= "0", Year2019= "2", Year2020= "0", Year2021= "1", Year2022= "0", Year2023= "1" }, - new { Model= "Bonneville", Year2018= "2", Year2019= "3", Year2020= "0", Year2021= "0", Year2022= "0", Year2023= "3" }, - new { Model= "Bravada", Year2018= "0", Year2019= "0", Year2020= "0", Year2021= "1", Year2022= "0", Year2023= "0" }, - new { Model= "B-Series", Year2018= "3", Year2019= "2", Year2020= "0", Year2021= "1", Year2022= "0", Year2023= "0" }, - new { Model= "Caravan", Year2018= "0", Year2019= "3", Year2020= "0", Year2021= "0", Year2022= "0", Year2023= "0" }, - new { Model= "Catera", Year2018= "0", Year2019= "0", Year2020= "0", Year2021= "0", Year2022= "1", Year2023= "0" }, - new { Model= "Charger", Year2018= "5", Year2019= "2", Year2020= "0", Year2021= "0", Year2022= "0", Year2023= "0" }, - new { Model= "Club Wagon", Year2018= "0", Year2019= "0", Year2020= "2", Year2021= "0", Year2022= "0", Year2023= "0" }, - new { Model= "Colorado", Year2018= "0", Year2019= "0", Year2020= "0", Year2021= "3", Year2022= "0", Year2023= "0" }, - new { Model= "Corvette", Year2018= "0", Year2019= "2", Year2020= "0", Year2021= "0", Year2022= "0", Year2023= "0" }, - new { Model= "Grand Cherokee", Year2018= "0", Year2019= "0", Year2020= "1", Year2021= "0", Year2022= "0", Year2023= "0" }, - new { Model= "Grand Prix", Year2018= "0", Year2019= "2", Year2020= "0", Year2021= "3", Year2022= "0", Year2023= "0" }, - new { Model= "GTO", Year2018= "0", Year2019= "0", Year2020= "0", Year2021= "0", Year2022= "3", Year2023= "0" }, - new { Model= "LX", Year2018= "0", Year2019= "2", Year2020= "0", Year2021= "0", Year2022= "0", Year2023= "0" }, - new { Model= "Mirage", Year2018= "0", Year2019= "2", Year2020= "0", Year2021= "5", Year2022= "0", Year2023= "0" }, - new { Model= "Pathfinder", Year2018= "2", Year2019= "2", Year2020= "2", Year2021= "0", Year2022= "0", Year2023= "0" }, - new { Model= "Range Rover Sport", Year2018= "1", Year2019= "0", Year2020= "2", Year2021= "0", Year2022= "0", Year2023= "2" }, - new { Model= "Regal", Year2018= "0", Year2019= "1", Year2020= "0", Year2021= "0", Year2022= "0", Year2023= "0" }, - new { Model= "Runner", Year2018= "1", Year2019= "1", Year2020= "0", Year2021= "3", Year2022= "0", Year2023= "3" }, - new { Model= "S4", Year2018= "0", Year2019= "2", Year2020= "0", Year2021= "0", Year2022= "0", Year2023= "0" }, - new { Model= "Series 7", Year2018= "0", Year2019= "0", Year2020= "3", Year2021= "0", Year2022= "0", Year2023= "0" }, - new { Model= "Sparrow", Year2018= "0", Year2019= "0", Year2020= "0", Year2021= "1", Year2022= "0", Year2023= "0" }, - new { Model= "Sunbird", Year2018= "3", Year2019= "3", Year2020= "0", Year2021= "0", Year2022= "1", Year2023= "0" }, - new { Model= "Taurus", Year2018= "0", Year2019= "0", Year2020= "2", Year2021= "0", Year2022= "0", Year2023= "0" }, - new { Model= "TL", Year2018= "3", Year2019= "0", Year2020= "0", Year2021= "0", Year2022= "0", Year2023= "0" }, - new { Model= "TSX", Year2018= "0", Year2019= "3", Year2020= "1", Year2021= "0", Year2022= "0", Year2023= "3" }, - new { Model= "V8 Vantage", Year2018= "0", Year2019= "2", Year2020= "0", Year2021= "0", Year2022= "0", Year2023= "0" }, - new { Model= "Voyager", Year2018= "1", Year2019= "1", Year2020= "0", Year2021= "0", Year2022= "0", Year2023= "3" }, - new { Model= "XK", Year2018= "0", Year2019= "0", Year2020= "1", Year2021= "4", Year2022= "0", Year2023= "0" } - - }; - ViewData["PrintData"] = printData; - ViewData["YearlyReport"] = yearlyReportDataSource; - ViewData["ImageSource"] = this.GetImageSource(); - return View(); - } - - public string GetImageSource() - { - string allText = System.IO.File.ReadAllText("./wwwroot/scripts/Spreadsheet/SpreadsheetImage.txt"); - return allText; - } - - public IActionResult PrintOpen(IFormCollection openRequest) - { - OpenRequest open = new OpenRequest(); - open.File = openRequest.Files[0]; - return Content(Workbook.Open(open)); - } - - public IActionResult PrintSave(SaveSettings saveSettings) - { - return Workbook.Save(saveSettings); - } - } -} diff --git a/Controllers/Spreadsheet/ProtectSheetController.cs b/Controllers/Spreadsheet/ProtectSheetController.cs deleted file mode 100644 index 93c11951..00000000 --- a/Controllers/Spreadsheet/ProtectSheetController.cs +++ /dev/null @@ -1,57 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Http; -using Syncfusion.EJ2.Spreadsheet; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class SpreadsheetController : Controller - { - public IActionResult ProtectSheet() - { - List data = new List() - { - new { Tenure= "1", PaymentDate= "03-04-2020", EMI= "8698.84", Prinicpal= "8032.18", Interest= "666.67", Balance= "91967.82" }, - new { Tenure= "2", PaymentDate= "03-05-2020", EMI= "8698.84", Prinicpal= "8085.72", Interest= "616.12", Balance= "83882.10" }, - new { Tenure= "3", PaymentDate= "03-06-2020", EMI= "8698.84", Prinicpal= "8139.63", Interest= "559.21", Balance= "75742.47" }, - new { Tenure= "4", PaymentDate= "03-07-2020", EMI= "8698.84", Prinicpal= "8193.89", Interest= "504.95", Balance= "67548.58" }, - new { Tenure= "5", PaymentDate= "03-08-2020", EMI= "8698.84", Prinicpal= "8248.52", Interest= "450.32", Balance= "59300.06" }, - new { Tenure= "6", PaymentDate= "03-09-2020", EMI= "8698.84", Prinicpal= "8303.51", Interest= "395.33", Balance= "50996.55" }, - new { Tenure= "7", PaymentDate= "03-10-2020", EMI= "8698.84", Prinicpal= "8358.87", Interest= "339.98", Balance= "42637.68" }, - new { Tenure= "8", PaymentDate= "03-11-2020", EMI= "8698.84", Prinicpal= "8414.59", Interest= "284.25", Balance= "34223.09" }, - new { Tenure= "9", PaymentDate= "03-12-2020", EMI= "8698.84", Prinicpal= "8470.69", Interest= "228.15", Balance= "25752.40" }, - new { Tenure= "10", PaymentDate= "03-01-2021", EMI= "8698.84", Prinicpal= "8527.16", Interest= "171.68", Balance= "17225.24" }, - new { Tenure= "11", PaymentDate= "03-02-2021", EMI= "8698.84", Prinicpal= "8584.01", Interest= "114.83", Balance= "8641.23" }, - new { Tenure= "12", PaymentDate= "03-03-2021", EMI= "8698.84", Prinicpal= "8641.23", Interest= "57.61", Balance= "0.00" }, - }; - ViewData["ProtectSheetData"] = data; - return View(); - } - - public IActionResult ProtectsheetOpen(IFormCollection openRequest) - { - OpenRequest open = new OpenRequest(); - open.File = openRequest.Files[0]; - if(openRequest["Password"].Count > 0) - { - open.Password = openRequest["Password"]; - } - return Content(Workbook.Open(open)); - } - - public IActionResult ProtectsheetSave(SaveSettings saveSettings) - { - return Workbook.Save(saveSettings); - } - } -} \ No newline at end of file diff --git a/Controllers/Spreadsheet/RemoteDataBindingController.cs b/Controllers/Spreadsheet/RemoteDataBindingController.cs deleted file mode 100644 index 667ac846..00000000 --- a/Controllers/Spreadsheet/RemoteDataBindingController.cs +++ /dev/null @@ -1,37 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Http; -using Syncfusion.EJ2.Spreadsheet; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class SpreadsheetController : Controller - { - public IActionResult RemoteDataBinding() - { - return View(); - } - - public IActionResult RemoteDataOpen(IFormCollection openRequest) - { - OpenRequest open = new OpenRequest(); - open.File = openRequest.Files[0]; - return Content(Workbook.Open(open)); - } - - public IActionResult RemoteDataSave(SaveSettings saveSettings) - { - return Workbook.Save(saveSettings); - } - } -} \ No newline at end of file diff --git a/Controllers/Spreadsheet/SortingFilteringController.cs b/Controllers/Spreadsheet/SortingFilteringController.cs deleted file mode 100644 index b08ff990..00000000 --- a/Controllers/Spreadsheet/SortingFilteringController.cs +++ /dev/null @@ -1,90 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Http; -using Syncfusion.EJ2.Spreadsheet; - -namespace EJ2CoreSampleBrowser.Controllers -{ - public partial class SpreadsheetController : Controller - { - public IActionResult SortingFiltering() - { - List data = new List() - { - new { EmployeeID= "5389863", EmployeeName= "Liuka Tewkesberry", Gender= "Female", Department= "Human Resources", DateOfJoining= "08-22-2018", Salary= "32940.53", City= "Valencia" }, - new { EmployeeID= "9141760", EmployeeName= "Maurine McGreal", Gender= "Female", Department= "Accounting", DateOfJoining= "02-19-2016", Salary= "12769.67", City= "Thị Xã Lai Châu" }, - new { EmployeeID= "0440371", EmployeeName= "Abby Marcum", Gender= "Male", Department= "Legal", DateOfJoining= "03-12-2019", Salary= "18565.98", City= "Lachute" }, - new { EmployeeID= "4319060", EmployeeName= "Colet Dreghorn", Gender= "Male", Department= "Marketing", DateOfJoining= "11-02-2018", Salary= "36075.62", City= "Cincinnati" }, - new { EmployeeID= "8524811", EmployeeName= "Morey Ilyin", Gender= "Male", Department= "Sales", DateOfJoining= "07-13-2018", Salary= "19845.66", City= "Liudu" }, - new { EmployeeID= "3536836", EmployeeName= "Justus Eilert", Gender= "Male", Department= "Services", DateOfJoining= "08-30-2016", Salary= "25054.73", City= "Kitamilo" }, - new { EmployeeID= "6035100", EmployeeName= "Lorelle Whyberd", Gender= "Female", Department= "Marketing", DateOfJoining= "09-16-2010", Salary= "21552.49", City= "Qandala" }, - new { EmployeeID= "9595117", EmployeeName= "Hans Sponer", Gender= "Male", Department= "Legal", DateOfJoining= "11-25-2019", Salary= "12751.78", City= "Parakou" }, - new { EmployeeID= "9251706", EmployeeName= "Esme Beaglehole", Gender= "Female", Department= "Engineering", DateOfJoining= "11-24-2017", Salary= "34244.64", City= "Saint-Ambroise" }, - new { EmployeeID= "5041677", EmployeeName= "Hans Sponer", Gender= "Female", Department= "Marketing", DateOfJoining= "01-21-2019", Salary= "25722.37", City= "Huashi" }, - new { EmployeeID= "9596007", EmployeeName= "Glen Lambrechts", Gender= "Male", Department= "Human Resources", DateOfJoining= "09-25-2019", Salary= "47190.81", City= "Krajan Nglinggis" }, - new { EmployeeID= "3506310", EmployeeName= "Judy Crick", Gender= "Female", Department= "Human Resources", DateOfJoining= "10-22-2013", Salary= "14168.85", City= "Jianchang" }, - new { EmployeeID= "0283605", EmployeeName= "Megen McSherry", Gender= "Female", Department= "Engineering", DateOfJoining= "10-19-2016", Salary= "49673.94", City= "Talisayan" }, - new { EmployeeID= "5918336", EmployeeName= "Aloysius Blunden", Gender= "Male", Department= "Services", DateOfJoining= "06-16-2010", Salary= "23992.84", City= "Italó" }, - new { EmployeeID= "7239057", EmployeeName= "Bruce Pook", Gender= "Male", Department= "Services", DateOfJoining= "08-15-2019", Salary= "46169.78", City= "Drawsko" }, - new { EmployeeID= "2603324", EmployeeName= "Reggie Gethins", Gender= "Female", Department= "Training", DateOfJoining= "05-03-2014", Salary= "48793.33", City= "Baiqiao" }, - new { EmployeeID= "8641019", EmployeeName= "Happy Terrell", Gender= "Female", Department= "Product Management", DateOfJoining= "01-07-2010", Salary= "11971.89", City= "Bandar-e Lengeh" }, - new { EmployeeID= "2229621", EmployeeName= "Dermot Swithenby", Gender= "Male", Department= "Business Development", DateOfJoining= "05-31-2017", Salary= "14627.52", City= "Da’an" }, - new { EmployeeID= "6507226", EmployeeName= "Dusty Naulls", Gender= "Female", Department= "Engineering", DateOfJoining= "05-17-2012", Salary= "49569.60", City= "Kelowna" }, - new { EmployeeID= "9588238", EmployeeName= "oycey Gemlbett", Gender= "Male", Department= "Accounting", DateOfJoining= "08-19-2014", Salary= "11400.60", City= "Quezon" }, - new { EmployeeID= "4783061", EmployeeName= "Gregoire Craik", Gender= "Male", Department= "Support", DateOfJoining= "01-07-2015", Salary= "28536.96", City= "Sacramento" }, - new { EmployeeID= "1086662", EmployeeName= "Paquito Keetch", Gender= "Male", Department= "Legal", DateOfJoining= "07-20-2017", Salary= "10948.94", City= "Xieshui" }, - new { EmployeeID= "7111790", EmployeeName= "Siouxie Lippini", Gender= "Female", Department= "Engineering", DateOfJoining= "02-08-2012", Salary= "42688.51", City= "Bigoudine" }, - new { EmployeeID= "9189124", EmployeeName= "Valerye Russell", Gender= "Female", Department= "Services", DateOfJoining= "07-17-2012", Salary= "32651.96", City= "Pichilemu" }, - new { EmployeeID= "6015219", EmployeeName= "Patience Ludman", Gender= "Female", Department= "Training", DateOfJoining= "09-25-2018", Salary= "17589.61", City= "Binjiang" }, - new { EmployeeID= "5210163", EmployeeName= "Helene Borsay", Gender= "Female", Department= "Services", DateOfJoining= "01-19-2018", Salary= "34017.42", City= "Chengkan" }, - new { EmployeeID= "6656266", EmployeeName= "Garrek Fatharly", Gender= "Male", Department= "Business Development", DateOfJoining= "08-22-2018", Salary= "49775.81", City= "San Antonio Oeste" }, - new { EmployeeID= "8740096", EmployeeName= "Fulton Culverhouse", Gender= "Male", Department= "Product Management", DateOfJoining= "01-11-2014", Salary= "36633.61", City= "Borlänge" }, - new { EmployeeID= "7875847", EmployeeName= "Lavena Yandle", Gender= "Female", Department= "Accounting", DateOfJoining= "08-31-2016", Salary= "25835.58", City= "Borino" }, - new { EmployeeID= "8436792", EmployeeName= "Sophia Cowwell", Gender= "Female", Department= "Product Management", DateOfJoining= "08-06-2011", Salary= "46836.53", City= "Fécamp" }, - new { EmployeeID= "2789522", EmployeeName= "Dode Bowmen", Gender= "Female", Department= "Sales", DateOfJoining= "02-21-2010", Salary= "27575.10", City= "Karangwaru" }, - new { EmployeeID= "2816501", EmployeeName= "Peggi Grishelyov", Gender= "Female", Department= "Accounting", DateOfJoining= "12-08-2012", Salary= "41712.59", City= "San Antonio" }, - new { EmployeeID= "5648843", EmployeeName= "Ailsun Porker", Gender= "Female", Department= "Services", DateOfJoining= "11-23-2016", Salary= "46533.06", City= "Mayisyan" }, - new { EmployeeID= "3645602", EmployeeName= "Licha McKee", Gender= "Female", Department= "Research and Development", DateOfJoining= "08-29-2018", Salary= "31008.69", City= "Wenqiao" }, - new { EmployeeID= "7413262", EmployeeName= "Ives Tunn", Gender= "Male", Department= "Product Management", DateOfJoining= "08-31-2018", Salary= "27791.30", City= "Tabia" }, - new { EmployeeID= "9348082", EmployeeName= "Cathy Bugdale", Gender= "Female", Department= "Training", DateOfJoining= "04-23-2016", Salary= "31759.16", City= "Azul" }, - new { EmployeeID= "7109150", EmployeeName= "Waverley Gingedale", Gender= "Male", Department= "Accounting", DateOfJoining= "09-04-2011", Salary= "27893.84", City= "Frýdek-Místek" }, - new { EmployeeID= "1119404", EmployeeName= "Cooper Capes", Gender= "Male", Department= "Sales", DateOfJoining= "01-02-2016", Salary= "26407.41", City= "Ash Sharyah" }, - new { EmployeeID= "9560117", EmployeeName= "Shayna Potebury", Gender= "Female", Department= "Human Resources", DateOfJoining= "10-23-2012", Salary= "35332.31", City= "Baluk" }, - new { EmployeeID= "2598799", EmployeeName= "Doro Gaitone", Gender= "Female", Department= "Sales", DateOfJoining= "02-04-2012", Salary= "22904.55", City= "Wulingyuan" }, - new { EmployeeID= "6767113", EmployeeName= "Chantal Ventam", Gender= "Female", Department= "Training", DateOfJoining= "07-02-2014", Salary= "25515.12", City= "Xinshui" }, - new { EmployeeID= "3735396", EmployeeName= "Tobie Brodeur", Gender= "Male", Department= "Training", DateOfJoining= "08-11-2015", Salary= "24508.84", City= "Xin’an" }, - new { EmployeeID= "2942841", EmployeeName= "Feodor MacDermid", Gender= "Male", Department= "Human Resources", DateOfJoining= "06-02-2019", Salary= "14844.80", City= "Rantauambacang" }, - new { EmployeeID= "1511001", EmployeeName= "Allyce Decker", Gender= "Female", Department= "Support", DateOfJoining= "04-14-2017", Salary= "39356.65", City= "Saint Paul" }, - new { EmployeeID= "9062663", EmployeeName= "Ricard Connock", Gender= "Male", Department= "Product Management", DateOfJoining= "11-25-2010", Salary= "27421.61", City= "Lokorae" }, - new { EmployeeID= "6210073", EmployeeName= "Minerva Greenham", Gender= "Female", Department= "Support", DateOfJoining= "05-23-2014", Salary= "48300.27", City= "Pakemitan" }, - new { EmployeeID= "1830385", EmployeeName= "Cyb Gallant", Gender= "Female", Department= "Accounting", DateOfJoining= "11-25-2010", Salary= "36518.72", City= "Berëzovyy" }, - new { EmployeeID= "7466629", EmployeeName= "Harman Free", Gender= "Male", Department= "Human Resources", DateOfJoining= "07-15-2012", Salary= "35939.87", City= "Watodei" }, - new { EmployeeID= "2963633", EmployeeName= "Kylie Phettis", Gender= "Female", Department= "Marketing", DateOfJoining= "03-18-2011", Salary= "26038.56", City= "Huangzhai" }, - }; - ViewData["FilteringData"] = data; - return View(); - } - - public IActionResult SortOpen(IFormCollection openRequest) - { - OpenRequest open = new OpenRequest(); - open.File = openRequest.Files[0]; - return Content(Workbook.Open(open)); - } - - public IActionResult SortSave(SaveSettings saveSettings) - { - return Workbook.Save(saveSettings); - } - } -} \ No newline at end of file diff --git a/Controllers/Word/SalesInvoiceController.cs b/Controllers/Word/SalesInvoiceController.cs deleted file mode 100644 index 7396e4c3..00000000 --- a/Controllers/Word/SalesInvoiceController.cs +++ /dev/null @@ -1,711 +0,0 @@ -#region Copyright -// Copyright Syncfusion Inc. 2001 - 2018. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion - -using System; -using System.Collections; -using System.Data; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using System.IO; -using Syncfusion.Pdf; -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Mvc.Rendering; -using System.Data.SqlClient; -using System.Xml; -using System.Collections.Generic; - -// For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 - -namespace EJ2CoreSampleBrowser.Controllers.Word -{ - public partial class WordController : Controller - { - private readonly IWebHostEnvironment _hostingEnvironment; - public WordController(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult SalesInvoice(int id, string SaveOption, string Button) - { - ArrayList orderID = GetTestOrderID(); - ViewData.Add("id", new SelectList(orderID)); - if (SaveOption == null) - return View(); - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/SalesInvoiceDemo.doc"; - string contenttype1 = "application/msword"; - FileStream fileStreamPath = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - if (Button == "View Template") - return File(fileStreamPath, contenttype1, "SalesInvoiceDemo.doc"); - - // Create a new document - WordDocument doc = new WordDocument(); - // Load the template. - string dataPathSales = basePath + @"/Word/SalesInvoiceDemo.doc"; - FileStream fileStream = new FileStream(dataPathSales, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - doc.Open(fileStream, FormatType.Automatic); - //Create MailMergeDataTable - MailMergeDataTable mailMergeDataTableOrder = GetTestOrder(id); - MailMergeDataTable mailMergeDataTableOrderTotals = GetTestOrderTotals(id); - MailMergeDataTable mailMergeDataTableOrderDetails = GetTestOrderDetails(id); - // Execute Mail Merge with groups. - doc.MailMerge.ExecuteGroup(mailMergeDataTableOrder); - doc.MailMerge.ExecuteGroup(mailMergeDataTableOrderTotals); - // Using Merge events to do conditional formatting during runtime. - doc.MailMerge.MergeField += new MergeFieldEventHandler(MailMerge_MergeField); - doc.MailMerge.ExecuteGroup(mailMergeDataTableOrderDetails); - FormatType type = FormatType.Docx; - string filename = "SalesInvoice.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - #region Document SaveOption - //Save as .doc format - if (SaveOption == "WordDoc") - { - type = FormatType.Doc; - filename = "SalesInvoice.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (SaveOption == "WordML") - { - type = FormatType.WordML; - filename = "SalesInvoice.xml"; - contenttype = "application/msword"; - } - #endregion Document SaveOption - MemoryStream ms = new MemoryStream(); - doc.Save(ms, type); - doc.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - private void MailMerge_MergeField(object sender, MergeFieldEventArgs args) - { - // Conditionally format data during Merge. - if (args.RowIndex % 2 == 0) - { - args.CharacterFormat.TextColor = Syncfusion.Drawing.Color.DarkBlue; - } - - } - - private MailMergeDataTable GetTestOrder(int TestOrderId) - { - List orders = new List(); - FileStream fs = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/TestOrder.xml", FileMode.Open, FileAccess.Read); - XmlReader reader = XmlReader.Create(fs); - - if (reader == null) - throw new Exception("reader"); - - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - - if (reader.LocalName != "TestOrders") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - - reader.Read(); - - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - - while (reader.LocalName != "TestOrders") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "TestOrder": - TestOrder testOrder = GetTestOrder(reader); - if (testOrder.OrderID == TestOrderId.ToString()) - { - orders.Add(testOrder); - break; - } - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "TestOrders") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - MailMergeDataTable dataTable = new MailMergeDataTable("Orders", orders); - reader.Dispose(); - fs.Dispose(); - return dataTable; - - } - - private MailMergeDataTable GetTestOrderDetails(int TestOrderId) - { - List orders = new List(); - FileStream fs = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/TestOrderDetails.xml", FileMode.Open, FileAccess.Read); - XmlReader reader = XmlReader.Create(fs); - - if (reader == null) - throw new Exception("reader"); - - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - - if (reader.LocalName != "TestOrderDetails") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - - reader.Read(); - - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - - while (reader.LocalName != "TestOrderDetails") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "TestOrderDetail": - TestOrderDetail testOrder = GetTestOrderDetail(reader); - if (testOrder.OrderID == TestOrderId.ToString()) - { - orders.Add(testOrder); - break; - } - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "TestOrderDetails") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - MailMergeDataTable dataTable = new MailMergeDataTable("Order", orders); - reader.Dispose(); - fs.Dispose(); - return dataTable; - - } - private MailMergeDataTable GetTestOrderTotals(int TestOrderId) - { - List orders = new List(); - FileStream fs = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/OrderTotals.xml", FileMode.Open, FileAccess.Read); - XmlReader reader = XmlReader.Create(fs); - - if (reader == null) - throw new Exception("reader"); - - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - - if (reader.LocalName != "TestOrderTotals") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - - reader.Read(); - - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - - while (reader.LocalName != "TestOrderTotals") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "TestOrderTotal": - TestOrderTotal testOrder = GetTestOrderTotal(reader); - if (testOrder.OrderID == TestOrderId.ToString()) - { - orders.Add(testOrder); - break; - } - break; - } - reader.Read(); - } - else - { - reader.Read(); - if ((reader.LocalName == "TestOrderTotals") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - MailMergeDataTable dataTable = new MailMergeDataTable("OrderTotals", orders); - reader.Dispose(); - fs.Dispose(); - return dataTable; - } - - private TestOrder GetTestOrder(XmlReader reader) - { - if (reader == null) - throw new Exception("reader"); - - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - - if (reader.LocalName != "TestOrder") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - - reader.Read(); - - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - - TestOrder testOrder = new TestOrder(); - while (reader.LocalName != "TestOrder") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "ShipName": - testOrder.ShipName = reader.ReadElementContentAsString(); - break; - case "ShipAddress": - testOrder.ShipAddress = reader.ReadElementContentAsString(); - break; - case "ShipCity": - testOrder.ShipCity = reader.ReadElementContentAsString(); - break; - case "ShipPostalCode": - testOrder.ShipPostalCode = reader.ReadElementContentAsString(); - break; - case "ShipCountry": - testOrder.ShipCountry = reader.ReadElementContentAsString(); - break; - case "PostalCode": - testOrder.PostalCode = reader.ReadElementContentAsString(); - break; - case "CustomerID": - testOrder.CustomerID = reader.ReadElementContentAsString(); - break; - case "Customers.CompanyName": - testOrder.Customers_CompanyName = reader.ReadElementContentAsString(); - break; - case "HomePage": - testOrder.Salesperson = reader.ReadElementContentAsString(); - break; - case "Address": - testOrder.Address = reader.ReadElementContentAsString(); - break; - case "City": - testOrder.City = reader.ReadElementContentAsString(); - break; - case "Country": - testOrder.Country = reader.ReadElementContentAsString(); - break; - case "OrderID": - testOrder.OrderID = reader.ReadElementContentAsString(); - break; - case "OrderDate": - testOrder.OrderDate = reader.ReadElementContentAsString(); - break; - case "RequiredDate": - testOrder.RequiredDate = reader.ReadElementContentAsString(); - break; - case "ShippedDate": - testOrder.ShippedDate = reader.ReadElementContentAsString(); - break; - case "Shippers.CompanyName": - testOrder.Shippers_CompanyName = reader.ReadElementContentAsString(); - break; - default: - reader.Skip(); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "TestOrders") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - return testOrder; - } - private ArrayList GetTestOrderID() - { - FileStream fs = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/TestOrder.xml", FileMode.Open, FileAccess.Read); - XmlReader reader = XmlReader.Create(fs); - - if (reader == null) - throw new Exception("reader"); - - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - - if (reader.LocalName != "TestOrders") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - - reader.Read(); - - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - ArrayList orderId = new ArrayList(); - - while (reader.LocalName != "TestOrders") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "OrderID": - orderId.Add(reader.ReadElementContentAsString()); - break; - default: - break; - } - reader.Read(); - } - else - { - reader.Read(); - if ((reader.LocalName == "TestOrders") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - return orderId; - } - private TestOrderDetail GetTestOrderDetail(XmlReader reader) - { - if (reader == null) - throw new Exception("reader"); - - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - - if (reader.LocalName != "TestOrderDetail") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - - reader.Read(); - - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - - TestOrderDetail testOrderDetail = new TestOrderDetail(); - while (reader.LocalName != "TestOrderDetail") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "OrderID": - testOrderDetail.OrderID = reader.ReadElementContentAsString(); - break; - case "ProductID": - testOrderDetail.ProductID = reader.ReadElementContentAsString(); - break; - case "ProductName": - testOrderDetail.ProductName = reader.ReadElementContentAsString(); - break; - case "UnitPrice": - testOrderDetail.UnitPrice = reader.ReadElementContentAsString(); - break; - case "Quantity": - testOrderDetail.Quantity = reader.ReadElementContentAsString(); - break; - case "Discount": - testOrderDetail.Discount = reader.ReadElementContentAsString(); - break; - case "ExtendedPrice": - testOrderDetail.ExtendedPrice = reader.ReadElementContentAsString(); - break; - default: - reader.Skip(); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "TestOrderDetail") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - return testOrderDetail; - } - private TestOrderTotal GetTestOrderTotal(XmlReader reader) - { - if (reader == null) - throw new Exception("reader"); - - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - - if (reader.LocalName != "TestOrderTotal") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - - reader.Read(); - - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - - TestOrderTotal testOrderTotal = new TestOrderTotal(); - while (reader.LocalName != "TestOrderTotal") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "OrderID": - testOrderTotal.OrderID = reader.ReadElementContentAsString(); - break; - case "Subtotal": - testOrderTotal.Subtotal = reader.ReadElementContentAsString(); - break; - case "Freight": - testOrderTotal.Freight = reader.ReadElementContentAsString(); - break; - case "Total": - testOrderTotal.Total = reader.ReadElementContentAsString(); - break; - default: - reader.Skip(); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "TestOrderTotal") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - return testOrderTotal; - } - } - - - public class TestOrderDetail - { - #region Fields - - private string m_orderID; - private string m_productID; - private string m_productName; - private string m_unitPrice; - private string m_quantity; - private string m_discount; - private string m_extendedPrice; - #endregion - - #region Properties - - public string OrderID - { - get { return m_orderID; } - set { m_orderID = value; } - } - - public string ProductID - { - get { return m_productID; } - set { m_productID = value; } - } - public string ProductName - { - get { return m_productName; } - set { m_productName = value; } - } - public string UnitPrice - { - get { return m_unitPrice; } - set { m_unitPrice = value; } - } - public string Quantity - { - get { return m_quantity; } - set { m_quantity = value; } - } - public string Discount - { - get { return m_discount; } - set { m_discount = value; } - } - public string ExtendedPrice - { - get { return m_extendedPrice; } - set { m_extendedPrice = value; } - } - - #endregion - - #region Constructor - public TestOrderDetail() - { } - #endregion - } - public class TestOrderTotal - { - #region Fields - - private string m_orderID; - private string m_subTotal; - private string m_freight; - private string m_total; - #endregion - - #region Properties - - public string OrderID - { - get { return m_orderID; } - set { m_orderID = value; } - } - - public string Subtotal - { - get { return m_subTotal; } - set { m_subTotal = value; } - } - public string Freight - { - get { return m_freight; } - set { m_freight = value; } - } - public string Total - { - get { return m_total; } - set { m_total = value; } - } - #endregion - - #region Constructor - public TestOrderTotal() - { } - #endregion - } - public class TestOrder - { - #region Fields - - private string m_orderID; - private string m_shipName; - private string m_shipAddress; - private string m_shipCity; - private string m_shipPostalCode; - private string m_shipCountry; - private string m_customerID; - private string m_address; - private string m_postalCode; - private string m_city; - private string m_country; - private string m_salesPerson; - private string m_customersCompanyName; - private string m_orderDate; - private string m_requiredDate; - private string m_shippedDate; - private string m_shippersCompanyName; - #endregion - - #region Properties - - public string ShipName - { - get { return m_shipName; } - set { m_shipName = value; } - } - - public string ShipAddress - { - get { return m_shipAddress; } - set { m_shipAddress = value; } - } - public string ShipCity - { - get { return m_shipCity; } - set { m_shipCity = value; } - } - public string ShipPostalCode - { - get { return m_shipPostalCode; } - set { m_shipPostalCode = value; } - } - public string PostalCode - { - get { return m_postalCode; } - set { m_postalCode = value; } - } - public string ShipCountry - { - get { return m_shipCountry; } - set { m_shipCountry = value; } - } - public string CustomerID - { - get { return m_customerID; } - set { m_customerID = value; } - } - public string Customers_CompanyName - { - get { return m_customersCompanyName; } - set { m_customersCompanyName = value; } - } - public string Address - { - get { return m_address; } - set { m_address = value; } - } - - public string City - { - get { return m_city; } - set { m_city = value; } - } - - public string Country - { - get { return m_country; } - set { m_country = value; } - } - public string Salesperson - { - get { return m_salesPerson; } - set { m_salesPerson = value; } - } - public string OrderID - { - get { return m_orderID; } - set { m_orderID = value; } - } - public string OrderDate - { - get { return m_orderDate; } - set { m_orderDate = value; } - } - public string RequiredDate - { - get { return m_requiredDate; } - set { m_requiredDate = value; } - } - public string ShippedDate - { - get { return m_shippedDate; } - set { m_shippedDate = value; } - } - public string Shippers_CompanyName - { - get { return m_shippersCompanyName; } - set { m_shippersCompanyName = value; } - } - #endregion - - #region Constructor - public TestOrder() - { } - #endregion - } -} diff --git a/Excel/EJ2CoreSampleBrowser_NET8.csproj b/Excel/EJ2CoreSampleBrowser_NET8.csproj deleted file mode 100644 index 8864ff2a..00000000 --- a/Excel/EJ2CoreSampleBrowser_NET8.csproj +++ /dev/null @@ -1,54 +0,0 @@ - - - - net8.0 - enable - enable - NET8_0 - false - false - en - - - - TRACE;RELEASE;$(SyncfusionLicensing) - - - - $(DefineConstants);REDIS - - - - - - - - - - - - - - - - - - - - - - - Always - - - - - - - - - - - - - diff --git a/Excel/EJ2CoreSampleBrowser_NET8.sln b/Excel/EJ2CoreSampleBrowser_NET8.sln deleted file mode 100644 index 6b087c1c..00000000 --- a/Excel/EJ2CoreSampleBrowser_NET8.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.8.34112.27 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EJ2CoreSampleBrowser_NET8", "EJ2CoreSampleBrowser_NET8.csproj", "{88189D22-0C47-4532-BCB4-21880180E031}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {88189D22-0C47-4532-BCB4-21880180E031}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {88189D22-0C47-4532-BCB4-21880180E031}.Debug|Any CPU.Build.0 = Debug|Any CPU - {88189D22-0C47-4532-BCB4-21880180E031}.Release|Any CPU.ActiveCfg = Release|Any CPU - {88189D22-0C47-4532-BCB4-21880180E031}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {EAFF0E5A-D397-4A01-8A96-838B4ADC1C37} - EndGlobalSection -EndGlobal diff --git a/Excel/EJ2CoreSampleBrowser_NET9.csproj b/Excel/EJ2CoreSampleBrowser_NET9.csproj deleted file mode 100644 index 0697ad33..00000000 --- a/Excel/EJ2CoreSampleBrowser_NET9.csproj +++ /dev/null @@ -1,54 +0,0 @@ - - - - net9.0 - enable - enable - NET9_0 - false - false - en - - - - TRACE;RELEASE;$(SyncfusionLicensing) - - - - $(DefineConstants);REDIS - - - - - - - - - - - - - - - - - - - - - - - Always - - - - - - - - - - - - - diff --git a/Excel/EJ2CoreSampleBrowser_NET9.sln b/Excel/EJ2CoreSampleBrowser_NET9.sln deleted file mode 100644 index 0ee03a73..00000000 --- a/Excel/EJ2CoreSampleBrowser_NET9.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.9.34526.213 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EJ2CoreSampleBrowser_NET9", "EJ2CoreSampleBrowser_NET9.csproj", "{13C6FDB5-C4F0-4AB1-A9CF-60B3408D0E47}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {13C6FDB5-C4F0-4AB1-A9CF-60B3408D0E47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {13C6FDB5-C4F0-4AB1-A9CF-60B3408D0E47}.Debug|Any CPU.Build.0 = Debug|Any CPU - {13C6FDB5-C4F0-4AB1-A9CF-60B3408D0E47}.Release|Any CPU.ActiveCfg = Release|Any CPU - {13C6FDB5-C4F0-4AB1-A9CF-60B3408D0E47}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {FCA5463F-8B61-464E-9D16-25573D34823F} - EndGlobalSection -EndGlobal diff --git a/Excel/sampleOrder.json b/Excel/sampleOrder.json deleted file mode 100644 index 9cccb8e7..00000000 --- a/Excel/sampleOrder.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "Document Processing Library": [ "Excel" ], - "Editor": [ "Spreadsheet" ] -} \ No newline at end of file diff --git a/Excel/samplelist.js b/Excel/samplelist.js deleted file mode 100644 index 7e94a462..00000000 --- a/Excel/samplelist.js +++ /dev/null @@ -1,712 +0,0 @@ -if (!window) { - - var window = exports.window = {}; -} -window.samplesList = [ - { - "name": "Excel (XlsIO)", - "directory": "Excel", - "category": "Document Processing Library", - "type": "update", - "samples": [ - { - "url": "Create", - "name": "Create", - "category": "Getting Started", - "order": 0, - "component": "Excel", - "dir": "Excel", - "uid": "0044440", - "parentId": "044" - }, - { - "url": "AttendanceTracker", - "name": "Attendance Tracker", - "category": "Product Showcase", - "order": 1, - "component": "Excel", - "dir": "Excel", - "uid": "0044441", - "parentId": "044", - }, - { - "url": "CallCenterDashboard", - "name": "Call Center Dashboard", - "category": "Product Showcase", - "order": 1, - "component": "Excel", - "dir": "Excel", - "uid": "0044442", - "parentId": "044", - }, - { - "url": "ExpensesReport", - "name": "Expenses Report", - "category": "Product Showcase", - "order": 1, - "component": "Excel", - "dir": "Excel", - "uid": "0044443", - "parentId": "044", - }, - { - "url": "YearlySales", - "name": "Yearly Sales", - "category": "Product Showcase", - "order": 1, - "component": "Excel", - "dir": "Excel", - "uid": "0044444", - "parentId": "044", - }, - { - "url": "ReadExcel", - "name": "Read", - "category": "Performance", - "order": 2, - "component": "Excel", - "dir": "Excel", - "uid": "00444441", - "parentId": "044" - }, - { - "url": "WriteExcel", - "name": "Write", - "category": "Performance", - "order": 2, - "component": "Excel", - "dir": "Excel", - "uid": "00444442", - "parentId": "044" - }, - { - "url": "FormatCells", - "name": "Format Cells", - "category": "Formatting", - "order": 3, - "component": "Excel", - "dir": "Excel", - "uid": "0044445", - "parentId": "044" - }, - { - "url": "ConditionalFormatting", - "name": "Conditional Formatting", - "category": "Formatting", - "order": 3, - "component": "Excel", - "dir": "Excel", - "uid": "0044446", - "parentId": "044" - }, - { - "url": "ChartWorksheet", - "name": "Chart Worksheet", - "category": "Charts", - "order": 4, - "component": "Excel", - "dir": "Excel", - "uid": "0044447", - "parentId": "044" - }, - { - "url": "EmbeddedChart", - "name": "Embedded Chart", - "category": "Charts", - "order": 4, - "component": "Excel", - "dir": "Excel", - "uid": "0044448", - "parentId": "044" - }, - { - "url": "Sparklines", - "name": "Sparklines", - "category": "Charts", - "order": 4, - "component": "Excel", - "dir": "Excel", - "uid": "0044449", - "parentId": "044" - }, - { - "url": "Formulas", - "name": "Formulas", - "category": "Formulas", - "order": 5, - "component": "Excel", - "dir": "Excel", - "uid": "00444410", - "parentId": "044" - }, - { - "url": "DataValidation", - "name": "Data Validation", - "category": "Data Management", - "order": 6, - "component": "Excel", - "dir": "Excel", - "uid": "00444411", - "parentId": "044" - }, - { - "url": "DataSorting", - "name": "Data Sorting", - "category": "Data Management", - "order": 6, - "component": "Excel", - "dir": "Excel", - "uid": "0044412", - "parentId": "044" - }, - { - "url": "FormControls", - "name": "Form Controls", - "category": "Data Management", - "order": 6, - "component": "Excel", - "dir": "Excel", - "uid": "00444414", - "parentId": "044" - }, - { - "url": "AutoFilter", - "name": "Filters", - "category": "Data Management", - "order": 6, - "component": "Excel", - "dir": "Excel", - "uid": "00444415", - "parentId": "044" - }, - { - "url": "Slicer", - "name": "Slicer", - "category": "Data Management", - "order": 6, - "component": "Excel", - "dir": "Excel", - "uid": "00444416", - "parentId": "044" - }, - { - "url": "CollectionObjects", - "name": "Collection Objects", - "category": "Data Binding", - "order": 7, - "component": "Excel", - "dir": "Excel", - "uid": "00444417", - "parentId": "044", - "sourceFiles": [ - { "displayName": "CollectionObjects.cshtml", path: "../Views/Excel/CollectionObjects.cshtml" }, - { "displayName": "CollectionObjectsController.cs", path: "../Controllers/Excel/CollectionObjectsController.cs" } - ] - }, - { - "url": "ImportNestedCollection", - "name": "Import Nested Collection", - "category": "Data Binding", - "order": 7, - "component": "Excel", - "dir": "Excel", - "uid": "00444418", - "parentId": "044" - }, - { - "url": "HTMLToWorksheet", - "name": "Import HTML Table", - "category": "Data Binding", - "order": 7, - "component": "Excel", - "dir": "Excel", - "uid": "00444419", - "parentId": "044" - }, - { - "url": "ImportExportDataTable", - "name": "Import Export DataTable", - "category": "Data Binding", - "order": 7, - "component": "Excel", - "dir": "Excel", - "uid": "00444420", - "parentId": "044", - "sourceFiles": [ - { "displayName": "ImportExportDataTable.cshtml", path: "../Views/Excel/ImportExportDataTable.cshtml" }, - { "displayName": "ImportExportDataTableController.cs", path: "../Controllers/Excel/ImportExportDataTableController.cs" } - ] - }, - { - "url": "ExcelToPDF", - "name": "Excel To PDF", - "category": "Conversions", - "order": 8, - "component": "Excel", - "dir": "Excel", - "uid": "00444421", - "parentId": "044" - }, - { - "url": "ExcelToPDFUA", - "name": "Excel To PDF/UA", - "category": "Conversions", - "order": 8, - "component": "Excel", - "dir": "Excel", - "uid": "00444443", - "parentId": "044" - }, - { - "url": "WorksheetToImage", - "name": "Worksheet To Image", - "category": "Conversions", - "order": 8, - "component": "Excel", - "dir": "Excel", - "uid": "00444422", - "parentId": "044" - }, - { - "url": "WorksheetToHTML", - "name": "Worksheet To HTML", - "category": "Conversions", - "order": 8, - "component": "Excel", - "dir": "Excel", - "uid": "00444423", - "parentId": "044" - }, - { - "url": "ExcelToJSON", - "name": "Excel To JSON", - "category": "Conversions", - "order": 8, - "component": "Excel", - "dir": "Excel", - "uid": "00444424", - "parentId": "044" - }, - { - "url": "EncryptAndDecrypt", - "name": "Encrypt and Decrypt", - "category": "Security", - "order": 9, - "component": "Excel", - "dir": "Excel", - "uid": "00444425", - "parentId": "044" - }, - { - "url": "Tables", - "name": "Tables", - "category": "Business Intelligence", - "order": 10, - "component": "Excel", - "dir": "Excel", - "uid": "00444426", - "parentId": "044" - }, - { - "url": "PivotTable", - "name": "Pivot Table", - "category": "Business Intelligence", - "order": 10, - "component": "Excel", - "dir": "Excel", - "uid": "00616127", - "parentId": "044" - }, - { - "url": "PivotLayout", - "name": "Pivot Table Layout", - "category": "Business Intelligence", - "order": 10, - "component": "Excel", - "dir": "Excel", - "uid": "00616128", - "parentId": "044" - }, - { - "url": "AutoShapes", - "name": "AutoShapes", - "category": "Shapes", - "order": 11, - "component": "Excel", - "dir": "Excel", - "uid": "00444429", - "parentId": "044" - }, - { - "url": "GroupShapes", - "name": "Group Shapes", - "category": "Shapes", - "order": 11, - "component": "Excel", - "dir": "Excel", - "uid": "00444430", - "parentId": "044" - }, - { - "url": "CreateMacro", - "name": "Create Macro", - "category": "Macros", - "order": 12, - "component": "Excel", - "dir": "Excel", - "uid": "00444431", - "parentId": "044" - }, - { - "url": "EditMacro", - "name": "Edit Macro", - "category": "Macros", - "order": 12, - "component": "Excel", - "dir": "Excel", - "uid": "00444432", - "parentId": "044" - }, - { - "url": "WhatIfAnalysis", - "name": "What-If Analysis", - "category": "Data Management", - "order": 6, - "component": "Excel", - "dir": "Excel", - "uid": "00444433", - "parentId": "044" - }, - { - "url": "Comments", - "name": "Comments", - "category": "Shapes", - "order": 11, - "component": "Excel", - "dir": "Excel", - "uid": "00444434", - "parentId": "044" - }, - { - "url": "ExcelToCSV", - "name": "Excel To CSV", - "category": "Conversions", - "order": 8, - "component": "Excel", - "dir": "Excel", - "uid": "00444435", - "parentId": "044" - }, - { - "url": "ExcelToTSV", - "name": "Excel To TSV", - "category": "Conversions", - "order": 8, - "component": "Excel", - "dir": "Excel", - "uid": "00444436", - "parentId": "044" - }, - { - "url": "CSVToExcel", - "name": "CSV To Excel", - "category": "Conversions", - "order": 8, - "component": "Excel", - "dir": "Excel", - "uid": "00444437", - "parentId": "044" - }, - { - "url": "TemplateMarker", - "name": "Template Marker", - "category": "Data Binding", - "order": 7, - "component": "Excel", - "dir": "Excel", - "uid": "00444438", - "parentId": "044" - }, - { - "url": "WorkbookProtection", - "name": "Workbook Protection", - "category": "Security", - "order": 9, - "component": "Excel", - "dir": "Excel", - "uid": "00444439", - "parentId": "044" - }, - { - "url": "WorksheetProtection", - "name": "Worksheet Protection", - "category": "Security", - "order": 9, - "component": "Excel", - "dir": "Excel", - "uid": "00444440", - "parentId": "044" - }, - { - "url": "AutoFillOption", - "name": "Auto Fill & Fill Series", - "category": "Data Management", - "order": 6, - "component": "Excel", - "type": "new", - "dir": "Excel", - "uid": "0044450", - "parentId": "044" - }, - ], - "order": 7, - "uid": "044" - }, - { - "name": "Spreadsheet", - "directory": "Spreadsheet", - "category": "Editor", - "samples": [ - { - "url": "DefaultFunctionalities", - "name": "Default Functionalities", - "category": "Spreadsheet", - "component": "Spreadsheet", - "dir": "Spreadsheet", - "order": 1, - "parentId": "03", - "uid": "0301", - "sourceFiles": [ - { "displayName": "DefaultFunctionalities.cshtml", path: "../Views/Spreadsheet/DefaultFunctionalities.cshtml" }, - { "displayName": "DefaultFunctionalitiesController.cs", path: "../Controllers/Spreadsheet/DefaultFunctionalitiesController.cs" } - ] - }, - { - "url": "Formula", - "name": "Formula", - "category": "Spreadsheet", - "component": "Spreadsheet", - "dir": "Spreadsheet", - "order": 1, - "parentId": "03", - "uid": "0302", - "sourceFiles": [ - { "displayName": "Formula.cshtml", path: "../Views/Spreadsheet/Formula.cshtml" }, - { "displayName": "FormulaController.cs", path: "../Controllers/Spreadsheet/FormulaController.cs" } - ] - }, - { - "url": "ProtectSheet", - "name": "Protection", - "category": "Spreadsheet", - "component": "Spreadsheet", - "dir": "Spreadsheet", - "order": 1, - "parentId": "03", - "uid": "0303", - "sourceFiles": [ - { "displayName": "ProtectSheet.cshtml", path: "../Views/Spreadsheet/ProtectSheet.cshtml" }, - { "displayName": "ProtectSheetController.cs", path: "../Controllers/Spreadsheet/ProtectSheetController.cs" } - ] - }, - { - "url": "CellDataBinding", - "name": "Cell Data Binding", - "category": "Data Binding", - "component": "Spreadsheet", - "dir": "Spreadsheet", - "order": 2, - "parentId": "03", - "uid": "0304", - "sourceFiles": [ - { "displayName": "CellDataBinding.cshtml", path: "../Views/Spreadsheet/CellDataBinding.cshtml" }, - { "displayName": "CellDataBindingController.cs", path: "../Controllers/Spreadsheet/CellDataBindingController.cs" } - ] - }, - { - "url": "RemoteDataBinding", - "name": "Remote Data Binding", - "category": "Data Binding", - "component": "Spreadsheet", - "dir": "Spreadsheet", - "order": 2, - "parentId": "03", - "uid": "0305", - "sourceFiles": [ - { "displayName": "RemoteDataBinding.cshtml", path: "../Views/Spreadsheet/RemoteDataBinding.cshtml" }, - { "displayName": "RemoteDataBindingController.cs", path: "../Controllers/Spreadsheet/RemoteDataBindingController.cs" } - ] - }, - { - "url": "CellFormatting", - "name": "Cell Formatting", - "category": "Formatting", - "component": "Spreadsheet", - "dir": "Spreadsheet", - "order": 3, - "parentId": "03", - "uid": "0306", - "sourceFiles": [ - { "displayName": "CellFormatting.cshtml", path: "../Views/Spreadsheet/CellFormatting.cshtml" }, - { "displayName": "CellFormattingController.cs", path: "../Controllers/Spreadsheet/CellFormattingController.cs" } - ] - }, - { - "url": "NumberFormatting", - "name": "Number Formatting", - "category": "Formatting", - "component": "Spreadsheet", - "dir": "Spreadsheet", - "order": 3, - "parentId": "03", - "uid": "0307", - "sourceFiles": [ - { "displayName": "NumberFormatting.cshtml", path: "../Views/Spreadsheet/NumberFormatting.cshtml" }, - { "displayName": "NumberFormattingController.cs", path: "../Controllers/Spreadsheet/NumberFormattingController.cs" } - ] - }, - { - "url": "ConditionalFormatting", - "name": "Conditional Formatting", - "category": "Formatting", - "component": "Spreadsheet", - "dir": "Spreadsheet", - "order": 3, - "parentId": "03", - "uid": "0308", - "sourceFiles": [ - { "displayName": "ConditionalFormatting.cshtml", path: "../Views/Spreadsheet/ConditionalFormatting.cshtml" }, - { "displayName": "ConditionalFormattingController.cs", path: "../Controllers/Spreadsheet/ConditionalFormattingController.cs" } - ] - }, - { - "url": "SortingFiltering", - "name": "Sorting and Filtering", - "category": "Data Analysis", - "component": "Spreadsheet", - "dir": "Spreadsheet", - "order": 4, - "parentId": "03", - "uid": "0309", - "sourceFiles": [ - { "displayName": "SortingFiltering.cshtml", path: "../Views/Spreadsheet/SortingFiltering.cshtml" }, - { "displayName": "SortingFilteringController.cs", path: "../Controllers/Spreadsheet/SortingFilteringController.cs" } - ] - }, - { - "url": "Chart", - "name": "Chart", - "category": "Data Visualization", - "component": "Spreadsheet", - "dir": "Spreadsheet", - "order": 5, - "parentId": "03", - "uid": "0310", - "sourceFiles": [ - { "displayName": "Chart.cshtml", path: "../Views/Spreadsheet/Chart.cshtml" }, - { "displayName": "ChartController.cs", path: "../Controllers/Spreadsheet/ChartController.cs" } - ] - }, - { - "url": "Image", - "name": "Image", - "category": "Illustrations", - "component": "Spreadsheet", - "dir": "Spreadsheet", - "order": 6, - "parentId": "03", - "uid": "0311", - "sourceFiles": [ - { "displayName": "Image.cshtml", path: "../Views/Spreadsheet/Image.cshtml" }, - { "displayName": "ImageController.cs", path: "../Controllers/Spreadsheet/ImageController.cs" } - ] - }, - { - "url": "CellTemplates", - "name": "Cell Templates", - "category": "Templates", - "component": "Spreadsheet", - "dir": "Spreadsheet", - "order": 7, - "parentId": "03", - "uid": "0312", - "sourceFiles": [ - { "displayName": "CellTemplates.cshtml", path: "../Views/Spreadsheet/CellTemplates.cshtml" }, - { "displayName": "CellTemplatesController.cs", path: "../Controllers/Spreadsheet/CellTemplatesController.cs" } - ] - }, - { - "url": "FreezePane", - "name": "Freeze Panes", - "category": "Spreadsheet", - "component": "Spreadsheet", - "dir": "Spreadsheet", - "order": 1, - "parentId": "03", - "uid": "0313", - "sourceFiles": [ - { "displayName": "FreezePane.cshtml", path: "../Views/Spreadsheet/FreezePane.cshtml" }, - { "displayName": "FreezePaneController.cs", path: "../Controllers/Spreadsheet/FreezePaneController.cs" } - ] - }, - { - "url": "DataValidation", - "name": "Data Validation", - "category": "Spreadsheet", - "component": "Spreadsheet", - "dir": "Spreadsheet", - "order": 1, - "parentId": "03", - "uid": "0314", - "sourceFiles": [ - { "displayName": "DataValidation.cshtml", path: "../Views/Spreadsheet/DataValidation.cshtml" }, - { "displayName": "DataValidationController.cs", path: "../Controllers/Spreadsheet/DataValidationController.cs" } - ] - }, - { - "url": "Hyperlink", - "name": "Hyperlink", - "category": "Spreadsheet", - "component": "Spreadsheet", - "dir": "Spreadsheet", - "order": 1, - "parentId": "03", - "uid": "0315", - "sourceFiles": [ - { "displayName": "Hyperlink.cshtml", path: "../Views/Spreadsheet/Hyperlink.cshtml" }, - { "displayName": "HyperlinkController.cs", path: "../Controllers/Spreadsheet/HyperlinkController.cs" } - ] - }, - { - "url": "Notes", - "name": "Notes", - "category": "Review", - "component": "Spreadsheet", - "dir": "Spreadsheet", - "order": 8, - "parentId": "03", - "uid": "0316", - "sourceFiles": [ - { "displayName": "Notes.cshtml", path: "../Views/Spreadsheet/Notes.cshtml" }, - { "displayName": "NotesController.cs", path: "../Controllers/Spreadsheet/NotesController.cs" } - ] - }, - { - "url": "Print", - "name": "Print", - "category": "Printing", - "component": "Spreadsheet", - "dir": "Spreadsheet", - "order": 9, - "parentId": "03", - "uid": "0317", - "sourceFiles": [ - { "displayName": "Print.cshtml", path: "../Views/Spreadsheet/Print.cshtml" }, - { "displayName": "PrintController.cs", path: "../Controllers/Spreadsheet/PrintController.cs" } - ] - } - ], - "order": 0, - "uid": "03" - } -] diff --git a/PDF/EJ2CoreSampleBrowser_NET8.csproj b/PDF/EJ2CoreSampleBrowser_NET8.csproj deleted file mode 100644 index 5685df88..00000000 --- a/PDF/EJ2CoreSampleBrowser_NET8.csproj +++ /dev/null @@ -1,61 +0,0 @@ - - - - net8.0 - enable - enable - NET8_0 - false - false - en - - - - TRACE;RELEASE;$(SyncfusionLicensing) - - - - $(DefineConstants);REDIS - - - - - - - - - - - - - - - - - - - - - - - - - - - - Always - - - - - - - - - - - - - - diff --git a/PDF/EJ2CoreSampleBrowser_NET8.sln b/PDF/EJ2CoreSampleBrowser_NET8.sln deleted file mode 100644 index 6b087c1c..00000000 --- a/PDF/EJ2CoreSampleBrowser_NET8.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.8.34112.27 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EJ2CoreSampleBrowser_NET8", "EJ2CoreSampleBrowser_NET8.csproj", "{88189D22-0C47-4532-BCB4-21880180E031}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {88189D22-0C47-4532-BCB4-21880180E031}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {88189D22-0C47-4532-BCB4-21880180E031}.Debug|Any CPU.Build.0 = Debug|Any CPU - {88189D22-0C47-4532-BCB4-21880180E031}.Release|Any CPU.ActiveCfg = Release|Any CPU - {88189D22-0C47-4532-BCB4-21880180E031}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {EAFF0E5A-D397-4A01-8A96-838B4ADC1C37} - EndGlobalSection -EndGlobal diff --git a/PDF/EJ2CoreSampleBrowser_NET9.csproj b/PDF/EJ2CoreSampleBrowser_NET9.csproj deleted file mode 100644 index 187888e9..00000000 --- a/PDF/EJ2CoreSampleBrowser_NET9.csproj +++ /dev/null @@ -1,61 +0,0 @@ - - - - net9.0 - enable - enable - NET9_0 - false - false - en - - - - TRACE;RELEASE;$(SyncfusionLicensing) - - - - $(DefineConstants);REDIS - - - - - - - - - - - - - - - - - - - - - - - - - - - - Always - - - - - - - - - - - - - - diff --git a/PDF/EJ2CoreSampleBrowser_NET9.sln b/PDF/EJ2CoreSampleBrowser_NET9.sln deleted file mode 100644 index bda31093..00000000 --- a/PDF/EJ2CoreSampleBrowser_NET9.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.9.34526.213 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EJ2CoreSampleBrowser_NET9", "EJ2CoreSampleBrowser_NET9.csproj", "{ABD51386-00C6-4928-8794-A791C26A162A}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {ABD51386-00C6-4928-8794-A791C26A162A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ABD51386-00C6-4928-8794-A791C26A162A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ABD51386-00C6-4928-8794-A791C26A162A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ABD51386-00C6-4928-8794-A791C26A162A}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {319649AC-AC63-450B-BE9C-1A0E243742EF} - EndGlobalSection -EndGlobal diff --git a/PDF/sampleOrder.json b/PDF/sampleOrder.json deleted file mode 100644 index c8d29723..00000000 --- a/PDF/sampleOrder.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "Document Processing Library": [ "Pdf" ], - "Viewer": [ "PdfViewer" ] -} diff --git a/PDF/samplelist.js b/PDF/samplelist.js deleted file mode 100644 index ba1c1f24..00000000 --- a/PDF/samplelist.js +++ /dev/null @@ -1,850 +0,0 @@ -if (!window) { - - var window = exports.window = {}; -} -window.samplesList = [ - { - "name": "PDF", - "directory": "Pdf", - "category": "Document Processing Library", - "type": "update", - "samples": [ - { - "url": "Default", - "name": "Default", - "category": "PDF", - "order": 0, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464600" - }, - { - "url": "JobApplication", - "name": "Job Application", - "category": "Product Showcase", - "order": 1, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464601" - }, - { - "url": "Zugferd", - "name": "ZUGFeRD Invoice", - "category": "Product Showcase", - "order": 1, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464602" - }, - { - "url": "HelloWorld", - "name": "Hello World", - "category": "Getting Started", - "order": 2, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464603" - }, - { - "url": "CompressExistingPDF", - "name": "Compress Existing PDF", - "category": "Compression", - "order": 3, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464646", - "sourceFiles": [ - { "displayName": "CompressExistingPDF.cshtml", path: "../Views/Pdf/CompressExistingPDF.cshtml" }, - { "displayName": "CompressExistingPDFController.cs", path: "../Controllers/PDF/CompressExistingPDFController.cs" } - ] - }, - { - "url": "TextFlow", - "name": "Text Flow", - "category": "Drawing Text", - "order": 4, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464604" - }, - { - "url": "BulletsandLists", - "name": "Bullets and Lists", - "category": "Drawing Text", - "order": 4, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464605" - }, - { - "url": "RTLSupport", - "name": "RTL Text", - "category": "Drawing Text", - "order": 4, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464606" - }, - { - "url": "OpenTypeFont", - "name": "OpenType Font", - "category": "Drawing Text", - "order": 4, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464607" - }, - { - "url": "Barcode", - "name": "Barcode", - "category": "Graphics", - "order": 5, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464608" - }, - { - "url": "DrawingShapes", - "name": "Drawing Shapes", - "category": "Graphics", - "order": 5, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464609" - }, - { - "url": "GraphicBrushes", - "name": "Graphic Brushes", - "category": "Graphics", - "order": 5, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464610" - }, - { - "url": "ImageInsertion", - "name": "Image Insertion", - "category": "Graphics", - "order": 5, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464611" - }, - { - "url": "MultiColumnHtmlText", - "name": "Multi Column HTML Text", - "category": "Graphics", - "order": 5, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464649" - }, - { - "url": "AdventureCycle", - "name": "Adventure Cycle Works", - "category": "Tables", - "order": 6, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464612", - "sourceFiles": [ - { "displayName": "AdventureCycle.cshtml", path: "../Views/Pdf/AdventureCycle.cshtml" }, - { "displayName": "AdventureCycleController.cs", path: "../Controllers/PDF/AdventureCycleController.cs" } - ] - }, - { - "url": "TableFeatures", - "name": "Table Features", - "category": "Tables", - "order": 6, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464613" - }, - { - "url": "ExtractText", - "name": "Text Extraction", - "category": "Import and Export", - "order": 7, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464614" - }, - { - "url": "FindText", - "name": "Find Text", - "category": "Import and Export", - "order": 7, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464615", - "sourceFiles": [ - { "displayName": "FindText.cshtml", path: "../Views/Pdf/FindText.cshtml" }, - { "displayName": "FindTextController.cs", path: "../Controllers/PDF/FindTextController.cs" } - ] - }, - { - "url": "ImageExtraction", - "name": "Image Extraction", - "category": "Import and Export", - "order": 7, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464645" - }, - { - "url": "WordToPDF", - "name": "Word To PDF", - "category": "Conversions", - "order": 8, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464616" - }, - { - "url": "TiffToPDF", - "name": "TIFF To PDF", - "category": "Conversions", - "order": 8, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464641" - }, - { - "url": "ImageToPDF", - "name": "Image To PDF", - "category": "Conversions", - "order": 8, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464651" - }, - { - "url": "PDFToImage", - "name": "PDF To Image", - "category": "Conversions", - "order": 8, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464652" - }, - { - "url": "XPSToPDF", - "name": "XPS To PDF", - "category": "Conversions", - "order": 8, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464642" - }, - { - "url": "HtmltoPDF", - "name": "HTML to PDF", - "category": "Conversions", - "order": 8, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464659", - "parentId": "038", - "sourceFiles": [ - { "displayName": "HtmltoPDF.cshtml", path: "../PDF/HtmltoPDFConversion.txt" }, - { "displayName": "HtmlToPDFController.cs", path: "../PDF/HtmlToPDFController.txt" } - ] - }, - { - "url": "Encryption", - "name": "Encryption", - "category": "Security", - "order": 9, - "type": "update", - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464617" - }, - { - "url": "DigitalSignature", - "name": "Digital Signature", - "category": "Security", - "order": 9, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464618" - }, - { - "url": "DigitalSignatureValidation", - "name": "Digital Signature Validation", - "category": "Security", - "order": 9, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464644", - "sourceFiles": [ - { "displayName": "DigitalSignatureValidation.cshtml", path: "../Views/Pdf/DigitalSignatureValidation.cshtml" }, - { "displayName": "DigitalSignatureValidationController.cs", path: "../Controllers/PDF/DigitalSignatureValidationController.cs" } - ] - }, - { - "url": "Redaction", - "name": "Redaction", - "category": "Security", - "order": 9, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464647" - }, - { - "url": "DocumentSettings", - "name": "Document Settings", - "category": "Settings", - "order": 10, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464619" - }, - { - "url": "PageSettings", - "name": "Page Settings", - "category": "Settings", - "order": 10, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464620" - }, - { - "url": "HeadersandFooters", - "name": "Headers and Footers", - "category": "Settings", - "order": 10, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464621" - }, - { - "url": "Layers", - "name": "Layers", - "category": "Settings", - "order": 10, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464622" - }, - { - "url": "FindPDFCorruption", - "name": "Find PDF Corruption", - "category": "Analyze Document", - "order": 11, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464643", - "sourceFiles": [ - { "displayName": "FindPDFCorruption.cshtml", path: "../Views/Pdf/FindPDFCorruption.cshtml" }, - { "displayName": "FindPDFCorruptionController.cs", path: "../Controllers/PDF/FindPDFCorruptionController.cs" } - ] - }, - { - "url": "InteractiveFeatures", - "name": "Interactive Features", - "category": "User Interaction", - "order": 12, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464623" - }, - { - "url": "FormFilling", - "name": "Form Filling", - "category": "User Interaction", - "order": 12, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464624", - "sourceFiles": [ - { "displayName": "FormFilling.cshtml", path: "../Views/Pdf/FormFilling.cshtml" }, - { "displayName": "FormFillingController.cs", path: "../Controllers/PDF/FormFillingController.cs" } - ] - }, - { - "url": "XFAFormCreation", - "name": "XFA Form Creation", - "category": "User Interaction", - "order": 12, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464625" - }, - { - "url": "XFAFormFilling", - "name": "XFA Form Filling", - "category": "User Interaction", - "order": 12, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464626" - }, - { - "url": "Portfolio", - "name": "Portfolio", - "category": "User Interaction", - "order": 12, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464627" - }, - { - "url": "AnnotationFlatten", - "name": "Annotations", - "category": "User Interaction", - "order": 12, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464628" - }, - { - "url": "NamedDestination", - "name": "Named Destination", - "category": "User Interaction", - "order": 12, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464629" - }, - { - "url": "Bookmarks", - "name": "Bookmarks", - "category": "User Interaction", - "order": 12, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464630" - }, - { - "url": "Attachments", - "name": "File Attachments", - "category": "User Interaction", - "order": 12, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464631" - }, - { - "url": "Conformance", - "name": "PDF Conformance", - "category": "Conformance", - "order": 13, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464632" - }, - { - "url": "PdfToPdfAConverter", - "name": "PDF to PDF-A", - "category": "Conformance", - "order": 13, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464648" - }, - { - "url": "MergeDocuments", - "name": "Merge Documents", - "category": "Modify Documents", - "order": 14, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464633" - }, - { - "url": "SplitPDF", - "name": "Split PDF", - "category": "Modify Documents", - "order": 14, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464634" - }, - { - "url": "OverlayDocuments", - "name": "Overlay Documents", - "category": "Modify Documents", - "order": 14, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464635" - }, - { - "url": "Booklet", - "name": "Booklet", - "category": "Modify Documents", - "order": 14, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464636" - }, - { - "url": "WatermarkPDF", - "name": "Watermark PDF", - "category": "Modify Documents", - "order": 14, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464637" - }, - { - "url": "RearrangePages", - "name": "Rearrange Pages", - "category": "Modify Documents", - "order": 14, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464638" - }, - { - "url": "RemoveImages", - "name": "Remove Images", - "category": "Modify Documents", - "order": 14, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464650" - }, - { - "url": "Autotag", - "name": "Autotag", - "category": "Accessibility", - "order": 15, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464639" - }, - { - "url": "Customtag", - "name": "Customtag", - "category": "Accessibility", - "order": 15, - "component": "PDF", - "dir": "Pdf", - "parentId": "046", - "uid": "00464640" - } - ], - "order": 7, - "uid": "046" - }, - { - "name": "PDF Viewer", - "directory": "PdfViewer", - "category": "Viewer", - "type": "update", - "samples": [ - { - "url": "Default", - "name": "Default Functionalities", - "category": "PDF Viewer", - "order": 0, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "048", - "uid": "0048480", - "sourceFiles": [ - { "displayName": "Default.cshtml", path: "../Views/PdfViewer/Default.cshtml" }, - { "displayName": "DefaultController.cs", path: "../Controllers/PdfViewer/DefaultController.cs" } - ] - }, - { - "url": "ReadOnly", - "name": "Read-Only", - "category": "Document Security", - "order": 1, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "048", - "uid": "0048481", - "sourceFiles": [ - { "displayName": "ReadOnly.cshtml", path: "../Views/PdfViewer/ReadOnly.cshtml" }, - { "displayName": "ReadOnlyController.cs", path: "../Controllers/PdfViewer/ReadOnlyController.cs" } - ] - }, - { - "url": "DocumentList", - "name": "Document List", - "category": "File Management", - "order": 2, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "048", - "uid": "0048482", - "sourceFiles": [ - { "displayName": "DocumentList.cshtml", path: "../Views/PdfViewer/DocumentList.cshtml" }, - { "displayName": "DocumentListController.cs", path: "../Controllers/PdfViewer/DocumentListController.cs" } - ] - }, - { - "url": "MultiFormatViewer", - "name": "Multi-Format Viewer", - "category": "File Management", - "order": 2, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "048", - "uid": "0048483", - "sourceFiles": [ - { "displayName": "MultiFormatViewer.cshtml", path: "../Views/PdfViewer/MultiFormatViewer.cshtml" }, - { "displayName": "MultiFormatViewerController.cs", path: "../Controllers/PdfViewer/MultiFormatViewerController.cs" } - ] - }, - { - "url": "OrganizePages", - "name": "Organize Pages", - "category": "Editor", - "order": 3, - "type": "update", - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "048", - "uid": "0048484", - "sourceFiles": [ - { "displayName": "OrganizePages.cshtml", path: "../Views/PdfViewer/OrganizePages.cshtml" }, - { "displayName": "OrganizePagesController.cs", path: "../Controllers/PdfViewer/OrganizePagesController.cs" } - ] - }, - { - "url": "Redaction", - "name": "Redaction", - "category": "Editor", - "order": 3, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "048", - "uid": "0048485", - "sourceFiles": [ - { "displayName": "Redaction.cshtml", path: "../Views/PdfViewer/Redaction.cshtml" }, - { "displayName": "RedactionController.cs", path: "../Controllers/PdfViewer/RedactionController.cs" } - ] - }, - { - "url": "CustomToolbar", - "name": "Toolbar", - "category": "Customization", - "order": 4, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "048", - "uid": "0048486", - "sourceFiles": [ - { "displayName": "CustomToolbar.cshtml", path: "../Views/PdfViewer/CustomToolbar.cshtml" }, - { "displayName": "CustomToolbarController.cs", path: "../Controllers/PdfViewer/CustomToolbarController.cs" } - ] - }, - { - "url": "CustomContextMenu", - "name": "Context Menu", - "category": "Customization", - "order": 4, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "048", - "uid": "0048487", - "sourceFiles": [ - { "displayName": "CustomContextMenu.cshtml", path: "../Views/PdfViewer/CustomContextMenu.cshtml" }, - { "displayName": "CustomContextMenuController.cs", path: "../Controllers/PdfViewer/CustomContextMenuController.cs" } - ] - }, - { - "url": "RightToLeft", - "name": "Right To Left", - "category": "Localization", - - "order": 5, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "048", - - "uid": "0048488", - "sourceFiles": [ - { "displayName": "RightToLeft.cshtml", path: "../Views/PdfViewer/RightToLeft.cshtml" }, - { "displayName": "RightToLeftController.cs", path: "../Controllers/PdfViewer/RightToLeftController.cs" } - ] - }, - { - "url": "FormFilling", - "name": "Form Filling", - "category": "PDF Form", - - "order": 6, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "048", - - "uid": "0048489", - "sourceFiles": [ - { "displayName": "FormFilling.cshtml", path: "../Views/PdfViewer/FormFilling.cshtml" }, - { "displayName": "FormFillingController.cs", path: "../Controllers/PdfViewer/FormFillingController.cs" } - ] - }, - { - "url": "FormDesigner", - "name": "Form Designer", - "category": "PDF Form", - - "order": 6, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "048", - - "uid": "0048490", - "sourceFiles": [ - { "displayName": "FormDesigner.cshtml", path: "../Views/PdfViewer/FormDesigner.cshtml" }, - { "displayName": "FormDesignerController.cs", path: "../Controllers/PdfViewer/FormDesignerController.cs" } - ] - }, - { - "url": "ESigningFormDesigner", - "name": "eSigning Form Designer", - "category": "PDF Form", - - "order": 6, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "048", - "hideOnDevice": true, - - "uid": "0048491", - "sourceFiles": [ - { "displayName": "ESigningFormDesigner.cshtml", path: "../Views/PdfViewer/ESigningFormDesigner.cshtml" }, - { "displayName": "ESigningFormDesigner.cs", path: "../Controllers/PdfViewer/ESigningFormDesigner.cs" } - ] - }, - { - "url": "ESigningPdfForms", - "name": "eSigning PDF Forms", - "category": "PDF Form", - - "order": 6, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "048", - - "uid": "0048492", - "sourceFiles": [ - { "displayName": "ESigningPdfForms.cshtml", path: "../Views/PdfViewer/ESigningPdfForms.cshtml" }, - { "displayName": "ESigningPdfForms.cs", path: "../Controllers/PdfViewer/ESigningPdfForms.cs" } - ] - }, - { - "url": "Annotations", - "name": "Annotations", - "category": "Annotation", - "order": 7, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "048", - "type": "update", - "uid": "0048493", - "sourceFiles": [ - { "displayName": "Annotations.cshtml", path: "../Views/PdfViewer/Annotations.cshtml" }, - { "displayName": "AnnotationsController.cs", path: "../Controllers/PdfViewer/AnnotationsController.cs" } - ] - }, - { - "url": "ProgrammaticOperations", - "name": "Programmatic Operations", - "category": "Annotation", - "order": 7, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "048", - "type": "update", - "uid": "0048494", - "sourceFiles": [ - { "displayName": "ProgrammaticOperations.cshtml", path: "../Views/PdfViewer/ProgrammaticOperations.cshtml" }, - { "displayName": "ProgrammaticOperationsController.cs", path: "../Controllers/PdfViewer/ProgrammaticOperationsController.cs" } - ] - }, - { - "url": "HandwrittenSignature", - "name": "Handwritten Signature", - "category": "Signature", - - "order": 8, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "048", - - "uid": "0048495", - "sourceFiles": [ - { "displayName": "HandwrittenSignature.cshtml", path: "../Views/PdfViewer/HandwrittenSignature.cshtml" }, - { "displayName": "HandwrittenSignatureController.cs", path: "../Controllers/PdfViewer/HandwrittenSignatureController.cs" } - ] - }, - { - "url": "InvisibleDigitalSignature", - "name": "Invisible Digital Signature", - "category": "Signature", - "order": 8, - "component": "PdfViewer", - "dir": "PdfViewer", - "parentId": "048", - "uid": "0048496", - "sourceFiles": [ - { "displayName": "InvisibleDigitalSignature.cshtml", path: "../Views/PdfViewer/InvisibleDigitalSignature.cshtml" }, - { "displayName": "InvisibleDigitalSignatureController.cs", path: "../Controllers/PdfViewer/InvisibleDigitalSignatureController.cs" } - ] - } - ], - "order": 8, - "uid": "048" - } -] diff --git a/Pages/Excel/AttendanceTracker.cshtml b/Pages/Excel/AttendanceTracker.cshtml deleted file mode 100644 index 4061b137..00000000 --- a/Pages/Excel/AttendanceTracker.cshtml +++ /dev/null @@ -1,54 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.AttendanceTracker -@section ActionDescription { - This sample demonstrates how to use AttendanceTracker in spreadsheets using XlsIO. -} - -@section Meta { - -} - -@section Description { - Attendance Tracker or Attendance sheet is essential to any organization. This Attendance tracker is designed to keep one month data. In this application, Employee Name, Supervisor, Present Count, Absent Count, Leave Count, Unplanned%, Planned% and dates for a particular month are available. -
-
- Features: -
-
Essential XlsIO supports Attendance Tracker application features. This sample demonstrates following features: -
-
-
    -
  • Conditional formatting
  • -
  • Advanced options of Excel--such as color scales, data bars
  • -
  • Number formats
  • -
  • Formulas
  • -
  • Text styles (bold, italic, underline, font name, and font color)
  • -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("attendancetracker", "excel", FormMethod.Post); - { -
-

- Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
-
-
- -
-
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Attendance Tracker Example - Syncfusion Demos -} -@section Header { -

Example of Attendance Tracker in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/AttendanceTracker.cshtml.cs b/Pages/Excel/AttendanceTracker.cshtml.cs deleted file mode 100644 index 5774e5a9..00000000 --- a/Pages/Excel/AttendanceTracker.cshtml.cs +++ /dev/null @@ -1,277 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.EJ2.Buttons; -using Syncfusion.XlsIO; -using System.Globalization; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class AttendanceTracker : PageModel - { - #region Constants - string[] _columnNames; - private List _employeeAttendanceList; - #endregion - // - // GET: /AttendanceTracker/ - - public ActionResult OnPost(string button) - { - _columnNames = new string[] { "Employee Name", "Supervisor", "Present Count", "Leave Count", "Absent Count", "Unplanned %", "Planned %" }; - if (button == null) - return null; - - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - AttendanceDetailsGenerator attendanceDetailsGenerator = new AttendanceDetailsGenerator(); - _employeeAttendanceList = attendanceDetailsGenerator.GetEmployeeAttendanceDetails(2019, 01); - - #region Workbook Initialize - ExcelEngine excelEngine = new ExcelEngine(); - IApplication application = excelEngine.Excel; - application.EnableIncrementalFormula = true; - application.DefaultVersion = ExcelVersion.Excel2016; - IWorkbook workbook = application.Workbooks.Create(1); - IWorksheet worksheet = workbook.Worksheets[0]; - - DateTime dateTime = DateTime.Now; - string monthName = dateTime.ToString("MMM", CultureInfo.InvariantCulture); - worksheet.Name = monthName + "-" + dateTime.Year; - - CreateHeaderRow(worksheet);//Format header row - FillAttendanceDetails(worksheet); - ApplyConditionFormatting(worksheet); - - #region Apply Styles - worksheet.Range["A1:AL1"].RowHeight = 24; - worksheet.Range["A2:AL31"].RowHeight = 20; - worksheet.Range["A1:B1"].ColumnWidth = 20; - worksheet.Range["C1:G1"].ColumnWidth = 16; - worksheet.Range["H1:AL31"].ColumnWidth = 4; - - worksheet.Range["A1:AL31"].CellStyle.Font.Bold = true; - worksheet.Range["A1:AL31"].CellStyle.Font.Size = 12; - worksheet.Range["A2:AL31"].CellStyle.Font.RGBColor = Color.FromArgb(64, 64, 64); - worksheet.Range["A1:AL31"].CellStyle.VerticalAlignment = ExcelVAlign.VAlignCenter; - - worksheet.Range["A1:AL1"].CellStyle.Font.Color = ExcelKnownColors.White; - worksheet.Range["A1:AL1"].CellStyle.Color = Color.FromArgb(58, 56, 56); - - worksheet.Range["A1:B31"].CellStyle.HorizontalAlignment = ExcelHAlign.HAlignLeft; - worksheet.Range["C2:G31"].CellStyle.HorizontalAlignment = ExcelHAlign.HAlignCenter; - worksheet.Range["H1:AL31"].CellStyle.HorizontalAlignment = ExcelHAlign.HAlignCenter; - - worksheet.Range["A2:B31"].CellStyle.IndentLevel = 1; - worksheet.Range["A1:G1"].CellStyle.IndentLevel = 1; - - worksheet.Range["A1:AL1"].BorderAround(ExcelLineStyle.Medium, Color.LightGray); - worksheet.Range["A1:AL1"].BorderInside(ExcelLineStyle.Medium, Color.LightGray); - - worksheet.Range["A2:G31"].BorderAround(ExcelLineStyle.Medium, Color.LightGray); - worksheet.Range["A2:G31"].BorderInside(ExcelLineStyle.Medium, Color.LightGray); - - worksheet.Range["H2:AL31"].BorderInside(ExcelLineStyle.Medium, ExcelKnownColors.White); - #endregion - #endregion - - try - { - - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "AttendanceTracker.xlsx"); - } - catch (Exception) - { - } - - // Close the workbook - workbook.Close(); - excelEngine.Dispose(); - return null; - } - #region HelperMethods - /// - /// Apply the conditonal format using workbook - /// - /// worksheet used to get the range and set the conditional formats - private void ApplyConditionFormatting(IWorksheet worksheet) - { - IConditionalFormats statusCondition = worksheet["H2:AL31"].ConditionalFormats; - - IConditionalFormat leaveCondition = statusCondition.AddCondition(); - leaveCondition.FormatType = ExcelCFType.CellValue; - leaveCondition.Operator = ExcelComparisonOperator.Equal; - leaveCondition.FirstFormula = "\"L\""; - leaveCondition.BackColorRGB = Color.FromArgb(253, 167, 92); - - IConditionalFormat absentCondition = statusCondition.AddCondition(); - absentCondition.FormatType = ExcelCFType.CellValue; - absentCondition.Operator = ExcelComparisonOperator.Equal; - absentCondition.FirstFormula = "\"A\""; - absentCondition.BackColorRGB = Color.FromArgb(255, 105, 124); - - IConditionalFormat presentCondition = statusCondition.AddCondition(); - presentCondition.FormatType = ExcelCFType.CellValue; - presentCondition.Operator = ExcelComparisonOperator.Equal; - presentCondition.FirstFormula = "\"P\""; - presentCondition.BackColorRGB = Color.FromArgb(67, 233, 123); - - IConditionalFormat weekendCondition = statusCondition.AddCondition(); - weekendCondition.FormatType = ExcelCFType.CellValue; - weekendCondition.Operator = ExcelComparisonOperator.Equal; - weekendCondition.FirstFormula = "\"WE\""; - weekendCondition.BackColorRGB = Color.FromArgb(240, 240, 240); - - IConditionalFormats presentSummaryCF = worksheet["C2:C31"].ConditionalFormats; - IConditionalFormat presentCountCF = presentSummaryCF.AddCondition(); - presentCountCF.FormatType = ExcelCFType.DataBar; - IDataBar dataBar = presentCountCF.DataBar; - dataBar.BarColor = Color.FromArgb(61, 242, 142); - - IConditionalFormats leaveSummaryCF = worksheet["D2:D31"].ConditionalFormats; - IConditionalFormat leaveCountCF = leaveSummaryCF.AddCondition(); - leaveCountCF.FormatType = ExcelCFType.DataBar; - dataBar = leaveCountCF.DataBar; - dataBar.BarColor = Color.FromArgb(242, 71, 23); - - IConditionalFormats absentSummaryCF = worksheet["E2:E31"].ConditionalFormats; - IConditionalFormat absentCountCF = absentSummaryCF.AddCondition(); - absentCountCF.FormatType = ExcelCFType.DataBar; - dataBar = absentCountCF.DataBar; - dataBar.BarColor = Color.FromArgb(255, 10, 69); - - IConditionalFormats unplannedSummaryCF = worksheet["F2:F31"].ConditionalFormats; - IConditionalFormat unplannedCountCF = unplannedSummaryCF.AddCondition(); - unplannedCountCF.FormatType = ExcelCFType.DataBar; - dataBar = unplannedCountCF.DataBar; - dataBar.MaxPoint.Type = ConditionValueType.HighestValue; - dataBar.BarColor = Color.FromArgb(142, 142, 142); - - IConditionalFormats plannedSummaryCF = worksheet["G2:G31"].ConditionalFormats; - IConditionalFormat plannedCountCF = plannedSummaryCF.AddCondition(); - plannedCountCF.FormatType = ExcelCFType.DataBar; - dataBar = plannedCountCF.DataBar; - dataBar.MaxPoint.Type = ConditionValueType.HighestValue; - dataBar.BarColor = Color.FromArgb(56, 136, 254); - - } - /// - /// Used to fill the attendance details - /// - /// worksheet used to get the range and fill attendance details - private void FillAttendanceDetails(IWorksheet worksheet) - { - int rowIndex = 2; - foreach (EmployeeDetails empDetails in _employeeAttendanceList) - { - - worksheet["A" + rowIndex].Text = empDetails.Name; - worksheet["B" + rowIndex].Text = empDetails.Supervisor; - for (int colIndex = 0; colIndex < empDetails.Attendances.Count; colIndex++) - { - worksheet[rowIndex, colIndex + 8].Text = empDetails.Attendances[colIndex]; - } - rowIndex++; - } - //Data validation for list - IDataValidation validation = worksheet.Range["H2:AL31"].DataValidation; - validation.ListOfValues = new string[] { "P", "A", "L", "WE" }; - - - worksheet["C2:C31"].Formula = "=CountIf('H2:AL2',\"P\")"; - worksheet["D2:D31"].Formula = "=CountIf('H2:AL2',\"L\")"; - worksheet["E2:E31"].Formula = "=CountIf('H2:AL2',\"A\")"; - worksheet["F2:F31"].Formula = "=E2/(C2+D2+E2)"; - worksheet["G2:G31"].Formula = "=D2/(C2+D2+E2)"; - worksheet["F2:G31"].NumberFormat = ".00 %"; - } - - private void CreateHeaderRow(IWorksheet worksheet) - { - for (int i = 0; i < _columnNames.Length; i++) - { - worksheet[1, i + 1].Text = _columnNames[i]; - } - worksheet["H1"].DateTime = new DateTime(2019, 1, 1); - - worksheet["I1:AL1"].Formula = "=H1+1"; - worksheet["H1:AL1"].NumberFormat = "d"; - } - #endregion - - } - #region HelperClasses - /// - /// Returrn the list of employee details - /// - public class EmployeeDetails - { - public string Name { get; set; } - public string Supervisor { get; set; } - public List Attendances { get; set; } - - public EmployeeDetails() - { - Attendances = new List(); - } - - } - /// - /// Get the attendance details and return the list - /// - public class AttendanceDetailsGenerator - { - private List _employeeAttendanceList; - string[] _dayStatus; - string[] _supervisor; - string[] _employeeNames; - - public AttendanceDetailsGenerator() - { - _employeeAttendanceList = new List(); - _dayStatus = new string[] { "P", "L", "P", "A", "P" }; - _supervisor = new string[] { "Mary Saveley", "Liz Nixon", "Liu Wong", "Michael Holz" }; - _employeeNames = new string[] { "Maria Anders", "Ana Trujillo", "Antonio Moreno", "Thomas Hardy", "Christina Berglund", "Hanna Moos", - "Frederique Citeaux", "Martin Sommer", "Laurence Lebihan", "Elizabeth Lincoln", "Victoria Ashworth", "Patricio Simpson", - "Francisco Chang", "Yang Wang", "Pedro Afonso", "Elizabeth Brown", "Steve Rogers", "Ann Devon", - "Philip Cramer", "Daniel Tonini", "Annette Roulet", "John Smith", "Maria Larsson", "Howard Stark", - "Peter Franken", "Aria Cruz", "Philip Gary", "Fran Willamson", "Howard Snyde", "Mario Pontes"}; - } - - public List GetEmployeeAttendanceDetails(int year, int month) - { - Random rnd = new Random(); - for (int i = 0; i < 30; i++) - { - EmployeeDetails details = new EmployeeDetails(); - details.Name = _employeeNames[i]; - details.Supervisor = _supervisor[rnd.Next(_supervisor.Length)]; - int numberOfDays = DateTime.DaysInMonth(year, month); - for (int j = 0; j < numberOfDays; j++) - { - DateTime date = new DateTime(year, month, j + 1); - if (date.DayOfWeek == DayOfWeek.Saturday || date.DayOfWeek == DayOfWeek.Sunday) - details.Attendances.Add("WE"); - else - details.Attendances.Add(_dayStatus[rnd.Next(_dayStatus.Length)]); - } - _employeeAttendanceList.Add(details); - } - return _employeeAttendanceList; - } - } - #endregion -} - diff --git a/Pages/Excel/AutoFillOption.cshtml b/Pages/Excel/AutoFillOption.cshtml deleted file mode 100644 index c856ebb2..00000000 --- a/Pages/Excel/AutoFillOption.cshtml +++ /dev/null @@ -1,225 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.AutoFillOption - -@section ActionDescription { -This sample demonstrates how to use the Auto Fill and Fill Series options with XlsIO. -} - -@section Meta { - -} - -@section Description { - The Auto Fill and Fill Series features enable users to programmatically populate a range of Excel cells based on defined patterns, sequences, or trends. These capabilities help reduce manual data entry by automatically generating values using built-in logic. -
-
-Features: -
    -
  • Allows automatic filling of cells with common sequences, including numbers, months, and custom patterns.
  • -
  • Offers Fill Series options, including linear, growth, and date-based sequences.
  • -
  • Supports configuration of step value, stop value, series direction, and trend usage.
  • -
-} - -@section ControlsSection { -
- @{ - Html.BeginForm("autofilloption", "excel", FormMethod.Post); - { -
-

- Click the "Create Document" button to generate and view the Excel file. You can enter the Step Value and Stop Value as either a number or a date in MM/DD/YYYY format, and the generated document can be opened using Microsoft Excel or Excel Viewer. -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- - - - -
-
- -
- - -
- - -
- -
- -
-
- -
- - Html.EndForm(); - } - } -
- @{ - - var autoFillOptions = new List{ - "Default", - "Copy", - "Series", - "Formats", - "Values", - "Days", - "Weekdays", - "Months", - "Years", - "Linear Trend", - "Growth Trend" - }; - - var fillSeriesOptions = new List - { - "Linear", - "Growth", - "Days", - "Weekdays", - "Months", - "Years", - "Auto Fill" - }; - - var trendOnlyOptions = new List { "Linear", "Growth" }; - - var autoFillOptionsJson = System.Text.Json.JsonSerializer.Serialize(autoFillOptions); - var fillSeriesOptionsJson = System.Text.Json.JsonSerializer.Serialize(fillSeriesOptions); - var trendOnlyOptionsJson = System.Text.Json.JsonSerializer.Serialize(trendOnlyOptions); - } - - - -} - - - -@section Title { - ASP.NET Core Excel (XlsIO) - Auto Fill and Fill Series Example - Syncfusion Demos -} - -@section Header { -

Example of Auto Fill and Fill Series in ASP.NET Core Excel (XlsIO)

-} diff --git a/Pages/Excel/AutoFillOption.cshtml.cs b/Pages/Excel/AutoFillOption.cshtml.cs deleted file mode 100644 index 0e5f3d10..00000000 --- a/Pages/Excel/AutoFillOption.cshtml.cs +++ /dev/null @@ -1,370 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; -using Syncfusion.Drawing; -using EJ2CoreSampleBrowser.Models; -using Microsoft.AspNetCore.Mvc.Rendering; -using Syncfusion.EJ2.Spreadsheet; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class AutoFillOption: PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public AutoFillOption(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - private bool m_isTrend; - public bool IsTrend { get {return m_isTrend; } set {m_isTrend = value; } } - public List FillOptions { get; set; } - private string m_fillType = "AutoFill"; - public string FillType - { - get - { - return m_fillType; - } - set - { - m_fillType = value; - } - - } - - public void OnGet(bool isTrend) - { - m_isTrend = isTrend; - FillOptions = GetFillOptions(isTrend); - } - - public List GetFillOptions(bool isTrend) - { - - List options; - - if (!isTrend) - { - options = new List{ - "Default", - "Copy", - "Series", - "Formats", - "Values", - "Days", - "Weekdays", - "Months", - "Years", - "Linear Trend", - "Growth Trend" - }; - } - else - { - options = new List() { "Linear", "Growth" }; - } - - return options; - } - public IActionResult OnPost(string FillOption, string StepValueText, string StopValueText, string SeriesBy, bool IsTrend, string FillType) - { - IWorkbook workbook; - - if (FillType.Contains("AutoFill")) - { - - workbook = AutoFill(GetAutoFillEnum(FillOption)); - } - else - { - - workbook = AutoFill(GetFillSeriesEnum( FillOption), SeriesBy == "Rows" ? ExcelSeriesBy.Rows : ExcelSeriesBy.Columns, StepValueText, StopValueText, IsTrend); - } - - MemoryStream stream = new MemoryStream(); - workbook.SaveAs(stream); - stream.Position = 0; - - return File(stream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", FillType.Contains("AutoFill")? "AutoFill.xlsx" : "FilleSeries.xlsx"); - } - - - public IWorkbook AutoFill(ExcelAutoFillType autoFillOption) - { - - //Instantiate the spreadsheet creation engine - ExcelEngine excelEngine = new ExcelEngine(); - - //Instantiate the excel application object - IApplication application = excelEngine.Excel; - application.DefaultVersion = ExcelVersion.Xlsx; - IWorkbook workbook = application.Workbooks.Create(1); - - IWorksheet sheet = workbook.Worksheets[0]; - sheet["A1"].Number = 2; - sheet["A2"].Number = 4; - sheet["A3"].Number = 6; - - switch (autoFillOption) - { - case ExcelAutoFillType.FillDefault: - case ExcelAutoFillType.FillCopy: - case ExcelAutoFillType.FillValues: - case ExcelAutoFillType.FillSeries: - case ExcelAutoFillType.GrowthTrend: - case ExcelAutoFillType.LinearTrend: - { - sheet["A1:A3"].AutoFill(sheet["A4:A1000"], autoFillOption); - break; - } - case ExcelAutoFillType.FillFormats: - { - sheet["A1"].CellStyle.Color = Color.Blue; - sheet["A2"].CellStyle.Color = Color.Red; - sheet["A3"].CellStyle.Color = Color.Chocolate; - sheet["A1:A3"].NumberFormat = "$0.00"; - sheet["A1:A3"].AutoFill(sheet["A4:A1000"], autoFillOption); - break; - } - case ExcelAutoFillType.FillMonths: - case ExcelAutoFillType.FillDays: - case ExcelAutoFillType.FillWeekdays: - case ExcelAutoFillType.FillYears: - { - DateTime dateTime = new DateTime(2025, 1, 1); - sheet["A1"].Value2 = dateTime; - sheet["A2"].Value2 = dateTime.AddDays(1); - sheet["A3"].Value2 = dateTime.AddDays(2); - sheet["A1:A3"].NumberFormat = "m/d/yyyy"; - sheet["A1:A3"].AutoFill(sheet["A4:A1000"], autoFillOption); - break; - } - - } - sheet.UsedRange.ColumnWidth = 10; - return workbook; - - - } - - /// - /// Table Slicer - /// - /// Return the created excel document as stream - public IWorkbook AutoFill(ExcelFillSeries fillSeries, ExcelSeriesBy seriesBy, object stepValue, object stopValue, bool enableTrend) - { - ExcelEngine excelEngine = new ExcelEngine(); - - //Step 2 : Instantiate the excel application object - IApplication application = excelEngine.Excel; - application.DefaultVersion = ExcelVersion.Excel2016; - - IWorkbook workbook = application.Workbooks.Create(); - IWorksheet sheet = workbook.Worksheets[0]; - if (seriesBy == ExcelSeriesBy.Columns) - { - sheet["A1"].Number = 2; - sheet["A2"].Number = 4; - sheet["A3"].Number = 6; - } - else - { - sheet["A1"].Number = 2; - sheet["B1"].Number = 4; - sheet["C1"].Number = 6; - } - - stepValue = stepValue != null ? ConvertObject(stepValue.ToString()) : stepValue; - stopValue = stopValue != null ? ConvertObject(stopValue.ToString()) : stopValue; - - switch (fillSeries) - { - case ExcelFillSeries.AutoFill: - case ExcelFillSeries.Linear: - case ExcelFillSeries.Growth: - break; - case ExcelFillSeries.Years: - case ExcelFillSeries.Days: - case ExcelFillSeries.Weekdays: - case ExcelFillSeries.Months: - { - if (seriesBy == ExcelSeriesBy.Columns) - { - DateTime dateTime = new DateTime(2025, 1, 1); - sheet["A1"].Value2 = dateTime; - sheet["A2"].Value2 = dateTime.AddDays(1); - sheet["A3"].Value2 = dateTime.AddDays(2); - sheet["A1:A3"].NumberFormat = "m/d/yyyy"; - } - else - { - DateTime dateTime = new DateTime(2025, 1, 1); - sheet["A1"].Value2 = dateTime; - sheet["B1"].Value2 = dateTime.AddDays(1); - sheet["C1"].Value2 = dateTime.AddDays(2); - sheet["A1:C1"].NumberFormat = "m/d/yyyy"; - } - - break; - } - - } - if (seriesBy == ExcelSeriesBy.Columns) - { - if (enableTrend) - sheet[1, 1, 1000, 1].FillSeries(seriesBy, fillSeries, enableTrend); - else if (stepValue == null && stopValue == null) - { - if (fillSeries == ExcelFillSeries.AutoFill) - { - sheet[1, 1, 1000, 1].FillSeries(seriesBy, fillSeries, enableTrend); - } - } - else if (stepValue == null && stopValue != null || stepValue != null && stopValue == null) - { - bool isStepValue = stepValue != null ; - if (isStepValue) - { - if (stepValue is DateTime) - sheet[1, 1, 1000, 1].FillSeries(seriesBy, fillSeries, (DateTime)stepValue, isStepValue); - else if (stepValue is double) - sheet[1, 1, 1000, 1].FillSeries(seriesBy, fillSeries, (double)stepValue, isStepValue); - } - else - { - if (stopValue is DateTime) - sheet[1, 1, 1000, 1].FillSeries(seriesBy, fillSeries, (DateTime)stopValue, isStepValue); - else if (stopValue is double) - sheet[1, 1, 1000, 1].FillSeries(seriesBy, fillSeries, (double)stopValue, isStepValue); - } - } - else - { - if (stepValue is DateTime && stopValue is DateTime) - sheet[1, 1, 1000, 1].FillSeries(seriesBy, fillSeries, (DateTime)stepValue, (DateTime)stopValue); - else if (stepValue is DateTime && stopValue is double) - sheet[1, 1, 1000, 1].FillSeries(seriesBy, fillSeries, (DateTime)stepValue, (double)stopValue); - else if (stepValue is double && stopValue is double) - sheet[1, 1, 1000, 1].FillSeries(seriesBy, fillSeries, (double)stepValue, (double)stopValue); - else if (stepValue is double && stopValue is DateTime) - sheet[1, 1, 1000, 1].FillSeries(seriesBy, fillSeries, (double)stepValue, (DateTime)stopValue); - } - } - else - { - if (enableTrend) - sheet[1, 1, 1, 1000].FillSeries(seriesBy, fillSeries, enableTrend); - else if (stepValue == null && stopValue == null) - { - if (fillSeries == ExcelFillSeries.AutoFill) - { - sheet[1, 1, 1, 1000].FillSeries(seriesBy, fillSeries, enableTrend); - } - } - else if (stepValue == null && stopValue != null || stepValue != null && stopValue == null) - { - bool isStepValue = stepValue != null; - if (isStepValue) - { - if (stepValue is DateTime) - sheet[1, 1, 1, 1000].FillSeries(seriesBy, fillSeries, (DateTime)stepValue, isStepValue); - else if (stepValue is double) - sheet[1, 1, 1, 1000].FillSeries(seriesBy, fillSeries, (double)stepValue, isStepValue); - } - else - { - if (stopValue is DateTime) - sheet[1, 1, 1, 1000].FillSeries(seriesBy, fillSeries, (DateTime)stopValue, isStepValue); - else if (stopValue is double) - sheet[1, 1, 1, 1000].FillSeries(seriesBy, fillSeries, (double)stopValue, isStepValue); - } - } - else - { - if (stepValue is DateTime && stopValue is DateTime) - sheet[1, 1, 1, 1000].FillSeries(seriesBy, fillSeries, (DateTime)stepValue, (DateTime)stopValue); - else if (stepValue is DateTime && stopValue is double) - sheet[1, 1, 1, 1000].FillSeries(seriesBy, fillSeries, (DateTime)stepValue, (double)stopValue); - else if (stepValue is double && stopValue is double) - sheet[1, 1, 1, 1000].FillSeries(seriesBy, fillSeries, (double)stepValue, (double)stopValue); - else if (stepValue is double && stopValue is DateTime) - sheet[1, 1, 1, 1000].FillSeries(seriesBy, fillSeries, (double)stepValue, (DateTime)stopValue); - } - } - sheet.UsedRange.ColumnWidth = 10; - - return workbook; - - } - - - public object ConvertObject(string value) - { - if (string.IsNullOrEmpty(value)) return string.Empty; - if (double.TryParse(value, out double d)) return d; - if (DateTime.TryParse(value, out DateTime dt)) return dt; - return value; - } - - private ExcelAutoFillType GetAutoFillEnum(string type) - { - switch (type) - { - case "Default": - return ExcelAutoFillType.FillDefault; - case "Copy": - return ExcelAutoFillType.FillCopy; - case "Series": - return ExcelAutoFillType.FillSeries; - case "Formats": - return ExcelAutoFillType.FillFormats; - case "Values": - return ExcelAutoFillType.FillValues; - case "Days": - return ExcelAutoFillType.FillDays; - case "Weekdays": - return ExcelAutoFillType.FillWeekdays; - case "Months": - return ExcelAutoFillType.FillMonths; - case "Years": - return ExcelAutoFillType.FillYears; - case "Linear Trend": - return ExcelAutoFillType.LinearTrend; - case "Growth Trend": - return ExcelAutoFillType.GrowthTrend; - default: - return ExcelAutoFillType.FillDefault; - } - } - private ExcelFillSeries GetFillSeriesEnum(string type) - { - switch (type) - { - case "Linear": - return ExcelFillSeries.Linear; - case "Growth": - return ExcelFillSeries.Growth; - case "Days": - return ExcelFillSeries.Days; - case "Weekdays": - return ExcelFillSeries.Weekdays; - case "Months": - return ExcelFillSeries.Months; - case "Years": - return ExcelFillSeries.Years; - case "Auto Fill": - return ExcelFillSeries.AutoFill; - default: - return ExcelFillSeries.AutoFill; - } - } - } - -} diff --git a/Pages/Excel/AutoFilter.cshtml b/Pages/Excel/AutoFilter.cshtml deleted file mode 100644 index 8f5c96a1..00000000 --- a/Pages/Excel/AutoFilter.cshtml +++ /dev/null @@ -1,254 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.AutoFilter -@section ActionDescription { - This sample demonstrates how to use Autofilters in spreadsheets using XlsIO. -} - -@section Meta { - -} - -@section Description { - XlsIO can filter a range of cells dynamically without any dependency of Microsoft Excel. -
-
- Features: -
-
-
    -
  • Custom Filter
  • -
  • Text Filter
  • -
  • DateTime Filter
  • -
  • Dynamic Filter
  • -
  • Color Filter
  • -
  • Icon Filter
  • -
  • Advanced Filter
  • -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("autofilter", "excel", FormMethod.Post); - { -
-

- Click the "Input Template" button to view the input Excel document and click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
-
-
-   - -
-
-
-
-                     - - -   - - -
-
-                                          - - -
- -
-                       - - -   - - -
-
-                              - -
-
-                  - -                                         -
-
-
- - - - - -
-                           - -
-
${iconId}
")"> - - - -
-
${iconId}
")"> - - - -
-
${iconId}
")"> - - - - -
-
-
-
-
- - - - - - -
- - -    - - -
-
-
- -
- - - - - - Html.EndForm(); - } - } -
-} -@section Scripts { - - -} -@section Title { - ASP.NET Core Excel (XlsIO) library - Filters Example - Syncfusion Demos -} -@section Header { -

Example of Filters in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/AutoFilter.cshtml.cs b/Pages/Excel/AutoFilter.cshtml.cs deleted file mode 100644 index 374a5e45..00000000 --- a/Pages/Excel/AutoFilter.cshtml.cs +++ /dev/null @@ -1,276 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; -using Syncfusion.Drawing; -using EJ2CoreSampleBrowser.Models; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class AutoFilter : PageModel - { - public List DataSource= icons.GetSymbols(); - public List DataSource2= icons.GetRating(); - public List DataSource3 = icons.GetArrows(); - private readonly IWebHostEnvironment _hostingEnvironment; - public AutoFilter(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string id, string FilterType, string button, string colorsList, string rdb1, string rdb3, string iconText, string iconSetTypeList, string field, string checkbox) - { - - string basePath = _hostingEnvironment.WebRootPath; - - if (FilterType == null) - { - return null; - } - else if (button == "Input Template") - { - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - IWorkbook workbook; - if (FilterType == "Advanced Filter") - { - FileStream inputStream = new FileStream(basePath + @"/XlsIO/AdvancedFilterData.xlsx", FileMode.Open, FileAccess.Read); - workbook = application.Workbooks.Open(inputStream); - } - else if (FilterType == "Color Filter") - { - FileStream inputStream = new FileStream(basePath + @"/XlsIO/FilterData_Color.xlsx", FileMode.Open, FileAccess.Read); - workbook = application.Workbooks.Open(inputStream); - } - else if (FilterType == "Icon Filter") - { - FileStream inputStream = new FileStream(basePath + @"/XlsIO/IconFilterData.xlsx", FileMode.Open, FileAccess.Read); - workbook = application.Workbooks.Open(inputStream); - } - else - { - FileStream inputStream = new FileStream(basePath + @"/XlsIO/FilterData.xlsx", FileMode.Open, FileAccess.Read); - workbook = application.Workbooks.Open(inputStream); - } - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - return File(ms, "Application/msexcel", "InputTemplate.xlsx"); - - - } - else - { - string fileName = null; - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - IWorkbook workbook; - if (FilterType == "Advanced Filter") - { - FileStream inputStream = new FileStream(basePath + @"/XlsIO/AdvancedFilterData.xlsx", FileMode.Open, FileAccess.Read); - workbook = application.Workbooks.Open(inputStream); - } - else if (FilterType == "Color Filter") - { - FileStream inputStream = new FileStream(basePath + @"/XlsIO/FilterData_Color.xlsx", FileMode.Open, FileAccess.Read); - workbook = application.Workbooks.Open(inputStream); - } - else if (FilterType == "Icon Filter") - { - FileStream inputStream = new FileStream(basePath + @"/XlsIO/IconFilterData.xlsx", FileMode.Open, FileAccess.Read); - workbook = application.Workbooks.Open(inputStream); - } - else - { - FileStream inputStream = new FileStream(basePath + @"/XlsIO/FilterData.xlsx", FileMode.Open, FileAccess.Read); - workbook = application.Workbooks.Open(inputStream); - } - IWorksheet sheet = workbook.Worksheets[0]; - if (FilterType != "Advanced Filter") - sheet.AutoFilters.FilterRange = sheet.Range[1, 1, 49, 3]; - - switch (FilterType) - { - case "Custom Filter": - fileName = "CustomFilter.xlsx"; - IAutoFilter filter1 = sheet.AutoFilters[0]; - filter1.IsAnd = false; - filter1.FirstCondition.ConditionOperator = ExcelFilterCondition.Equal; - filter1.FirstCondition.DataType = ExcelFilterDataType.String; - filter1.FirstCondition.String = "Owner"; - - filter1.SecondCondition.ConditionOperator = ExcelFilterCondition.Equal; - filter1.SecondCondition.DataType = ExcelFilterDataType.String; - filter1.SecondCondition.String = "Sales Representative"; - break; - - case "Text Filter": - fileName = "TextFilter.xlsx"; - IAutoFilter filter2 = sheet.AutoFilters[0]; - filter2.AddTextFilter(new string[] { "Owner", "Sales Representative", "Sales Associate" }); - break; - - case "DateTime Filter": - fileName = "DateTimeFilter.xlsx"; - IAutoFilter filter3 = sheet.AutoFilters[1]; - filter3.AddDateFilter(new DateTime(2004, 9, 1, 1, 0, 0, 0), DateTimeGroupingType.month); - filter3.AddDateFilter(new DateTime(2011, 1, 1, 1, 0, 0, 0), DateTimeGroupingType.year); - break; - - case "Dynamic Filter": - fileName = "DynamicFilter.xlsx"; - IAutoFilter filter4 = sheet.AutoFilters[1]; - filter4.AddDynamicFilter(DynamicFilterType.Quarter1); - break; - - case "Color Filter": - fileName = "ColorFilter.xlsx"; - #region ColorFilter - sheet.AutoFilters.FilterRange = sheet["A1:C49"]; - - Syncfusion.Drawing.Color color = Syncfusion.Drawing.Color.Empty; - switch (colorsList.ToLower()) - { - case "red": - color = Color.Red; - break; - case "blue": - color = Color.Blue; - break; - case "green": - color = Color.Green; - break; - case "yellow": - color = Color.Yellow; - break; - case "empty": - color = Color.Empty; - break; - } - if (rdb3 == "FontColor") - { - IAutoFilter filter = sheet.AutoFilters[2]; - filter.AddColorFilter(color, ExcelColorFilterType.FontColor); - } - else - { - IAutoFilter filter = sheet.AutoFilters[0]; - filter.AddColorFilter(color, ExcelColorFilterType.CellColor); - } - - - #endregion - break; - - case "Icon Filter": - fileName = "IconFilter.xlsx"; - #region IconFilter - sheet.AutoFilters.FilterRange = sheet["A4:D44"]; - int filterIndex = 0; - ExcelIconSetType iconset = ExcelIconSetType.FiveArrows; - int iconId = 0; - switch (iconSetTypeList) - { - case "ThreeSymbols": - iconset = ExcelIconSetType.ThreeSymbols; - filterIndex = 3; - break; - case "FourRating": - iconset = ExcelIconSetType.FourRating; - filterIndex = 1; - break; - case "FiveArrows": - iconset = ExcelIconSetType.FiveArrows; - filterIndex = 2; - break; - } - switch (iconText) - { - case "0": - //Do nothing - break; - case "1": - iconId = 1; - break; - case "2": - iconId = 2; - break; - case "3": - if (iconSetTypeList.Equals("ThreeSymbols")) - iconset = (ExcelIconSetType)(-1); - else - iconId = 3; - break; - case "4": - if (iconSetTypeList.Equals("FourRating")) - iconset = (ExcelIconSetType)(-1); - else - iconId = 4; - break; - case "5": - iconset = (ExcelIconSetType)(-1); - break; - } - IAutoFilter filter5 = sheet.AutoFilters[filterIndex]; - filter5.AddIconFilter(iconset, iconId); - #endregion - break; - - case "Advanced Filter": - fileName = "AdvancedFilter.xlsx"; - #region AdvancedFilter - - IRange filterRange = sheet.Range["A8:G51"]; - IRange criteriaRange = sheet.Range["A2:B5"]; - if (rdb1 == "FilterIN") - { - sheet.AdvancedFilter(ExcelFilterAction.FilterInPlace, filterRange, criteriaRange, null, checkbox == "Unique"); - } - else if (rdb1 == "FilterCopy") - { - IRange range = sheet.Range["I7:O7"]; - range.Merge(); - range.Text = "FilterCopy"; - range.CellStyle.Font.RGBColor = Syncfusion.Drawing.Color.FromArgb(0, 112, 192); - range.HorizontalAlignment = ExcelHAlign.HAlignCenter; - range.CellStyle.Font.Bold = true; - IRange copyRange = sheet.Range["I8"]; - sheet.AdvancedFilter(ExcelFilterAction.FilterCopy, filterRange, criteriaRange, copyRange, checkbox == "Unique"); - } - break; - #endregion - } - - workbook.Version = ExcelVersion.Excel2016; - - try - { - MemoryStream result = new MemoryStream(); - workbook.SaveAs(result); - result.Position = 0; - - - return File(result, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName); - } - catch (Exception) - { - } - - //Close the workbook. - workbook.Close(); - excelEngine.Dispose(); - return null; - } - } - } -} diff --git a/Pages/Excel/AutoShapes.cshtml b/Pages/Excel/AutoShapes.cshtml deleted file mode 100644 index 8f9ba832..00000000 --- a/Pages/Excel/AutoShapes.cshtml +++ /dev/null @@ -1,54 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.AutoShapes -@section ActionDescription { - This sample demonstrates how to use AutoShapes in spreadsheets using XlsIO. -} - -@section Meta { - -} - -@section Description { - AutoShapes help you to draw objects on your document. You can create various shapes using AutoShapeType enumeration. Once you insert an AutoShape, you can also put a text inside it and you can move or resize them as you wish. -
-
The IShape interface is the in-memory representation of the AutoShapes in an Excel workbook. These are used to create Autoshapes and to set properties for those shapes. The ITextFrame interface can be used to set various shape text formats. -
-
- Features: -
-
Essential XlsIO supports all major AutoShape features.This sample demonstrates following features: -
-
-
    -
  • Shape Text
  • -
  • Text Alignment
  • -
  • SolidFill
  • -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("autoshapes", "excel", FormMethod.Post); - { -
-

- Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
-
-
- -
-
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - AutoShapes Example - Syncfusion Demos -} -@section Header { -

Example of AutoShapes in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/AutoShapes.cshtml.cs b/Pages/Excel/AutoShapes.cshtml.cs deleted file mode 100644 index 5728b2c8..00000000 --- a/Pages/Excel/AutoShapes.cshtml.cs +++ /dev/null @@ -1,192 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Syncfusion.XlsIO; -using Syncfusion.Drawing; -using Microsoft.AspNetCore.Mvc.RazorPages; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class AutoShapes : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public AutoShapes(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button) - { - if (button == null) - return null; - - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - application.DefaultVersion = ExcelVersion.Excel2016; - - //A new workbook is created.[Equivalent to creating a new workbook in Microsoft Excel] - //The new workbook will have 1 worksheet. - IWorkbook workbook = application.Workbooks.Create(1); - //The first worksheet object in the worksheets collection is accessed. - IWorksheet worksheet = workbook.Worksheets[0]; - - #region AddAutoShapes - IShape shape; - string text; - IFont font; - IFont font2; - - font = workbook.CreateFont(); - font.Color = ExcelKnownColors.White; - font.FontName = "Segoe UI"; - font.Bold = true; - font.Size = 12; - - font2 = workbook.CreateFont(); - font2.Color = ExcelKnownColors.White; - font2.FontName = "Segoe UI"; - font2.Bold = true; - font2.Size = 20; - - text = "Requirement"; - shape = worksheet.Shapes.AddAutoShapes(AutoShapeType.RoundedRectangle, 2, 7, 60, 192); - shape.TextFrame.TextRange.Text = text; - shape.TextFrame.TextRange.RichText.SetFont(0, text.Length - 1, font); - shape.TextFrame.TextRange.RichText.SetFont(0, 0, font2); - shape.Fill.ForeColor = Color.FromArgb(245, 147, 30); - shape.Line.Visible = false; - shape.TextFrame.VerticalAlignment = ExcelVerticalAlignment.MiddleCentered; - - shape = worksheet.Shapes.AddAutoShapes(AutoShapeType.DownArrow, 5, 8, 40, 64); - shape.Fill.ForeColorIndex = ExcelKnownColors.White; - shape.Line.ForeColorIndex = ExcelKnownColors.Blue; - shape.Line.Weight = 1; - - font = workbook.CreateFont(); - font.Color = ExcelKnownColors.White; - font.FontName = "Segoe UI"; - font.Size = 12; - - font2 = workbook.CreateFont(); - font2.Color = ExcelKnownColors.White; - font2.FontName = "Segoe UI"; - font2.Size = 20; - - text = "Design"; - shape = worksheet.Shapes.AddAutoShapes(AutoShapeType.RoundedRectangle, 7, 7, 60, 192); - shape.TextFrame.TextRange.Text = text; - shape.TextFrame.TextRange.RichText.SetFont(0, text.Length - 1, font); - shape.TextFrame.TextRange.RichText.SetFont(0, 0, font2); - shape.Line.Visible = false; - shape.Fill.ForeColor = Color.FromArgb(153, 175, 60); - shape.TextFrame.VerticalAlignment = ExcelVerticalAlignment.MiddleCentered; - - - shape = worksheet.Shapes.AddAutoShapes(AutoShapeType.DownArrow, 10, 8, 40, 64); - shape.Fill.ForeColorIndex = ExcelKnownColors.White; - shape.Line.ForeColorIndex = ExcelKnownColors.Blue; - shape.Line.Weight = 1; - - font = workbook.CreateFont(); - font.Color = ExcelKnownColors.White; - font.FontName = "Segoe UI"; - font.Italic = true; - font.Size = 12; - - font2 = workbook.CreateFont(); - font2.Color = ExcelKnownColors.White; - font2.FontName = "Segoe UI"; - font2.Size = 20; - font2.Italic = true; - - text = "Execution"; - shape = worksheet.Shapes.AddAutoShapes(AutoShapeType.RoundedRectangle, 12, 7, 60, 192); - shape.TextFrame.TextRange.Text = text; - shape.TextFrame.TextRange.RichText.SetFont(0, text.Length - 1, font); - shape.TextFrame.TextRange.RichText.SetFont(0, 0, font2); - shape.Line.Visible = false; - shape.Fill.ForeColor = Color.FromArgb(236, 28, 36); - shape.TextFrame.VerticalAlignment = ExcelVerticalAlignment.MiddleCentered; - - shape = worksheet.Shapes.AddAutoShapes(AutoShapeType.DownArrow, 15, 8, 40, 64); - shape.Fill.ForeColorIndex = ExcelKnownColors.White; - shape.Line.ForeColorIndex = ExcelKnownColors.Blue; - shape.Line.Weight = 1; - - font = workbook.CreateFont(); - font.Color = ExcelKnownColors.Dark_red; - font.FontName = "Segoe UI"; - font.Size = 12; - font.Underline = ExcelUnderline.Single; - - font2 = workbook.CreateFont(); - font2.Color = ExcelKnownColors.Dark_red; - font2.FontName = "Segoe UI"; - font2.Size = 20; - font2.Underline = ExcelUnderline.Single; - - - text = "Testing"; - shape = worksheet.Shapes.AddAutoShapes(AutoShapeType.RoundedRectangle, 17, 7, 60, 192); - shape.TextFrame.TextRange.Text = text; - shape.TextFrame.TextRange.RichText.SetFont(0, text.Length - 1, font); - shape.TextFrame.TextRange.RichText.SetFont(0, 0, font2); - shape.Line.Visible = false; - shape.Fill.ForeColor = Color.FromArgb(248, 188, 25); - shape.TextFrame.VerticalAlignment = ExcelVerticalAlignment.MiddleCentered; - - shape = worksheet.Shapes.AddAutoShapes(AutoShapeType.DownArrow, 20, 8, 40, 64); - shape.Fill.ForeColorIndex = ExcelKnownColors.White; - shape.Line.ForeColorIndex = ExcelKnownColors.Blue; - shape.Line.Weight = 1; - - font = workbook.CreateFont(); - font.Color = ExcelKnownColors.Black; - font.FontName = "Segoe UI"; - font.Size = 12; - - font2 = workbook.CreateFont(); - font2.Color = ExcelKnownColors.Black; - font2.FontName = "Segoe UI"; - font2.Size = 20; - - - text = "Release"; - shape = worksheet.Shapes.AddAutoShapes(AutoShapeType.RoundedRectangle, 22, 7, 60, 192); - shape.TextFrame.TextRange.Text = text; - shape.TextFrame.TextRange.RichText.SetFont(0, text.Length - 1, font); - shape.TextFrame.TextRange.RichText.SetFont(0, 0, font2); - shape.Line.Visible = false; - shape.Fill.ForeColor = Color.FromArgb(93, 193, 208); - shape.TextFrame.VerticalAlignment = ExcelVerticalAlignment.MiddleCentered; - #endregion - - try - { - - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "AutoShapes.xlsx"); - } - catch (Exception) - { - } - - // Close the workbook - workbook.Close(); - excelEngine.Dispose(); - return null; - } - } -} diff --git a/Pages/Excel/CSVToExcel.cshtml b/Pages/Excel/CSVToExcel.cshtml deleted file mode 100644 index 56e81fa1..00000000 --- a/Pages/Excel/CSVToExcel.cshtml +++ /dev/null @@ -1,68 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.CSVToExcel -@section ActionDescription { - This sample demonstrates how to convert CSV documents to Excel documents using XlsIO. -} - -@section Meta { - -} - -@section Description { -
Essential XlsIO allows to export CSV document to Excel. -
-
Features: -
-
-
    -
  • Supports conversion of CSV documents to Excel format that includes text, numbers, formulas, and number formatting.
  • -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("csvtoexcel", "excel", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
-

- Select the CSV document to convert to Excel and click the "Convert to Excel" button. Please note that the Microsoft Excel or an Excel viewer is required to view the Excel document. -

-
-
-
- - - - -
-
-
- -
-
- @ViewData["Message"] -
-
- Html.EndForm(); - } - } -
- -} -@section Title { - ASP.NET Core Excel (XlsIO) library - Excel To PDF Example - Syncfusion Demos -} -@section Header { -

Example of CSV To Excel conversion in ASP.NET Core Excel (XlsIO) Library

-} diff --git a/Pages/Excel/CSVToExcel.cshtml.cs b/Pages/Excel/CSVToExcel.cshtml.cs deleted file mode 100644 index f8826c42..00000000 --- a/Pages/Excel/CSVToExcel.cshtml.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class CSVToExcel : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public CSVToExcel(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button, IFormFile file) - { - if (button == null) - return null; - string basePath = _hostingEnvironment.WebRootPath; - ExcelEngine excelEngine = new ExcelEngine(); - IApplication application = excelEngine.Excel; - Stream fileStream = null; - if (file == null) - { - fileStream = new FileStream(basePath + @"/XlsIO/CSVToExcelTemplate.csv", FileMode.Open, FileAccess.Read); - } - else - { - fileStream = file.OpenReadStream(); - } - fileStream.Position = 0; - - //Loads CSV document - IWorkbook workbook = application.Workbooks.Open(fileStream, ","); - - //Save workbook - MemoryStream ms = new MemoryStream(); - workbook.Version = ExcelVersion.Xlsx; - string ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - string fileName = "Sample.xlsx"; - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, ContentType, fileName); - } - } -} diff --git a/Pages/Excel/CallCenterDashboard.cshtml b/Pages/Excel/CallCenterDashboard.cshtml deleted file mode 100644 index 5812d075..00000000 --- a/Pages/Excel/CallCenterDashboard.cshtml +++ /dev/null @@ -1,58 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.CallCenterDashboard -@section ActionDescription { - This sample demonstrates how to use CallCenterDashboard in spreadsheets using XlsIO. -} - -@section Meta { - -} - -@section Description { - Call Center dashboard helps in assessing the performance in different levels such as call center level, agent level, and department level over a period of time. -
-
- Features: -
-
Essential XlsIO supports Call Center dashboard application features. This sample demonstrates following features: -
-
-
    -
  • Number formats
  • -
  • Formulas
  • -
  • Cell style formattings (Borders, Font, Alignment, Fill color)
  • -
  • Rich-text formatting
  • -
  • Macros for scroll-bars and option buttons
  • -
  • Advanced conditional formatting with icon sets
  • -
  • Sparklines
  • -
  • Charts
  • -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("callcenterdashboard", "excel", FormMethod.Post); - { -
-

- Click the "Input Template" button to view the input Excel document and click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
-
-
- - -
-
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Call Center Dashboard Example - Syncfusion Demos -} -@section Header { -

Example of Call Center Dashboard in ASP.NET Core Excel (XlsIO) Library

-} diff --git a/Pages/Excel/CallCenterDashboard.cshtml.cs b/Pages/Excel/CallCenterDashboard.cshtml.cs deleted file mode 100644 index 88d1045b..00000000 --- a/Pages/Excel/CallCenterDashboard.cshtml.cs +++ /dev/null @@ -1,650 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; -using Syncfusion.Drawing; -using Syncfusion.Office; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class CallCenterDashboard : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public CallCenterDashboard(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button) - { - string basePath = _hostingEnvironment.WebRootPath; - - if (button == null) - return null; - - else if (button == "Input Template") - { - Stream ms = new FileStream(basePath + @"/XlsIO/CallCenterTemplate.xlsx", FileMode.Open, FileAccess.Read); - string ContentType = "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - string fileName = "Template.xlsx"; - return File(ms, ContentType, fileName); - } - else - { - #region Workbook Initialize - //Initialize the spreadsheet creation engine - ExcelEngine excelEngine = new ExcelEngine(); - - //Initialize the Excel application object - IApplication application = excelEngine.Excel; - - //Set the default application version - application.DefaultVersion = ExcelVersion.Excel2016; - - //Enable the incremental formula - application.EnableIncrementalFormula = true; - - //Disable the chart cache serialization - application.IsChartCacheEnabled = false; - - //Load the existing Excel document into IWorkbook - FileStream sampleFile = new FileStream(basePath + @"/XlsIO/CallCenterTemplate.xlsx", FileMode.Open); - IWorkbook workbook = application.Workbooks.Open(sampleFile); - sampleFile.Dispose(); - #endregion - - #region Calculation Sheet - //Access the Calculation sheet - IWorksheet calculation = workbook.Worksheets["Calculation"]; - - //Formula calculation is enabled for the sheet - calculation.EnableSheetCalculations(); - - calculation.Range["A1"].Text = "Week"; - calculation.Range["B1"].Text = "Sorting Control"; - - calculation.Range["D2"].NumberFormat = "dd-mmm-yyyy"; - calculation.Range["D2"].Formula = "=DATE(2016,1,4)+7*(A2-1)"; - - calculation.Range["E2"].Formula = "=\"Week # \"&A2"; - - #region Call data in the week - calculation.Range["A4"].Text = "Total Calls"; - calculation.Range["B4"].Formula = "=COUNTIF(Data[Column1],TRUE)"; - - calculation.Range["A5"].Text = "Calls Answered"; - calculation.Range["B5"].Formula = "=SUMPRODUCT((Data[Answered (Y/N)]=\"Y\")*(Data[Column1]=TRUE))"; - - calculation.Range["A6"].Text = "Avg Speed of Answer"; - calculation.Range["B6"].Formula = "=SUMPRODUCT((Data[Speed of Answer]),--(Data[Column1]=TRUE))/B4"; - - calculation.Range["A7"].Text = "Abandon Rate"; - calculation.Range["B7"].Formula = "=SUMPRODUCT((Data[Answered (Y/N)]=\"N\")*(Data[Column1]=TRUE))/B4"; - - calculation.Range["A8"].Text = "Avg Call/Min"; - calculation.Range["B8"].Formula = "=B4/(7*9*60)"; - - calculation.Range["A9"].Text = "Satisfaction Overall"; - calculation.Range["B9"].Formula = "=SUMPRODUCT((Data[Satisfaction rating]),--(Data[Column1]=TRUE))/B5"; - - calculation.Range["A10"].Text = "Calls of Less than 180 Seconds"; - calculation.Range["B10"].Formula = "=SUMPRODUCT((Data[Column1]=TRUE)*(Data[Answered (Y/N)]=\"Y\")*(Data[AvgTalkDuration] -} - -@section Description { -
-

- A chart sheet is a worksheet in a workbook that has its own sheet name. These are employed to give a clearer view when using a large chart with a large data. The chart is linked to worksheet data and is updated automatically when there are changes. - The IChart interface is the in-memory representation of the chart worksheet in an Excel workbook. These are used to create charts and to set properties for those charts. The IChartSerie interface can be used to set various formats for a series. -

-
- Features: -
-
-
    -
  • Axes
  • -
  • Labels
  • -
  • Titles
  • -
  • Gradients
  • -
  • Chart Types
  • -
  • Chart Filters
  • -
-
-
-} -@section ControlsSection { -
- @{ - Html.BeginForm("chartworksheet", "excel", FormMethod.Post); - { -

- Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
- Save As : - - -   - - -
-
-
- -
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Chart Worksheet Example - Syncfusion Demos -} -@section Header { -

Example of Chart Worksheet in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/ChartWorksheet.cshtml.cs b/Pages/Excel/ChartWorksheet.cshtml.cs deleted file mode 100644 index 7a1c891e..00000000 --- a/Pages/Excel/ChartWorksheet.cshtml.cs +++ /dev/null @@ -1,187 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class ChartWorksheet : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public ChartWorksheet(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string Saveoption) - { - if (Saveoption == null) - return null; - - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - // Default version is set as Excel 2007 - if (Saveoption == "Xls") - application.DefaultVersion = ExcelVersion.Excel97to2003; - else - application.DefaultVersion = ExcelVersion.Excel2016; - - //A new workbook is created.[Equivalent to creating a new workbook in Microsoft Excel] - //The new workbook will have 1 worksheet. - IWorkbook workbook = application.Workbooks.Create(1); - //The first worksheet object in the worksheets collection is accessed. - IWorksheet sheet = workbook.Worksheets[0]; - - // Entering the Datas for the chart - sheet.Range["A1"].Text = "Crescent City, CA"; - sheet.Range["A1:D1"].Merge(); - sheet.Range["A1"].CellStyle.Font.Bold = true; - - sheet.Range["B3"].Text = "Precipitation,in."; - sheet.Range["C3"].Text = "Temperature,deg.F"; - - sheet.Range["A4"].Text = "Jan"; - sheet.Range["A5"].Text = "Feb"; - sheet.Range["A6"].Text = "March"; - sheet.Range["A7"].Text = "Apr"; - sheet.Range["A8"].Text = "May"; - sheet.Range["A9"].Text = "June"; - sheet.Range["A10"].Text = "July"; - sheet.Range["A11"].Text = "Aug"; - sheet.Range["A12"].Text = "Sept"; - sheet.Range["A13"].Text = "Oct"; - sheet.Range["A14"].Text = "Nov"; - sheet.Range["A15"].Text = "Dec"; - - sheet.Range["B4"].Number = 10.9; - sheet.Range["B5"].Number = 8.9; - sheet.Range["B6"].Number = 8.6; - sheet.Range["B7"].Number = 4.8; - sheet.Range["B8"].Number = 3.2; - sheet.Range["B9"].Number = 1.4; - sheet.Range["B10"].Number = 0.6; - sheet.Range["B11"].Number = 0.7; - sheet.Range["B12"].Number = 1.7; - sheet.Range["B13"].Number = 5.4; - sheet.Range["B14"].Number = 9.0; - sheet.Range["B15"].Number = 10.4; - - sheet.Range["C4"].Number = 47.5; - sheet.Range["C5"].Number = 48.7; - sheet.Range["C6"].Number = 48.9; - sheet.Range["C7"].Number = 50.2; - sheet.Range["C8"].Number = 53.1; - sheet.Range["C9"].Number = 56.3; - sheet.Range["C10"].Number = 58.1; - sheet.Range["C11"].Number = 59.0; - sheet.Range["C12"].Number = 58.5; - sheet.Range["C13"].Number = 55.4; - sheet.Range["C14"].Number = 51.1; - sheet.Range["C15"].Number = 47.8; - sheet.UsedRange.AutofitColumns(); - - // Adding a New chart to the Existing Worksheet - IChart chart = workbook.Charts.Add(); - chart.DataRange = sheet.Range["A3:C15"]; - chart.Name = "CrescentCity,CA"; - chart.ChartTitle = "Crescent City, CA"; - chart.IsSeriesInRows = false; - - chart.PrimaryValueAxis.Title = "Precipitation,in."; - chart.PrimaryValueAxis.TitleArea.TextRotationAngle = 90; - chart.PrimaryValueAxis.MaximumValue = 14.0; - chart.PrimaryValueAxis.NumberFormat = "0.0"; - - // Format serie - IChartSerie serieOne = chart.Series[0]; - serieOne.Name = "Precipitation,in."; - serieOne.SerieFormat.Fill.FillType = ExcelFillType.Gradient; - serieOne.SerieFormat.Fill.TwoColorGradient(ExcelGradientStyle.Vertical, ExcelGradientVariants.ShadingVariants_2); - serieOne.SerieFormat.Fill.GradientColorType = ExcelGradientColor.TwoColor; - serieOne.SerieFormat.Fill.ForeColor = Color.Plum; - - //Show value as data labels - serieOne.DataPoints.DefaultDataPoint.DataLabels.IsValue = true; - serieOne.DataPoints.DefaultDataPoint.DataLabels.Position = ExcelDataLabelPosition.Outside; - - //Format the second serie - IChartSerie serieTwo = chart.Series[1]; - serieTwo.SerieType = ExcelChartType.Line_Markers; - serieTwo.Name = "Temperature,deg.F"; - - //Format marker - serieTwo.SerieFormat.MarkerStyle = ExcelChartMarkerType.Diamond; - serieTwo.SerieFormat.MarkerSize = 8; - serieTwo.SerieFormat.MarkerBackgroundColor = Color.DarkGreen; - serieTwo.SerieFormat.MarkerForegroundColor = Color.DarkGreen; - serieTwo.SerieFormat.LineProperties.LineColor = Color.DarkGreen; - - //Use Secondary Axis - serieTwo.UsePrimaryAxis = false; - - //Display secondary axis for the series. - chart.SecondaryCategoryAxis.IsMaxCross = true; - chart.SecondaryValueAxis.IsMaxCross = true; - - //Set the title - chart.SecondaryValueAxis.Title = "Temperature,deg.F"; - chart.SecondaryValueAxis.TitleArea.TextRotationAngle = 90; - - //Hide the secondary category axis - chart.SecondaryCategoryAxis.Border.LineColor = Color.Transparent; - chart.SecondaryCategoryAxis.MajorTickMark = ExcelTickMark.TickMark_None; - chart.SecondaryCategoryAxis.TickLabelPosition = ExcelTickLabelPosition.TickLabelPosition_None; - - chart.Legend.Position = ExcelLegendPosition.Bottom; - chart.Legend.IsVerticalLegend = false; - - sheet.Move(1); - chart.Activate(); - - try - { - string ContentType = null; - string fileName = null; - if (Saveoption == "Xls") - { - workbook.Version = ExcelVersion.Excel97to2003; - ContentType = "Application/vnd.ms-excel"; - fileName = "Chart.xls"; - } - else - { - workbook.Version = ExcelVersion.Excel2013; - ContentType = "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - fileName = "Chart.xlsx"; - } - - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, ContentType, fileName); - } - catch (Exception) - { - } - - // Close the workbook - workbook.Close(); - excelEngine.Dispose(); - return null; - } - } -} - diff --git a/Pages/Excel/Comments.cshtml b/Pages/Excel/Comments.cshtml deleted file mode 100644 index 8db7322f..00000000 --- a/Pages/Excel/Comments.cshtml +++ /dev/null @@ -1,47 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.Comments -@section ControlsSection { -
- @{ - Html.BeginForm("comments", "excel", FormMethod.Post); - { -

- Click the "Input Template" button to view the input Excel document. -

-

- Click the "Create Document" button to view the output Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-

- Click the "Convert To PDF" button to view the generated PDF document. -

-
-
- - - -
- Html.EndForm(); - } - } -
-} - -@section ActionDescription { - The sample shows how to add notes and comments in Excel document using Essential XlsIO. -} - -@section Meta { - -} -@section Description { -
-

Notes were formally called comments in earlier versions of Excel and do not have a reply option. These are used for making simple notes related to the data.

-

Comments are now threaded, and allow you to have discussions with other users about the data. It has reply option. When other users reply, it creates conversation in the workbook for the specific cells.

-
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Comments Example - Syncfusion Demos -} -@section Header { -

Example of Comments in ASP.NET Core Excel (XlsIO) Library

-} diff --git a/Pages/Excel/Comments.cshtml.cs b/Pages/Excel/Comments.cshtml.cs deleted file mode 100644 index c6656cac..00000000 --- a/Pages/Excel/Comments.cshtml.cs +++ /dev/null @@ -1,109 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Pdf; -using Syncfusion.XlsIO; -using Syncfusion.XlsIORenderer; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class Comments : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public Comments(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button) - { - string basePath = _hostingEnvironment.WebRootPath; - - if (button == null) - return null; - else if (button == "Input Template") - { - Stream ms = new FileStream(basePath + @"/XlsIO/CommentsTemplate.xlsx", FileMode.Open, FileAccess.Read); - return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "CommentsTemplate.xlsx"); - } - else if (button == "Create Document") - { - //Initialize ExcelEngine - using (ExcelEngine excelEngine = new ExcelEngine()) - { - //Initialize IApplication and set the default application version - IApplication application = excelEngine.Excel; - application.DefaultVersion = ExcelVersion.Xlsx; - - //Load the Excel template into IWorkbook and get the worksheet into IWorksheet - FileStream excelStream = new FileStream(basePath + @"/XlsIO/CommentsTemplate.xlsx", FileMode.Open); - IWorkbook workbook = application.Workbooks.Open(excelStream); - IWorksheet worksheet = workbook.Worksheets[0]; - - //Add Comments - AddComments(worksheet); - - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - excelEngine.Dispose(); - excelStream.Dispose(); - - return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "ExcelComments.xlsx"); - } - } - else - { - //Initialize ExcelEngine - using (ExcelEngine excelEngine = new ExcelEngine()) - { - //Initialize IApplication and set the default application version - IApplication application = excelEngine.Excel; - application.DefaultVersion = ExcelVersion.Xlsx; - - //Load the Excel template into IWorkbook and get the worksheet into IWorksheet - FileStream excelStream = new FileStream(basePath + @"/XlsIO/CommentsTemplate.xlsx", FileMode.Open); - IWorkbook workbook = application.Workbooks.Open(excelStream); - IWorksheet worksheet = workbook.Worksheets[0]; - - //Add Comments - AddComments(worksheet); - - //Set print location of comments - worksheet.PageSetup.PrintComments = ExcelPrintLocation.PrintSheetEnd; - - //Initialize XlsIORenderer and convert the Excel document to PDF - XlsIORenderer renderer = new XlsIORenderer(); - PdfDocument document = renderer.ConvertToPDF(workbook); - - MemoryStream ms = new MemoryStream(); - document.Save(ms); - ms.Position = 0; - - excelEngine.Dispose(); - excelStream.Dispose(); - - return File(ms, "application/pdf", "ExcelComments.pdf"); - } - } - } - private void AddComments(IWorksheet worksheet) - { - //Add Comments (Notes) - IComment comment = worksheet.Range["H1"].AddComment(); - comment.Text = "This Total column comment will be printed at the end of sheet."; - comment.IsVisible = true; - - //Add Threaded Comments - IThreadedComment threadedComment = worksheet.Range["H16"].AddThreadedComment("What is the reason for the higher total amount of \"desk\" in the west region?", "User1", DateTime.Now); - threadedComment.AddReply("The unit cost of desk is higher compared to other items in the west region. As a result, the total amount is elevated.", "User2", DateTime.Now); - threadedComment.AddReply("Additionally, Wilson sold 31 desks in the west region, which is also a contributing factor to the increased total amount.", "User3", DateTime.Now); - } - } -} diff --git a/Pages/Excel/ConditionalFormatting.cshtml b/Pages/Excel/ConditionalFormatting.cshtml deleted file mode 100644 index 75a56d54..00000000 --- a/Pages/Excel/ConditionalFormatting.cshtml +++ /dev/null @@ -1,59 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.ConditionalFormatting -@section ActionDescription { - This sample demonstrates how to apply conditional formats using XlsIO. -} - -@section Meta { - -} - -@section Description { -

- Microsoft Excel provides enhanced conditional formatting support. Conditional formatting allows you to apply formatting to one or more cells based on the value of the cell or the value of a formula. - XlsIO also supports applying more than three conditional formats to the same cell, similar to Excel 2007 and above.
-

-
- Note: It is not possible to apply more than three conditional formats in earlier versions of Excel. -
-
- Features: -
-
-
    -
  • Writing conditional formatting on a range of cells
  • -
  • Advanced options of Excel, such as color scales, icon sets, and data bars
  • -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("conditionalformatting", "excel", FormMethod.Post); - { -

- Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
- Save As : - - -   - - -
-
-
- -
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Conditional Formatting Example - Syncfusion Demos -} -@section Header { -

Example of Conditional Formatting in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/ConditionalFormatting.cshtml.cs b/Pages/Excel/ConditionalFormatting.cshtml.cs deleted file mode 100644 index 464d2819..00000000 --- a/Pages/Excel/ConditionalFormatting.cshtml.cs +++ /dev/null @@ -1,292 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class ConditionalFormatting : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public ConditionalFormatting(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string SaveOption) - { - string basePath = _hostingEnvironment.WebRootPath; - - if (SaveOption == null) - return null; - - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - //Open an existing Excel 2007 file - IWorkbook workbook = null; - - //The first worksheet object in the worksheets collection is accessed. - IWorksheet sheet = null; - - //Set the File Format as XLS - if (SaveOption == "Xls") - { - workbook = application.Workbooks.Create(3); - sheet = workbook.Worksheets[0]; - workbook.Version = ExcelVersion.Excel97to2003; - } - //Set the File Format as XLSX - else - { - FileStream inputStream = new FileStream(basePath + @"/XlsIO/CFTemplate.xlsx", FileMode.Open, FileAccess.Read); - workbook = excelEngine.Excel.Workbooks.Open(inputStream); - sheet = workbook.Worksheets[0]; - workbook.Version = ExcelVersion.Excel2016; - } - - if (SaveOption != "Xls") - { - #region Databar - //Add condition for the range - IConditionalFormats formats = sheet.Range["C7:C46"].ConditionalFormats; - IConditionalFormat format = formats.AddCondition(); - - //Set Data bar and icon set for the same cell - //Set the format type - format.FormatType = ExcelCFType.DataBar; - IDataBar dataBar = format.DataBar; - - //Set the constraint - dataBar.MinPoint.Type = ConditionValueType.LowestValue; - dataBar.MinPoint.Value = "0"; - dataBar.MaxPoint.Type = ConditionValueType.HighestValue; - dataBar.MaxPoint.Value = "0"; - - //Set color for Bar - dataBar.BarColor = Color.FromArgb(156, 208, 243); - - //Hide the value in data bar - dataBar.ShowValue = false; - #endregion - - #region Iconset - //Add another condition in the same range - format = formats.AddCondition(); - - //Set Icon format type - format.FormatType = ExcelCFType.IconSet; - IIconSet iconSet = format.IconSet; - iconSet.IconSet = ExcelIconSetType.FourRating; - iconSet.IconCriteria[0].Type = ConditionValueType.LowestValue; - iconSet.IconCriteria[0].Value = "0"; - iconSet.IconCriteria[1].Type = ConditionValueType.HighestValue; - iconSet.IconCriteria[1].Value = "0"; - iconSet.ShowIconOnly = true; - - //Sets Icon sets for another range - formats = sheet.Range["E7:E46"].ConditionalFormats; - format = formats.AddCondition(); - format.FormatType = ExcelCFType.IconSet; - iconSet = format.IconSet; - iconSet.IconSet = ExcelIconSetType.ThreeSymbols; - iconSet.IconCriteria[0].Type = ConditionValueType.LowestValue; - iconSet.IconCriteria[0].Value = "0"; - iconSet.IconCriteria[1].Type = ConditionValueType.HighestValue; - iconSet.IconCriteria[1].Value = "0"; - iconSet.ShowIconOnly = true; - #endregion - - #region Databar Negative value settings - //Add condition for the range - IConditionalFormats conditionalFormats1 = sheet.Range["E7:E46"].ConditionalFormats; - IConditionalFormat conditionalFormat1 = conditionalFormats1.AddCondition(); - - //Set Data bar and icon set for the same cell - //Set the conditionalFormat type - conditionalFormat1.FormatType = ExcelCFType.DataBar; - IDataBar dataBar1 = conditionalFormat1.DataBar; - - //Set the constraint - dataBar1.BarColor = Color.YellowGreen; - dataBar1.NegativeFillColor = Color.Pink; - dataBar1.NegativeBorderColor = Color.WhiteSmoke; - dataBar1.BarAxisColor = Color.Yellow; - dataBar1.BorderColor = Color.WhiteSmoke; - dataBar1.DataBarDirection = DataBarDirection.context; - dataBar1.DataBarAxisPosition = DataBarAxisPosition.middle; - dataBar1.HasGradientFill = true; - - //Hide the value in data bar - dataBar1.ShowValue = false; - - #endregion - - #region Duplicate - formats = sheet.Range["D7:D46"].ConditionalFormats; - format = formats.AddCondition(); - format.FormatType = ExcelCFType.Duplicate; - - format.BackColorRGB = Color.FromArgb(255, 199, 206); - #endregion - - #region TopBottom and AboveBelowAverage - sheet = workbook.Worksheets[1]; - formats = sheet.Range["N6:N35"].ConditionalFormats; - format = formats.AddCondition(); - format.FormatType = ExcelCFType.TopBottom; - format.TopBottom.Type = ExcelCFTopBottomType.Bottom; - - format.BackColorRGB = Color.FromArgb(51, 153, 102); - - formats = sheet.Range["M6:M35"].ConditionalFormats; - format = formats.AddCondition(); - format.FormatType = ExcelCFType.AboveBelowAverage; - format.AboveBelowAverage.AverageType = ExcelCFAverageType.Below; - - format.FontColorRGB = Color.FromArgb(255, 255, 255); - format.BackColorRGB = Color.FromArgb(166, 59, 38); - #endregion - } - else - { - sheet.IsGridLinesVisible = false; - sheet.Range["D2"].Text = "Conditional Formatting"; - sheet.Range["D2:E2"].Merge(); - sheet.Range["D2"].CellStyle.HorizontalAlignment = ExcelHAlign.HAlignCenter; - sheet.Range["D2"].CellStyle.Font.Bold = true; - sheet.Range["D2"].CellStyle.Font.Size = 14; - - //Applying conditional formatting to "E5" for format type as CellValue( Between) - IConditionalFormats condition = sheet.Range["E5"].ConditionalFormats; - sheet.Range["E5"].CellStyle.Borders.LineStyle = ExcelLineStyle.Medium; - sheet.Range["E5"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["E5"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - sheet.Range["E5"].AddComment().Text = "Entering a Number between 10 to 20 will set the backcolor for the cell"; - - //Adding formats to IConditionalFormats collection - IConditionalFormat condition1 = condition.AddCondition(); - sheet.Range["D5"].Text = "Enter a Number between 10 to 20"; - condition1.FirstFormula = "10"; - condition1.SecondFormula = "20"; - //Setting format properties. - condition1.Operator = ExcelComparisonOperator.Between; - condition1.FormatType = ExcelCFType.CellValue; - condition1.BackColorRGB = Color.FromArgb(238, 122, 3); - condition1.IsBold = true; - condition1.IsItalic = true; - - //Applying conditional formatting to "E8" for format type as CellValue( Equal) - IConditionalFormats condition2 = sheet.Range["E8"].ConditionalFormats; - sheet.Range["E8"].CellStyle.Borders.LineStyle = ExcelLineStyle.Medium; - sheet.Range["E8"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["E8"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - sheet.Range["E8"].AddComment().Text = "Entering a Number as 1000 will set the highlight the number with Red color"; - - //Adding formats to IConditionalFormats collection - IConditionalFormat condition3 = condition2.AddCondition(); - sheet.Range["D8"].Text = "Enter the Number as 1000"; - - //Setting format properties. - condition3.FormatType = ExcelCFType.CellValue; - condition3.Operator = ExcelComparisonOperator.Equal; - condition3.FirstFormula = "1000"; - condition3.FontColorRGB = Color.FromArgb(0xde, 0x64, 0x13); - - //Applying conditional formatting to "E11" for format type as CellValue( Not between) - IConditionalFormats condition4 = sheet.Range["E11"].ConditionalFormats; - sheet.Range["E11"].CellStyle.Borders.LineStyle = ExcelLineStyle.Medium; - sheet.Range["E11"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["E11"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - sheet.Range["E11"].AddComment().Text = "Entering a Number which is not between 100 to 200 will retain the pattern"; - - //Adding formats to IConditionalFormats collection - IConditionalFormat condition5 = condition4.AddCondition(); - sheet.Range["D11"].Text = "Enter a Number not between 100 to 200"; - //Setting format properties - condition5.FormatType = ExcelCFType.CellValue; - condition5.Operator = ExcelComparisonOperator.NotBetween; - condition5.FirstFormula = "100"; - condition5.SecondFormula = "200"; - condition5.FillPattern = ExcelPattern.DarkVertical; - - //Applying conditional formatting to "E14" for format type as CellValue( LessOrEqual) - IConditionalFormats condition6 = sheet.Range["E14"].ConditionalFormats; - sheet.Range["E14"].CellStyle.Borders.LineStyle = ExcelLineStyle.Medium; - sheet.Range["E14"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["E14"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - sheet.Range["E14"].AddComment().Text = "Entering a Number which is less than or equal to 1000 will retain the pattern"; - - //Adding formats to IConditionalFormats collection - IConditionalFormat condition7 = condition6.AddCondition(); - sheet.Range["D14"].Text = "Enter a Number which is less than or equal to 1000"; - //Setting format properties. - condition7.FormatType = ExcelCFType.CellValue; - condition7.Operator = ExcelComparisonOperator.LessOrEqual; - condition7.FirstFormula = "1000"; - condition7.BackColorRGB = Color.FromArgb(204, 212, 230); - - //Applying conditional formatting to "E17" for format type as CellValue( NotEqual) - IConditionalFormats condition8 = sheet.Range["E17"].ConditionalFormats; - sheet.Range["E17"].CellStyle.Borders.LineStyle = ExcelLineStyle.Medium; - sheet.Range["E17"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["E17"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - sheet.Range["E17"].AddComment().Text = "Entering a Number which is not equal to 1000 will retain the pattern"; - - //Adding formats to IConditionalFormats collection - IConditionalFormat condition9 = condition8.AddCondition(); - sheet.Range["D17"].Text = "Enter a Number which is not equal to 1000"; - //Setting format properties. - condition9.FormatType = ExcelCFType.CellValue; - condition9.Operator = ExcelComparisonOperator.NotEqual; - condition9.FirstFormula = "1000"; - condition9.BackColorRGB = Color.ForestGreen; - - sheet.UsedRange.AutofitColumns(); - } - - try - { - string ContentType = null; - string fileName = null; - if (SaveOption == "Xls") - { - workbook.Version = ExcelVersion.Excel97to2003; - ContentType = "Application/vnd.ms-excel"; - fileName = "ConditionalFormatting.xls"; - } - else - { - workbook.Version = ExcelVersion.Excel2013; - ContentType = "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - fileName = "ConditionalFormatting.xlsx"; - } - - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, ContentType, fileName); - } - catch (Exception) - { - } - - // Close the workbook - workbook.Close(); - excelEngine.Dispose(); - return null; - } - } -} diff --git a/Pages/Excel/Create.cshtml b/Pages/Excel/Create.cshtml deleted file mode 100644 index d1e4a02f..00000000 --- a/Pages/Excel/Create.cshtml +++ /dev/null @@ -1,47 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.Create -@section ActionDescription { - This sample demonstrates how to create a simple spreadsheet document using XlsIO. -} - -@section Meta { - -} -@section ControlsSection { -
- @{ - Html.BeginForm("create", "excel", FormMethod.Post); - { -

- Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
-
- Save As - -
-
-
-
- -
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Create Example - Syncfusion Demos -} -@section Header { -

Example of Creating Excel document in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/Create.cshtml.cs b/Pages/Excel/Create.cshtml.cs deleted file mode 100644 index 3e57981f..00000000 --- a/Pages/Excel/Create.cshtml.cs +++ /dev/null @@ -1,242 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.Extensions.Hosting.Internal; -using Syncfusion.XlsIO; -using System.Globalization; -using Syncfusion.Drawing; - - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class Create : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public Create(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string saveOption) - { - if (saveOption == null) - return null; - - string basePath = _hostingEnvironment.WebRootPath; - //New instance of XlsIO is created.[Equivalent to launching MS Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - // Creating new workbook - IWorkbook workbook = application.Workbooks.Create(1); - IWorksheet sheet = workbook.Worksheets[0]; - if (saveOption == "CSV" || saveOption == "TSV") - { - //Inserting sample text into the cells of the first worksheet. - sheet.Range["A1:N30"].Text = "Hello World"; - } - else - { - #region Generate Excel - sheet.Range["A2"].ColumnWidth = 30; - sheet.Range["B2"].ColumnWidth = 30; - sheet.Range["C2"].ColumnWidth = 30; - sheet.Range["D2"].ColumnWidth = 30; - - sheet.Range["A2:D2"].Merge(true); - - //Inserting sample text into the first cell of the first sheet. - sheet.Range["A2"].Text = "EXPENSE REPORT"; - sheet.Range["A2"].CellStyle.Font.FontName = "Verdana"; - sheet.Range["A2"].CellStyle.Font.Bold = true; - sheet.Range["A2"].CellStyle.Font.Size = 28; - sheet.Range["A2"].CellStyle.Font.RGBColor = Color.FromArgb(0, 0, 112, 192); - sheet.Range["A2"].HorizontalAlignment = ExcelHAlign.HAlignCenter; - - sheet.Range["A4"].Text = "Employee"; - sheet.Range["B4"].Text = "Roger Federer"; - sheet.Range["A4:B7"].CellStyle.Font.FontName = "Verdana"; - sheet.Range["A4:B7"].CellStyle.Font.Bold = true; - sheet.Range["A4:B7"].CellStyle.Font.Size = 11; - sheet.Range["A4:A7"].CellStyle.Font.RGBColor = Color.FromArgb(0, 128, 128, 128); - sheet.Range["A4:A7"].HorizontalAlignment = ExcelHAlign.HAlignLeft; - sheet.Range["B4:B7"].CellStyle.Font.RGBColor = Color.FromArgb(0, 174, 170, 170); - sheet.Range["B4:B7"].HorizontalAlignment = ExcelHAlign.HAlignRight; - - sheet.Range["A9:D20"].CellStyle.Font.FontName = "Verdana"; - sheet.Range["A9:D20"].CellStyle.Font.Size = 11; - - sheet.Range["A5"].Text = "Department"; - sheet.Range["B5"].Text = "Administration"; - - sheet.Range["A6"].Text = "Week Ending"; - sheet.Range["B6"].NumberFormat = "m/d/yyyy"; - sheet.Range["B6"].DateTime = DateTime.Parse("10/20/2012", CultureInfo.InvariantCulture); - - sheet.Range["A7"].Text = "Mileage Rate"; - sheet.Range["B7"].NumberFormat = "$#,##0.00"; - sheet.Range["B7"].Number = 0.70; - - sheet.Range["A10"].Text = "Miles Driven"; - sheet.Range["A11"].Text = "Miles Reimbursement"; - sheet.Range["A12"].Text = "Parking and Tolls"; - sheet.Range["A13"].Text = "Auto Rental"; - sheet.Range["A14"].Text = "Lodging"; - sheet.Range["A15"].Text = "Breakfast"; - sheet.Range["A16"].Text = "Lunch"; - sheet.Range["A17"].Text = "Dinner"; - sheet.Range["A18"].Text = "Snacks"; - sheet.Range["A19"].Text = "Others"; - sheet.Range["A20"].Text = "Total"; - sheet.Range["A20:D20"].CellStyle.Color = Color.FromArgb(0, 0, 112, 192); - sheet.Range["A20:D20"].CellStyle.Font.Color = ExcelKnownColors.White; - sheet.Range["A20:D20"].CellStyle.Font.Bold = true; - - IStyle style = sheet["B9:D9"].CellStyle; - style.VerticalAlignment = ExcelVAlign.VAlignCenter; - style.HorizontalAlignment = ExcelHAlign.HAlignRight; - style.Color = Color.FromArgb(0, 0, 112, 192); - style.Font.Bold = true; - style.Font.Color = ExcelKnownColors.White; - - sheet.Range["A9"].Text = "Expenses"; - sheet.Range["A9"].CellStyle.Color = Color.FromArgb(0, 0, 112, 192); - sheet.Range["A9"].CellStyle.Font.Color = ExcelKnownColors.White; - sheet.Range["A9"].CellStyle.Font.Bold = true; - sheet.Range["B9"].Text = "Day 1"; - sheet.Range["B10"].Number = 100; - sheet.Range["B11"].NumberFormat = "$#,##0.00"; - sheet.Range["B11"].Formula = "=(B7*B10)"; - sheet.Range["B12"].NumberFormat = "$#,##0.00"; - sheet.Range["B12"].Number = 0; - sheet.Range["B13"].NumberFormat = "$#,##0.00"; - sheet.Range["B13"].Number = 0; - sheet.Range["B14"].NumberFormat = "$#,##0.00"; - sheet.Range["B14"].Number = 0; - sheet.Range["B15"].NumberFormat = "$#,##0.00"; - sheet.Range["B15"].Number = 9; - sheet.Range["B16"].NumberFormat = "$#,##0.00"; - sheet.Range["B16"].Number = 12; - sheet.Range["B17"].NumberFormat = "$#,##0.00"; - sheet.Range["B17"].Number = 13; - sheet.Range["B18"].NumberFormat = "$#,##0.00"; - sheet.Range["B18"].Number = 9.5; - sheet.Range["B19"].NumberFormat = "$#,##0.00"; - sheet.Range["B19"].Number = 0; - sheet.Range["B20"].NumberFormat = "$#,##0.00"; - sheet.Range["B20"].Formula = "=SUM(B11:B19)"; - - sheet.Range["C9"].Text = "Day 2"; - sheet.Range["C10"].Number = 145; - sheet.Range["C11"].NumberFormat = "$#,##0.00"; - sheet.Range["C11"].Formula = "=(B7*C10)"; - sheet.Range["C12"].NumberFormat = "$#,##0.00"; - sheet.Range["C12"].Number = 15; - sheet.Range["C13"].NumberFormat = "$#,##0.00"; - sheet.Range["C13"].Number = 0; - sheet.Range["C14"].NumberFormat = "$#,##0.00"; - sheet.Range["C14"].Number = 45; - sheet.Range["C15"].NumberFormat = "$#,##0.00"; - sheet.Range["C15"].Number = 9; - sheet.Range["C16"].NumberFormat = "$#,##0.00"; - sheet.Range["C16"].Number = 12; - sheet.Range["C17"].NumberFormat = "$#,##0.00"; - sheet.Range["C17"].Number = 15; - sheet.Range["C18"].NumberFormat = "$#,##0.00"; - sheet.Range["C18"].Number = 7; - sheet.Range["C19"].NumberFormat = "$#,##0.00"; - sheet.Range["C19"].Number = 0; - sheet.Range["C20"].NumberFormat = "$#,##0.00"; - sheet.Range["C20"].Formula = "=SUM(C11:C19)"; - - sheet.Range["D9"].Text = "Day 3"; - sheet.Range["D10"].Number = 113; - sheet.Range["D11"].NumberFormat = "$#,##0.00"; - sheet.Range["D11"].Formula = "=(B7*D10)"; - sheet.Range["D12"].NumberFormat = "$#,##0.00"; - sheet.Range["D12"].Number = 17; - sheet.Range["D13"].NumberFormat = "$#,##0.00"; - sheet.Range["D13"].Number = 8; - sheet.Range["D14"].NumberFormat = "$#,##0.00"; - sheet.Range["D14"].Number = 45; - sheet.Range["D15"].NumberFormat = "$#,##0.00"; - sheet.Range["D15"].Number = 7; - sheet.Range["D16"].NumberFormat = "$#,##0.00"; - sheet.Range["D16"].Number = 11; - sheet.Range["D17"].NumberFormat = "$#,##0.00"; - sheet.Range["D17"].Number = 16; - sheet.Range["D18"].NumberFormat = "$#,##0.00"; - sheet.Range["D18"].Number = 7; - sheet.Range["D19"].NumberFormat = "$#,##0.00"; - sheet.Range["D19"].Number = 5; - sheet.Range["D20"].NumberFormat = "$#,##0.00"; - sheet.Range["D20"].Formula = "=SUM(D11:D19)"; - #endregion - } - MemoryStream ms = new MemoryStream(); - string contentType = string.Empty; - string fileName = string.Empty; - if (saveOption == "XLS") - { - workbook.Version = ExcelVersion.Excel97to2003; - contentType = "application/vnd.ms-excel"; - fileName = "Sample.xls"; - workbook.SaveAs(ms); - } - else if (saveOption == "XLSX") - { - workbook.Version = ExcelVersion.Xlsx; - contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - fileName = "Sample.xlsx"; - workbook.SaveAs(ms); - } - else if (saveOption == "XLTM") - { - workbook.Version = ExcelVersion.Xlsx; - contentType = "application/vnd.ms-excel.template.macroEnabled.12"; - fileName = "Sample.xltm"; - workbook.SaveAs(ms, ExcelSaveType.SaveAsMacroTemplate); - } - else if (saveOption == "XLTX") - { - workbook.Version = ExcelVersion.Xlsx; - contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.template"; - fileName = "Sample.xltx"; - workbook.SaveAs(ms, ExcelSaveType.SaveAsTemplate); - } - else if (saveOption == "CSV") - { - contentType = "text/csv"; - fileName = "Sample.csv"; - workbook.SaveAs(ms, ","); - } - else if (saveOption == "XLSM") - { - workbook.Version = ExcelVersion.Xlsx; - contentType = "application/vnd.ms-excel.sheet.macroEnabled.12"; - fileName = "Sample.xlsm"; - workbook.SaveAs(ms, ExcelSaveType.SaveAsMacro); - } - else - { - contentType = "text/tab-separated-values"; - fileName = "Sample.tsv"; - workbook.SaveAs(ms, "\t"); - } - - ms.Position = 0; - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = fileName; - return File(ms, contentType, fileName); - } - } -} - diff --git a/Pages/Excel/CreateMacro.cshtml b/Pages/Excel/CreateMacro.cshtml deleted file mode 100644 index eb24f197..00000000 --- a/Pages/Excel/CreateMacro.cshtml +++ /dev/null @@ -1,57 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.CreateMacro -@section ActionDescription { - This sample demonstrates how to create macros using XlsIO. -} - -@section Meta { - -} - -@section Description { - Essential XlsIO supports creating macro files from scratch programmatically. -
-
Features: -
-
-
    -
  • Create Excel chart from macro code for the data provided in the Excel workbook.
  • -
  • Save the macro-enabled file in various file formats (XLS, XLSM, XLTM).
  • -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("createmacro", "excel", FormMethod.Post); - { -

- Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
- Save As : - - -   - - -   - - -
-
-
- -
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Create Macro Example - Syncfusion Demos -} -@section Header { -

Example of Create Macro in ASP.NET Core Excel (XlsIO) Library

-} - diff --git a/Pages/Excel/CreateMacro.cshtml.cs b/Pages/Excel/CreateMacro.cshtml.cs deleted file mode 100644 index 34920e00..00000000 --- a/Pages/Excel/CreateMacro.cshtml.cs +++ /dev/null @@ -1,137 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Office; -using Syncfusion.XlsIO; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class CreateMacro : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public CreateMacro(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - #region Create Macro - public ActionResult OnPost(string SaveOption) - { - if (SaveOption == null) - return null; - - string basePath = _hostingEnvironment.WebRootPath; - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - // Opening workbook - FileStream inputStream = new FileStream(basePath + @"/XlsIO/CreateMacroTemplate.xlsx", FileMode.Open, FileAccess.Read); - IWorkbook workbook = application.Workbooks.Open(inputStream); - workbook.Version = ExcelVersion.Excel2016; - - #region VbaProject - //Access Vba Project from workbook - IVbaProject vbaProject = workbook.VbaProject; - - IVbaModule vbaModule = vbaProject.Modules.Add("Module1", VbaModuleType.StdModule); - vbaModule.Code = GetVbaCode(); - #endregion - - string ContentType = null; - string fileName = null; - - MemoryStream ms = new MemoryStream(); - - if (SaveOption == "ExcelXls") - { - ContentType = "Application/vnd.ms-excel"; - fileName = "Sample.xls"; - workbook.Version = ExcelVersion.Excel97to2003; - workbook.SaveAs(ms); - } - else if (SaveOption == "ExcelXlsm") - { - workbook.Version = ExcelVersion.Excel2013; - ContentType = "application/vnd.ms-excel.sheet.macroEnabled.12"; - fileName = "Sample.xlsm"; - workbook.SaveAs(ms, ExcelSaveType.SaveAsMacro); - } - else - { - workbook.Version = ExcelVersion.Excel2013; - ContentType = "application/vnd.ms-excel.template.macroEnabled.12"; - fileName = "Sample.xltm"; - workbook.SaveAs(ms, ExcelSaveType.SaveAsMacroTemplate); - } - - ms.Position = 0; - ms.Position = 0; - - return File(ms, ContentType, fileName); - - } - - /// - /// Get the Vba code as string - /// - /// - /// Vba - private string GetVbaCode() - { - string vbaCode = "Sub Auto_Open()\n" + - "'\n" + - "' Auto_Open Macro\n" + - "'\n" + - "\n" + - "'\n" + - "Range(\"B3:C28\").Select\n" + - "Range(\"E3\").Activate\n" + - "Sheet1.Activate\n" + - "ActiveSheet.Shapes.AddChart2(276, xlAreaStacked).Select\n" + - "ActiveChart.SetSourceData Source:= Range(\"'Exchange Report'!$B$3:$C$28\")\n" + - "ActiveChart.Parent.Left = Range(\"F3\").Left + 3\n" + - "ActiveChart.Parent.Top = Range(\"F3\").Top\n" + - "ActiveChart.Parent.Width = Range(\"M3\").Left - ActiveChart.Parent.Left\n" + - "ActiveChart.Parent.Height = Range(\"F16\").Top - ActiveChart.Parent.Top\n" + - "ActiveChart.ChartTitle.Select\n" + - "ActiveChart.ChartTitle.Text = \"Open-Close Statistics\"\n" + - "Selection.Format.TextFrame2.TextRange.Characters.Text = \"Open-Close Statistics\"\n" + - "With Selection.Format.TextFrame2.TextRange.Characters(1, 21).Font\n" + - " .BaselineOffset = 0\n" + - " .Bold = msoFalse\n" + - " .NameComplexScript = \" +mn-cs\"\n" + - " .NameFarEast = \" +mn-ea\"\n" + - " .Fill.Visible = msoTrue\n" + - " .Fill.ForeColor.RGB = RGB(89, 89, 89)\n" + - " .Fill.Transparency = 0\n" + - " .Fill.Solid\n" + - " .Size = 14\n" + - " .Italic = msoFalse\n" + - " .Kerning = 12\n" + - " .Name = \" +mn-lt\"\n" + - " .UnderlineStyle = msoNoUnderline\n" + - " .Spacing = 0\n" + - " .Strike = msoNoStrike\n" + - "End With\n" + - "ActiveChart.FullSeriesCollection(1).XValues = \"='Exchange Report'!$A$4:$A$28\"\n" + - "ActiveChart.ChartArea.Select\n" + - "ActiveChart.ChartTitle.Select\n" + - "Selection.Format.TextFrame2.TextRange.Font.Bold = msoTrue\n" + - "ActiveChart.ChartArea.Select\n" + - "ActiveChart.ChartTitle.Select\n" + - "Selection.Top = 8\n" + - "ActiveChart.ChartColor = 13\n" + - "End Sub"; - return vbaCode; - } - #endregion - } -} diff --git a/Pages/Excel/Customer.cs b/Pages/Excel/Customer.cs deleted file mode 100644 index a8787209..00000000 --- a/Pages/Excel/Customer.cs +++ /dev/null @@ -1,148 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion - -using Syncfusion.XlsIO; -using System.Drawing; -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - #region Hyperlink Class - - public class Hyperlink : IHyperLink - { - public IApplication Application { get; private set; } - public object Parent { get; private set; } - public string Address { get; set; } - public string Name { get; private set; } - public IRange Range { get; private set; } - public string ScreenTip { get; set; } - public string SubAddress { get; set; } - public string TextToDisplay { get; set; } - public ExcelHyperLinkType Type { get; set; } - public IShape Shape { get; private set; } - public ExcelHyperlinkAttachedType AttachedType { get; private set; } - public byte[] Image { get; set; } - - public Hyperlink(string address, string subAddress, string screenTip, string textToDisplay, ExcelHyperLinkType type, byte[] image) - { - Address = address; - ScreenTip = screenTip; - SubAddress = subAddress; - TextToDisplay = textToDisplay; - Type = type; - Image = image; - } - } - - public class Company - { - public string Name { get; set; } - public Hyperlink Link { get; set; } - } - - #endregion - class Customer - { - #region Members - private string m_salesPerson; - private int m_salesJanJune; - private int m_salesJulyDec; - private int m_change; - private byte[] m_image; - private Hyperlink m_hyperlink; - #endregion - - #region Properties - public string SalesPerson - { - get - { - return m_salesPerson; - } - set - { - m_salesPerson = value; - } - } - - public int SalesJanJune - { - get - { - return m_salesJanJune; - } - set - { - m_salesJanJune = value; - } - } - public int SalesJulyDec - { - get - { - return m_salesJulyDec; - } - set - { - m_salesJulyDec = value; - } - - } - public int Change - { - get - { - return m_change; - } - set - { - m_change = value; - } - - } - - public Hyperlink Hyperlink - { - get - { - return m_hyperlink; - } - set - { - m_hyperlink = value; - } - - } - - public byte[] Image - { - get - { - return m_image; - } - set - { - m_image = value; - } - } - #endregion - - #region Intialization - public Customer() - { - } - public Customer(string name, int juneToJuly, int julyToDec, int change, byte[] image) - { - this.m_salesPerson = name; - this.m_salesJanJune = juneToJuly; - this.m_salesJulyDec = julyToDec; - this.m_change = change; - this.m_image = image; - } - #endregion - } -} diff --git a/Pages/Excel/DataSorting.cshtml b/Pages/Excel/DataSorting.cshtml deleted file mode 100644 index 5a88e391..00000000 --- a/Pages/Excel/DataSorting.cshtml +++ /dev/null @@ -1,239 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.DataSorting -@section ActionDescription { - This sample demonstrates how to sort data in spreadsheet using XlsIO. -} -@section Meta { - -} -@section Description { - Essential XlsIO can sort a range of cells dynamically, at runtime without any dependency on MS Excel. It sorts the data based on values and colors. -
-
Features: -
-
-
    -
  • Supports to sort the large data
  • -
  • Sorts based on the selected algorithm
  • -
  • Sorts the data based on the cell and font color
  • -
-} -@section ControlsSection -{ -
- @{ - Html.BeginForm("datasorting", "excel", FormMethod.Post); - { -
-

- Click the "View Input Template" button to view the input Excel document and click the "Sort Values" button to view the output Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Sort On Values -
-
- Choose the column to sort: -
- - - - - -
-
- First Column:                    -
- -
-
-
-
- - Add Level -
-
- - - - - -
-
- Second Column:               -
- -
-
- - - - -
-
- - Add Level -
-
- - - - - -
-
- Third Column:                  -
- -
-
-
- Order By -
- - - - -
- - - - -
- - - -
- - - - -
- - -
-
- - - - -
- - -
-
-
-
- -
- -
-
- - - Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Data Sorting Example - Syncfusion Demos -} -@section Header { -

Example of Data Sorting in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/DataSorting.cshtml.cs b/Pages/Excel/DataSorting.cshtml.cs deleted file mode 100644 index 4eb9c596..00000000 --- a/Pages/Excel/DataSorting.cshtml.cs +++ /dev/null @@ -1,173 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class DataSorting : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public DataSorting(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string view, string SortData, string FirstColumn, string SecColumn, string SecondLevel, string ThirdColumn, string ThirdLevel, string SortBy, string Sortcolor, string colorSortBy, string cmbAlgorithm) - { - string basePath = _hostingEnvironment.WebRootPath; - - if (FirstColumn == null) - return null; - - if (view == "View Input Template") - { - ExcelEngine excelEngine = new ExcelEngine(); - FileStream inputStream = new FileStream(basePath + @"/XlsIO/SortingData.xlsx", FileMode.Open, FileAccess.Read); - IWorkbook workbook = excelEngine.Excel.Workbooks.Open(inputStream); - try - { - - workbook.Version = ExcelVersion.Excel2013; - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "InputTemplate.xlsx"); - } - catch (Exception) - { - } - - // Close the workbook - workbook.Close(); - excelEngine.Dispose(); - return null; - } - - if (SortData == "Sort Values") - { - int firstIndex, secIndex, thirdIndex; - firstIndex = GetSelectedIndex(FirstColumn); - secIndex = GetSelectedIndex(SecColumn); - thirdIndex = GetSelectedIndex(ThirdColumn); - bool secondLevel = (SecondLevel != null); - bool thirdLevel = (ThirdLevel != null); - OrderBy orderBy = (SortBy == "Ascending") ? OrderBy.Ascending : OrderBy.Descending; - return SortValues(firstIndex, secIndex, thirdIndex, secondLevel, thirdLevel, orderBy); - } - - return null; - } - #region Helper Methods - private int GetSelectedIndex(string value) - { - switch (value) - { - case "ID": return 0; - case "Name": return 1; - case "Salary": return 3; - default: return 0; - } - } - private ActionResult SortColor(SortOn sortOn, int firstIndex, OrderBy orderBy) - { - string basePath = _hostingEnvironment.WebRootPath; - - ExcelEngine excelEngine = new ExcelEngine(); - FileStream inputStream = new FileStream(basePath + @"/XlsIO/SortingData.xlsx", FileMode.Open, FileAccess.Read); - IWorkbook book = excelEngine.Excel.Workbooks.Open(inputStream); - book.Version = ExcelVersion.Excel2016; - IWorksheet sheet = book.Worksheets[1]; - IRange range = sheet["A2:C50"]; - - IDataSort sorter = book.CreateDataSorter(); - sorter.SortRange = range; - - ISortField field = sorter.SortFields.Add(2, sortOn, orderBy); - field.Color = Color.Red; - field = sorter.SortFields.Add(2, sortOn, orderBy); - field.Color = Color.Blue; - sorter.Sort(); - book.Worksheets.Remove(0); - - try - { - - book.Version = ExcelVersion.Excel2013; - MemoryStream ms = new MemoryStream(); - book.SaveAs(ms); - ms.Position = 0; - - return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Output.xlsx"); - } - catch (Exception) - { - } - - // Close the workbook - book.Close(); - excelEngine.Dispose(); - return null; - - } - private ActionResult SortValues(int firstIndex, int secIndex, int thirdIndex, bool secondLevel, bool thirdLevel, OrderBy orderBy) - { - string basePath = _hostingEnvironment.WebRootPath; - - ExcelEngine excelEngine = new ExcelEngine(); - FileStream inputStream = new FileStream(basePath + @"/XlsIO/SortingData.xlsx", FileMode.Open, FileAccess.Read); - IWorkbook book = excelEngine.Excel.Workbooks.Open(inputStream); IWorksheet sheet = book.Worksheets[0]; - - IRange range = sheet["A2:D51"]; - - //Create the data sorter. - IDataSort sorter = book.CreateDataSorter(); - //Specify the range to sort. - sorter.SortRange = range; - - - //Specify the sort field attributes (column index and sort order) - ISortField field = sorter.SortFields.Add(firstIndex, SortOn.Values, orderBy); - //sort the data based on the sort field attributes. - - if (secondLevel) - { - field = sorter.SortFields.Add(secIndex, SortOn.Values, orderBy); - } - - if (thirdLevel) - { - field = sorter.SortFields.Add(thirdIndex, SortOn.Values, orderBy); - } - sorter.Algorithm = SortingAlgorithms.QuickSort; - sorter.Sort(); - book.Worksheets.Remove(1); - try - { - - book.Version = ExcelVersion.Excel2013; - MemoryStream ms = new MemoryStream(); - book.SaveAs(ms); - ms.Position = 0; - - return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Output.xlsx"); - } - catch (Exception) - { - } - - // Close the workbook - book.Close(); - excelEngine.Dispose(); - return null; - } - #endregion - } -} diff --git a/Pages/Excel/DataValidation.cshtml b/Pages/Excel/DataValidation.cshtml deleted file mode 100644 index c5a3c625..00000000 --- a/Pages/Excel/DataValidation.cshtml +++ /dev/null @@ -1,61 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.DataValidation -@section ActionDescription { - This sample demonstrates how to use data validation in spreadsheets using XlsIO. -} - -@section Meta { - -} - -@section Description { - Data validation helps to control the kind of information that is entered in a worksheet cells. It provides users with the following options: -
-
-
    -
  • A list of choices
  • -
  • Restriction of entries to specific type or size
  • -
-
- Essential XlsIO has support for reading and writing data validations. This sample focuses on writing a data validation in an Excel template. -
-
Features: -
-
-
    -
  • Text validation
  • -
  • Validating input text length based on the given constraints
  • -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("datavalidation", "excel", FormMethod.Post); - { -

- Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
- Save As : - - -   - - -
-
-
- -
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Data Validation Example - Syncfusion Demos -} -@section Header { -

Example of Data Validation in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/DataValidation.cshtml.cs b/Pages/Excel/DataValidation.cshtml.cs deleted file mode 100644 index 990b6f5c..00000000 --- a/Pages/Excel/DataValidation.cshtml.cs +++ /dev/null @@ -1,165 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class DataValidation : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public DataValidation(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string SaveOption) - { - if (SaveOption == null) - return null; - - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - if (SaveOption == "Xls") - application.DefaultVersion = ExcelVersion.Excel97to2003; - else - application.DefaultVersion = ExcelVersion.Excel2016; - - //A new workbook is created.[Equivalent to creating a new workbook in Microsoft Excel] - //The new workbook will have 3 worksheets - IWorkbook workbook = application.Workbooks.Create(3); - //The first worksheet object in the worksheets collection is accessed. - IWorksheet sheet = workbook.Worksheets[0]; - - //Data validation to list the values in the first cell - IDataValidation validation = sheet.Range["C7"].DataValidation; - sheet.Range["B7"].Text = "Select an item from the validation list"; - validation.ListOfValues = new string[] { "PDF", "XlsIO", "DocIO" }; - validation.PromptBoxText = "Data Validation list"; - validation.IsPromptBoxVisible = true; - validation.ShowPromptBox = true; - - sheet.Range["C7"].CellStyle.Borders.LineStyle = ExcelLineStyle.Medium; - sheet.Range["C7"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["C7"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - - // Data Validation for Numbers - IDataValidation validation1 = sheet.Range["C9"].DataValidation; - sheet.Range["B9"].Text = "Enter a Number to validate"; - validation1.AllowType = ExcelDataType.Integer; - validation1.CompareOperator = ExcelDataValidationComparisonOperator.Between; - validation1.FirstFormula = "0"; - validation1.SecondFormula = "10"; - validation1.ShowErrorBox = true; - validation1.ErrorBoxText = "Enter Value between 0 to 10"; - validation1.ErrorBoxTitle = "ERROR"; - validation1.PromptBoxText = "Data Validation using Condition for Numbers"; - validation1.ShowPromptBox = true; - sheet.Range["C9"].CellStyle.Borders.LineStyle = ExcelLineStyle.Medium; - sheet.Range["C9"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["C9"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - - // Data Validation for Date - IDataValidation validation2 = sheet.Range["C11"].DataValidation; - sheet.Range["B11"].Text = "Enter the Date to validate"; - validation2.AllowType = ExcelDataType.Date; - validation2.CompareOperator = ExcelDataValidationComparisonOperator.Between; - validation2.FirstDateTime = new DateTime(2003, 5, 10); - validation2.SecondDateTime = new DateTime(2004, 5, 10); - validation2.ShowErrorBox = true; - validation2.ErrorBoxText = "Enter Value between 5/10/2003 to 5/10/2004"; - validation2.ErrorBoxTitle = "ERROR"; - validation2.PromptBoxText = "Data Validation using Condition for Date"; - validation2.ShowPromptBox = true; - sheet.Range["C11"].CellStyle.Borders.LineStyle = ExcelLineStyle.Medium; - sheet.Range["C11"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["C11"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - - // Data Validation for TextLength - IDataValidation validation3 = sheet.Range["C13"].DataValidation; - sheet.Range["B13"].Text = "Enter the Text to validate"; - validation3.AllowType = ExcelDataType.TextLength; - validation3.CompareOperator = ExcelDataValidationComparisonOperator.Between; - validation3.FirstFormula = "1"; - validation3.SecondFormula = "6"; - validation3.ShowErrorBox = true; - validation3.ErrorBoxText = "Retype text length to 6 character"; - validation3.ErrorBoxTitle = "ERROR"; - validation3.PromptBoxText = "Data Validation using Condition for TextLength"; - validation3.ShowPromptBox = true; - sheet.Range["C13"].CellStyle.Borders.LineStyle = ExcelLineStyle.Medium; - sheet.Range["C13"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["C13"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - - // Data Validation for Time - IDataValidation validation4 = sheet.Range["C15"].DataValidation; - sheet.Range["B15"].Text = "Enter the Time to validate"; - validation4.AllowType = ExcelDataType.Time; - validation4.CompareOperator = ExcelDataValidationComparisonOperator.Between; - validation4.FirstFormula = "10"; - validation4.SecondFormula = "12"; - validation4.ShowErrorBox = true; - validation4.ErrorBoxText = "Enter the Correct time between 10 to 12 "; - validation4.ErrorBoxTitle = "ERROR"; - validation4.PromptBoxText = "Data Validation using Condition for Time"; - validation4.ShowPromptBox = true; - sheet.Range["C15"].CellStyle.Borders.LineStyle = ExcelLineStyle.Medium; - sheet.Range["C15"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["C15"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - sheet.Range["B2:C2"].Merge(); - sheet.Range["B2"].Text = "Simple Data validation"; - sheet.Range["B5"].Text = "Validation criteria"; - sheet.Range["C5"].Text = "Validation"; - sheet.Range["B5"].CellStyle.Font.Bold = true; - sheet.Range["C5"].CellStyle.Font.Bold = true; - sheet.Range["B2"].CellStyle.Font.Bold = true; - sheet.Range["B2"].CellStyle.Font.Size = 16; - sheet.Range["B2"].CellStyle.HorizontalAlignment = ExcelHAlign.HAlignCenter; - sheet.UsedRange.AutofitColumns(); - sheet.UsedRange.AutofitRows(); - - try - { - string ContentType = null; - string fileName = null; - if (SaveOption == "Xls") - { - workbook.Version = ExcelVersion.Excel97to2003; - ContentType = "Application/vnd.ms-excel"; - fileName = "DataValidation.xls"; - } - else - { - workbook.Version = ExcelVersion.Excel2013; - ContentType = "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - fileName = "DataValidation.xlsx"; - } - - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, ContentType, fileName); - } - catch (Exception) - { - } - - // Close the workbook - workbook.Close(); - excelEngine.Dispose(); - return null; - } - } -} diff --git a/Pages/Excel/EditMacro.cshtml b/Pages/Excel/EditMacro.cshtml deleted file mode 100644 index 89bb705d..00000000 --- a/Pages/Excel/EditMacro.cshtml +++ /dev/null @@ -1,57 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.EditMacro -@section ActionDescription { - This sample demonstrates how to edit macros using XlsIO. -} - -@section Meta { - -} - -@section Description { - Essential XlsIO supports creating macro files from scratch and edit the macro code programmatically. -
-
Features: -
-
-
    -
  • Open existing macro-enabled Excel template.
  • -
  • Modify the macro code to change the chart type.
  • -
  • Save the edited macro-enabled file in various file formats (XLS, XLSM, XLTM).
  • -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("editmacro", "excel", FormMethod.Post); - { -

- Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
- Save As : - - -   - - -   - - -
-
-
- -
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Edit Macro Example - Syncfusion Demos -} -@section Header { -

Example of Edit Macro in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/EditMacro.cshtml.cs b/Pages/Excel/EditMacro.cshtml.cs deleted file mode 100644 index 3ebf94b6..00000000 --- a/Pages/Excel/EditMacro.cshtml.cs +++ /dev/null @@ -1,81 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Office; -using Syncfusion.XlsIO; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class EditMacro : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public EditMacro(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - #region Edit Macro - public ActionResult OnPost(string SaveOption) - { - if (SaveOption == null) - return null; - - string basePath = _hostingEnvironment.WebRootPath; - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - // Opening workbook - FileStream inputStream = new FileStream(basePath + @"/XlsIO/EditMacroTemplate.xltm", FileMode.Open, FileAccess.Read); - IWorkbook workbook = application.Workbooks.Open(inputStream); - IWorksheet sheet = workbook.Worksheets[0]; - - - #region VbaProject - IVbaProject vbaProject = workbook.VbaProject; - IVbaModule vbaModule = vbaProject.Modules["Module1"]; - vbaModule.Code = vbaModule.Code.Replace("xlAreaStacked", "xlLine"); - #endregion - - string ContentType = null; - string fileName = null; - - MemoryStream ms = new MemoryStream(); - - if (SaveOption == "ExcelXls") - { - ContentType = "Application/vnd.ms-excel"; - fileName = "Sample.xls"; - workbook.Version = ExcelVersion.Excel97to2003; - workbook.SaveAs(ms); - } - else if (SaveOption == "ExcelXlsm") - { - workbook.Version = ExcelVersion.Excel2013; - ContentType = "application/vnd.ms-excel.sheet.macroEnabled.12"; - fileName = "Sample.xlsm"; - workbook.SaveAs(ms, ExcelSaveType.SaveAsMacro); - } - else - { - workbook.Version = ExcelVersion.Excel2013; - ContentType = "application/vnd.ms-excel.template.macroEnabled.12"; - fileName = "Sample.xltm"; - workbook.SaveAs(ms, ExcelSaveType.SaveAsMacroTemplate); - } - - ms.Position = 0; - - return File(ms, ContentType, fileName); - - } - #endregion - } -} diff --git a/Pages/Excel/EmbeddedChart.cshtml b/Pages/Excel/EmbeddedChart.cshtml deleted file mode 100644 index 29993168..00000000 --- a/Pages/Excel/EmbeddedChart.cshtml +++ /dev/null @@ -1,55 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.EmbeddedChart -@section ActionDescription { - This sample demonstrates how to create a simple chart using XlsIO. -} - -@section Meta { - -} - -@section Description { -

- Essential XlsIO has APIs for creating an embedded chart. The IChartShape interface represents the embedded chart in memory. This object can be used to format and modify chart settings, which is similar to modifying chart properties using Excel. -

-
Features: -
-
-
    -
  • Creation of embedded chart types
  • -
  • Creation of chart from values in a template document
  • -
-
-} -@section ControlsSection { -
- @{ - Html.BeginForm("embeddedchart", "excel", FormMethod.Post); - { -

- Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
- Save As : - - -   - - -
-
-
- -
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Embedded Chart Example - Syncfusion Demos -} -@section Header { -

Example of Embedded Chart in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/EmbeddedChart.cshtml.cs b/Pages/Excel/EmbeddedChart.cshtml.cs deleted file mode 100644 index 71404cb7..00000000 --- a/Pages/Excel/EmbeddedChart.cshtml.cs +++ /dev/null @@ -1,154 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; -using Syncfusion.Drawing; -using Microsoft.Win32.SafeHandles; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class EmbeddedChart : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public EmbeddedChart(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button, string SaveOption) - { - string basePath = _hostingEnvironment.WebRootPath; - - if (button == null) - return null; - - //Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - IApplication application = excelEngine.Excel; - //A new workbook is created.[Equivalent to creating a new workbook in Microsoft Excel] - //Open workbook with Data - FileStream inputStream = new(basePath + @"/XlsIO/EmbeddedChart.xlsx", FileMode.Open, FileAccess.Read); - IWorkbook workbook = application.Workbooks.Open(inputStream); - - if (SaveOption == "Xls") - workbook.Version = ExcelVersion.Excel97to2003; - else - workbook.Version = ExcelVersion.Excel2016; - - //The first worksheet object in the worksheets collection is accessed. - IWorksheet sheet = workbook.Worksheets[0]; - sheet.Name = "Sample"; - - // Adding a New chart to the Existing Worksheet - IChartShape chart = workbook.Worksheets[0].Charts.Add(); - - - chart.DataRange = sheet.Range["A3:C15"]; - chart.ChartTitle = "Crescent City, CA"; - chart.IsSeriesInRows = false; - - chart.PrimaryValueAxis.Title = "Precipitation,in."; - chart.PrimaryValueAxis.TitleArea.TextRotationAngle = 90; - chart.PrimaryValueAxis.MaximumValue = 14.0; - chart.PrimaryValueAxis.NumberFormat = "0.0"; - - chart.PrimaryCategoryAxis.Title = "Month"; - - IChartSerie serieOne = chart.Series[0]; - - //set the Chart Type - chart.ChartType = ExcelChartType.Column_Clustered_3D; - - //set the Backwall fill option - chart.BackWall.Fill.FillType = ExcelFillType.Gradient; - - //set the Texture Type - chart.BackWall.Fill.GradientColorType = ExcelGradientColor.TwoColor; - chart.BackWall.Fill.GradientStyle = ExcelGradientStyle.Diagonl_Down; - chart.BackWall.Fill.ForeColor = Color.WhiteSmoke; - chart.BackWall.Fill.BackColor = Color.LightBlue; - - //set the Border Linecolor - chart.BackWall.Border.LineColor = Color.Wheat; - - //set the Picture Type - chart.BackWall.PictureUnit = ExcelChartPictureType.stretch; - - //set the Backwall thickness - chart.BackWall.Thickness = 10; - - //set the sidewall fill option - chart.SideWall.Fill.FillType = ExcelFillType.SolidColor; - - //set the sidewall foreground and backcolor - chart.SideWall.Fill.BackColor = Color.White; - chart.SideWall.Fill.ForeColor = Color.White; - - //set the side wall Border color - chart.SideWall.Border.LineColor = Color.Beige; - - //set floor fill option - chart.Floor.Fill.FillType = ExcelFillType.Pattern; - - //set the floor pattern Type - chart.Floor.Fill.Pattern = ExcelGradientPattern.Pat_Divot; - - //Set the floor fore and Back ground color - chart.Floor.Fill.ForeColor = Color.Blue; - chart.Floor.Fill.BackColor = Color.White; - - //set the floor thickness - chart.Floor.Thickness = 3; - - IChartSerie serieTwo = chart.Series[1]; - //Show value as data labels - serieOne.DataPoints.DefaultDataPoint.DataLabels.IsValue = true; - serieTwo.DataPoints.DefaultDataPoint.DataLabels.IsValue = true; - - //Embedded Chart Position - chart.TopRow = 2; - chart.BottomRow = 30; - chart.LeftColumn = 5; - chart.RightColumn = 18; - serieTwo.Name = "Temperature,deg.F"; - - // Legend setting - chart.Legend.Position = ExcelLegendPosition.Right; - chart.Legend.IsVerticalLegend = false; - try - { - string ContentType = null; - string fileName = null; - if (SaveOption == "Xls") - { - workbook.Version = ExcelVersion.Excel97to2003; - ContentType = "Application/vnd.ms-excel"; - fileName = "EmbeddedChart.xls"; - } - else - { - workbook.Version = ExcelVersion.Excel2013; - ContentType = "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - fileName = "EmbeddedChart.xlsx"; - } - - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, ContentType, fileName); - } - catch (Exception) - { - } - workbook.Close(); - excelEngine.Dispose(); - return null; - } - } -} diff --git a/Pages/Excel/EncryptAndDecrypt.cshtml b/Pages/Excel/EncryptAndDecrypt.cshtml deleted file mode 100644 index b5095579..00000000 --- a/Pages/Excel/EncryptAndDecrypt.cshtml +++ /dev/null @@ -1,94 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.EncryptAndDecrypt -@section ActionDescription { - This sample demonstrates how to encrypt and decrypt workbooks using XlsIO. -} - -@section Meta { - -} - -@section Description { - This sample focuses on the encryption and decryption of an Excel 2007, Excel 2010, Excel 2013 and Excel 2016 workbook using Essential XlsIO. -
-
Encryption is a method of protecting workbook data.It is based on a password that converts the data into a form that cannot be understood; it also restricts anonymous users from accessing a document. Decryption is the process of converting encrypted data back into its original form so that data can be read from the workbook. -
-
A password for encrypting a workbook can be set in Microsoft Excel 2007, Excel 2010 and Excel 2013 through the Office Menu->Prepare->Encrypt Document command. -
-
- Note: Password protection of a workbook file is different from the workbook structure and window protection you can set in the Review->Protect Workbook -
-
-
- Features: -
-
-
    -
  • Encrypting with a password
  • -
  • Decrypting with a password
  • -
-
-} -@section ControlsSection { -
- @{ - Html.BeginForm("encryptanddecrypt", "excel", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -

- Click the "Encrypt Document" button to view the encrypted Excel document and click the "Decrypt Document" button to view the decrypted Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
- - - - -
-
-
- - -
-
-
- Save As - - -   - - -
-
-
- - -
-
-
-

- Note: Before clicking the "Encrypt Document" button, select the Excel document to be encrypted and enter a password. Before clicking the "Decrypt Document" button, select an encrypted Excel document and enter the document password. -

-
- Html.EndForm(); - } - } -
- -} -@section Title { - ASP.NET Core Excel (XlsIO) library - Encrypt and Decrypt Example - Syncfusion Demos -} -@section Header { -

Example of Encrypt and Decrypt in ASP.NET Core Excel (XlsIO) Library

-} diff --git a/Pages/Excel/EncryptAndDecrypt.cshtml.cs b/Pages/Excel/EncryptAndDecrypt.cshtml.cs deleted file mode 100644 index 1618dd61..00000000 --- a/Pages/Excel/EncryptAndDecrypt.cshtml.cs +++ /dev/null @@ -1,137 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class EncryptAndDecrypt : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public EncryptAndDecrypt(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button, string saveOption, string password, IFormFile file) - { - string basePath = _hostingEnvironment.WebRootPath; - if (button == null) - return null; - - if (password == null) - password = "PASSWORD"; - if (button == "Encrypt Document") - { - - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - application.DefaultVersion = ExcelVersion.Xlsx; - - Stream inputStream = null; - if (file != null) - inputStream = file.OpenReadStream(); - else - inputStream = new FileStream(basePath + @"/XlsIO/Encrypt.xlsx", FileMode.Open, FileAccess.Read); - inputStream.Position = 0; - - // Opening the Existing Worksheet from a Workbook. - IWorkbook workbook = application.Workbooks.Open(inputStream); - - //Encrypt the workbook with password. - workbook.PasswordToOpen = password; - string ContentType = string.Empty; - string fileName = string.Empty; - if (saveOption == "Xls") - { - workbook.Version = ExcelVersion.Excel97to2003; - ContentType = "Application/vnd.ms-excel"; - fileName = "EncryptedDocument.xls"; - } - else - { - workbook.Version = ExcelVersion.Xlsx; - ContentType = "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - fileName = "EncryptedDocument.xlsx"; - } - - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - // Close the workbook - workbook.Close(); - excelEngine.Dispose(); - - return File(ms, ContentType, fileName); - } - else - { - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - application.DefaultVersion = ExcelVersion.Xlsx; - if (file != null && file.FileName.EndsWith(".xls")) - application.DefaultVersion = ExcelVersion.Excel97to2003; - - Stream inputStream = null; - if (file != null) - inputStream = file.OpenReadStream(); - else - inputStream = new FileStream(basePath + @"/XlsIO/EncryptedWorkbook.xlsx", FileMode.Open, FileAccess.Read); - inputStream.Position = 0; - - // Opening the encrypted Workbook. - IWorkbook workbook = application.Workbooks.Open(inputStream, ExcelParseOptions.Default, true, password); - - //Modify the decrypted document. - workbook.Worksheets[0].Range["B2"].Text = "Demo for workbook decryption with Essential XlsIO"; - workbook.Worksheets[0].Range["B5"].Text = "This document is decrypted using password '" + password + "'."; - - workbook.PasswordToOpen = ""; - string ContentType = string.Empty; - string fileName = string.Empty; - if (saveOption == "Xls") - { - workbook.Version = ExcelVersion.Excel97to2003; - ContentType = "Application/vnd.ms-excel"; - fileName = "DecryptedDocument.xls"; - } - else - { - workbook.Version = ExcelVersion.Xlsx; - ContentType = "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - fileName = "DecryptedDocument.xlsx"; - } - - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - // Close the workbook - workbook.Close(); - excelEngine.Dispose(); - - return File(ms, ContentType, fileName); - } - - } - - } -} diff --git a/Pages/Excel/ExcelToCSV.cshtml b/Pages/Excel/ExcelToCSV.cshtml deleted file mode 100644 index 50ecd90c..00000000 --- a/Pages/Excel/ExcelToCSV.cshtml +++ /dev/null @@ -1,68 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.ExcelToCSV -@section ActionDescription { - This sample demonstrates how to convert Excel documents to CSV documents using XlsIO. -} - -@section Meta { - -} - -@section Description { -
Essential XlsIO allows to export Excel document to CSV. -
-
Features: -
-
-
    -
  • Supports conversion of Excel documents to CSV format that includes text, numbers, formulas, and number formatting.
  • -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("exceltocsv", "excel", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
-

- Select the Excel document to convert to CSV and click the "Convert to CSV" button. Please note that a text file viewer is required to view the CSV document. -

-
-
-
- - - - -
-
-
- -
-
- @ViewData["Message"] -
-
- Html.EndForm(); - } - } -
- -} -@section Title { - ASP.NET Core Excel (XlsIO) library - Excel To CSV Example - Syncfusion Demos -} -@section Header { -

Example of Excel To CSV conversion in ASP.NET Core Excel (XlsIO) Library

-} diff --git a/Pages/Excel/ExcelToCSV.cshtml.cs b/Pages/Excel/ExcelToCSV.cshtml.cs deleted file mode 100644 index e55a3907..00000000 --- a/Pages/Excel/ExcelToCSV.cshtml.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class ExcelToCSV : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public ExcelToCSV(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button, IFormFile file) - { - if (button == null) - return null; - - string basePath = _hostingEnvironment.WebRootPath; - ExcelEngine excelEngine = new ExcelEngine(); - IApplication application = excelEngine.Excel; - Stream fileStream = null; - if (file == null) - { - fileStream = new FileStream(basePath + @"/XlsIO/ExcelToCSVTemplate.xlsx", FileMode.Open, FileAccess.Read); - } - else - { - fileStream = file.OpenReadStream(); - } - fileStream.Position = 0; - - //Loads Excel document - IWorkbook workbook = application.Workbooks.Open(fileStream); - - //Save workbook - MemoryStream ms = new MemoryStream(); - string contentType = "text/csv"; - string fileName = "Sample.csv"; - workbook.SaveAs(ms, ","); - ms.Position = 0; - - return File(ms, contentType, fileName); - } - } -} diff --git a/Pages/Excel/ExcelToJSON.cshtml b/Pages/Excel/ExcelToJSON.cshtml deleted file mode 100644 index dec06637..00000000 --- a/Pages/Excel/ExcelToJSON.cshtml +++ /dev/null @@ -1,81 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.ExcelToJSON -@section ControlsSection { -
- @{ - Html.BeginForm("exceltojson", "excel", FormMethod.Post); - { -
-
-
-

- Click the "Input Template" button to view the input Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-

- Click the "Convert to JSON" button to view the converted JSON file. -

-
-
-
-
- -     - -       - - -
-
-
-
-
- -     - -
-
-
-
- Html.EndForm(); - } - } -
-} - -@section ActionDescription { - This sample demonstrates the conversion of Excel documents to JSON file using Essential XlsIO. -} - -@section Meta { - -} -@section Description { -

- Essential XlsIO supports to convert Excel data to JSON files by simply saving the workbook using the SaveAsJson method. -

-
- Features: -
-
-
    -
  • Save as a simple JSON file or a JSON file with XML schema
  • -
  • Save a workbook to JSON
  • -
  • Save a worksheet to JSON
  • -
  • Save a range to JSON
  • -
  • Save as a stream with the above features
  • -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Excel To JSON Example - Syncfusion Demos -} -@section Header { -

Example of Excel To JSON in ASP.NET Core Excel (XlsIO) Library

-} diff --git a/Pages/Excel/ExcelToJSON.cshtml.cs b/Pages/Excel/ExcelToJSON.cshtml.cs deleted file mode 100644 index 87e68393..00000000 --- a/Pages/Excel/ExcelToJSON.cshtml.cs +++ /dev/null @@ -1,77 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class ExcelToJSON : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public ExcelToJSON(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button, string checkBox, string ConvertOptions) - { - string basePath = _hostingEnvironment.WebRootPath; - - if (button == null) - return null; - else if (button == "Input Template") - { - Stream ms = new FileStream(basePath + @"/XlsIO/ExcelToJSON.xlsx", FileMode.Open, FileAccess.Read); - string ContentType = "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - string fileName = "ExcelToJSON.xlsx"; - return File(ms, ContentType, fileName); - } - else if (button == "Convert to JSON") - { - //Initialize ExcelEngine - ExcelEngine excelEngine = new ExcelEngine(); - - //Initialize Application - IApplication application = excelEngine.Excel; - - //Open the input template workbook - FileStream sampleFile = new FileStream(basePath + @"/XlsIO/ExcelToJSON.xlsx", FileMode.Open); - IWorkbook workbook = application.Workbooks.Open(sampleFile); - - //Accessing first worksheet in the workbook - IWorksheet worksheet = workbook.Worksheets[0]; - - IRange range = worksheet.Range["A2:B10"]; - - bool isSchema = (checkBox == "Schema") ? true : false; - - //Save the Excel workbook as JSON file - MemoryStream stream = new MemoryStream(); - if (ConvertOptions == "Workbook") - workbook.SaveAsJson(stream, isSchema); - else if (ConvertOptions == "Worksheet") - workbook.SaveAsJson(stream, worksheet, isSchema); - else if (ConvertOptions == "Range") - workbook.SaveAsJson(stream, range, isSchema); - - //If the position is not set to '0' then the file will be empty. - stream.Position = 0; - - //Download the converted JSON file in the browser - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/json"); - fileStreamResult.FileDownloadName = "ExcelToJSON.json"; - - workbook.Close(); - sampleFile.Dispose(); - - return fileStreamResult; - } - return null; - } - } -} diff --git a/Pages/Excel/ExcelToPDF.cshtml b/Pages/Excel/ExcelToPDF.cshtml deleted file mode 100644 index 19da71bb..00000000 --- a/Pages/Excel/ExcelToPDF.cshtml +++ /dev/null @@ -1,94 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.ExcelToPDF -@section ActionDescription { - This sample demonstrates how to convert Excel documents to PDF documents using XlsIO. -} - -@section Meta { - -} - -@section Description { -
Essential XlsIO allows to export Excel document to PDF by using the Convert method of ExcelToPDFConverter class. It supports customizing layout options, page orientation, paper size, and margins for the converted PDF document. -
-
Features: -
-
-
    -
  • Supports conversion of Excel document to PDF document with cell values, cell styles, tables, charts, autoshapes, pictures, conditional formatting, etc.
  • -
-
- Note: Installation of Essential PDF is necessary to run this sample. -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("exceltopdf", "excel", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
-

- Select the Excel document to be converted to PDF, set the layout options, and click the "ConvertToPDF" button. Please note that a PDF Viewer is required to view the resulting PDF document. -

-
-
-
- - - - -
-
-
-
- -
-
- -
-
-
-
- - -
-
-
- -
-
- @ViewData["Message"] -
-
- Html.EndForm(); - } - } -
- -} -@section Title { - ASP.NET Core Excel (XlsIO) library - Excel To PDF Example - Syncfusion Demos -} -@section Header { -

Example of Excel To PDF conversion in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/ExcelToPDF.cshtml.cs b/Pages/Excel/ExcelToPDF.cshtml.cs deleted file mode 100644 index 7219814e..00000000 --- a/Pages/Excel/ExcelToPDF.cshtml.cs +++ /dev/null @@ -1,107 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Pdf; -using Syncfusion.XlsIO; -using Syncfusion.XlsIORenderer; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class ExcelToPDF : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public ExcelToPDF(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - string basePath = string.Empty; - public ActionResult OnPost(string button, string checkboxStream, string layoutOptions, IFormFile file) - { - if (button == null) - return null; - - basePath = _hostingEnvironment.WebRootPath; - ExcelEngine excelEngine = new ExcelEngine(); - IApplication application = excelEngine.Excel; - application.EnablePartialTrustCode = true; - if (checkboxStream != null) - { - application.SubstituteFont += new Syncfusion.XlsIO.Implementation.SubstituteFontEventHandler(SubstituteFont); - } - - XlsIORenderer renderer = new XlsIORenderer(); - - Stream fileStream = null; - if (file == null) - { - if (checkboxStream != null) - fileStream = new FileStream(basePath + @"/XlsIO/InvoiceTemplate.xlsx", FileMode.Open, FileAccess.Read); - else - fileStream = new FileStream(basePath + @"/XlsIO/ExcelToPDF.xlsx", FileMode.Open, FileAccess.Read); - } - else - { - fileStream = file.OpenReadStream(); - } - fileStream.Position = 0; - - //Loads file stream into Word document - IWorkbook workbook = application.Workbooks.Open(fileStream); - - //Intialize the PdfDocument Class - PdfDocument pdfDoc = new PdfDocument(); - - //Intialize the ExcelToPdfConverterSettings class - XlsIORendererSettings settings = new XlsIORendererSettings(); - settings.IsConvertBlankPage = false; - - //Set the Layout Options for the output Pdf page. - if (layoutOptions == "No scaling") - settings.LayoutOptions = LayoutOptions.NoScaling; - else if (layoutOptions == "Fit all rows on one page") - settings.LayoutOptions = LayoutOptions.FitAllRowsOnOnePage; - else if (layoutOptions == "Fit all columns on one page") - settings.LayoutOptions = LayoutOptions.FitAllColumnsOnOnePage; - else - settings.LayoutOptions = LayoutOptions.FitSheetOnOnePage; - - //Assign the output PdfDocument to the TemplateDocument property of ExcelToPdfConverterSettings - settings.TemplateDocument = pdfDoc; - settings.DisplayGridLines = GridLinesDisplayStyle.Invisible; - //Convert the Excel document to PDf - - pdfDoc = renderer.ConvertToPDF(workbook, settings); - fileStream.Dispose(); - - MemoryStream stream = new MemoryStream(); - pdfDoc.Save(stream); - try - { - stream.Position = 0; - return File(stream, "application/pdf", "ExcelToPDF.pdf"); - } - catch (Exception) - { } - finally - { - - } - return null; - } - - public void SubstituteFont(object sender, Syncfusion.XlsIO.Implementation.SubstituteFontEventArgs args) - { - Stream fileStream = new FileStream(basePath + @"/XlsIO/bahnschrift.ttf", FileMode.Open); - MemoryStream memoryStream = new MemoryStream(); - fileStream.CopyTo(memoryStream); - fileStream.Close(); - args.AlternateFontStream = memoryStream; - } - } -} diff --git a/Pages/Excel/ExcelToPDFUA.cshtml b/Pages/Excel/ExcelToPDFUA.cshtml deleted file mode 100644 index e523ef94..00000000 --- a/Pages/Excel/ExcelToPDFUA.cshtml +++ /dev/null @@ -1,64 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.ExcelToPDFUA -@section ActionDescription { - This sample demonstrates how to convert Excel documents to PDF/UA documents using XlsIO. -} - -@section Meta { - -} - -@section Description { -
Essential XlsIO allows to export Excel document to PDF/UA by using the Convert method of ExcelToPDFConverter class. supports converting a Excel document to a tagged PDF -
- Note: Installation of Essential PDF is necessary to run this sample. -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("exceltopdfua", "excel", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
-

- Select the Excel document to be converted to PDF/UA, and click the "ConvertToPDF" button. Please note that a PDF Viewer is required to view the resulting PDF document. -

-
-
-
- - - - -
-
-
- -
-
- @ViewData["Message"] -
-
- Html.EndForm(); - } - } -
- -} -@section Title { - ASP.NET Core Excel (XlsIO) library - Excel To PDF Example - Syncfusion Demos -} -@section Header { -

Example of Excel To PDF/UA conversion in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/ExcelToPDFUA.cshtml.cs b/Pages/Excel/ExcelToPDFUA.cshtml.cs deleted file mode 100644 index b22cac22..00000000 --- a/Pages/Excel/ExcelToPDFUA.cshtml.cs +++ /dev/null @@ -1,76 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Pdf; -using Syncfusion.XlsIO; -using Syncfusion.XlsIORenderer; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class ExcelToPDFUA : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public ExcelToPDFUA(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - string basePath = string.Empty; - public ActionResult OnPost(string button, string layoutOptions, IFormFile file) - { - if (button == null) - return null; - - basePath = _hostingEnvironment.WebRootPath; - ExcelEngine excelEngine = new ExcelEngine(); - IApplication application = excelEngine.Excel; - application.EnablePartialTrustCode = true; - - XlsIORenderer renderer = new XlsIORenderer(); - - Stream fileStream = null; - if (file == null) - { - fileStream = new FileStream(basePath + @"/XlsIO/ExcelToPdf-UA.xlsx", FileMode.Open, FileAccess.Read); - } - else - { - fileStream = file.OpenReadStream(); - } - fileStream.Position = 0; - - //Loads file stream into Word document - IWorkbook workbook = application.Workbooks.Open(fileStream); - - //Intialize the PdfDocument Class - PdfDocument pdfDoc = new PdfDocument(); - - //Intialize the ExcelToPdfConverterSettings class - XlsIORendererSettings settings = new XlsIORendererSettings(); - settings.AutoTag = true; - - pdfDoc = renderer.ConvertToPDF(workbook, settings); - fileStream.Dispose(); - - MemoryStream stream = new MemoryStream(); - pdfDoc.Save(stream); - try - { - stream.Position = 0; - return File(stream, "application/pdf", "ExcelToPDF.pdf"); - } - catch (Exception) - { } - finally - { - - } - return null; - } - } -} diff --git a/Pages/Excel/ExcelToTSV.cshtml b/Pages/Excel/ExcelToTSV.cshtml deleted file mode 100644 index 6566d86e..00000000 --- a/Pages/Excel/ExcelToTSV.cshtml +++ /dev/null @@ -1,69 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.ExcelToTSV -@section ActionDescription { - This sample demonstrates how to convert Excel documents to TSV documents using XlsIO. -} - -@section Meta { - -} - -@section Description { -
Essential XlsIO allows to export Excel document to TSV. -
-
Features: -
-
-
    -
  • Supports conversion of Excel documents to TSV format that includes text, numbers, formulas, and number formatting.
  • -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("exceltotsv", "excel", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
-

- Select the Excel document to convert to TSV and click the "Convert to TSV" button. Please note that a text file viewer is required to view the TSV document. -

-
-
-
- - - - -
-
-
- -
-
- @ViewData["Message"] -
-
- Html.EndForm(); - } - } -
- -} -@section Title { - ASP.NET Core Excel (XlsIO) library - Excel To TSV Example - Syncfusion Demos -} -@section Header { -

Example of Excel To TSV conversion in ASP.NET Core Excel (XlsIO) Library

-} - diff --git a/Pages/Excel/ExcelToTSV.cshtml.cs b/Pages/Excel/ExcelToTSV.cshtml.cs deleted file mode 100644 index 62422d34..00000000 --- a/Pages/Excel/ExcelToTSV.cshtml.cs +++ /dev/null @@ -1,53 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class ExcelToTSV : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public ExcelToTSV(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button, IFormFile file) - { - if (button == null) - return null; - - string basePath = _hostingEnvironment.WebRootPath; - ExcelEngine excelEngine = new ExcelEngine(); - IApplication application = excelEngine.Excel; - Stream fileStream = null; - if (file == null) - { - fileStream = new FileStream(basePath + @"/XlsIO/ExcelToTSVTemplate.xlsx", FileMode.Open, FileAccess.Read); - } - else - { - fileStream = file.OpenReadStream(); - } - fileStream.Position = 0; - - //Loads Excel document - IWorkbook workbook = application.Workbooks.Open(fileStream); - - //Save workbook - MemoryStream ms = new MemoryStream(); - string contentType = "text/tab-separated-values"; - string fileName = "Sample.tsv"; - workbook.SaveAs(ms, "\t"); - ms.Position = 0; - - return File(ms, contentType, fileName); - } - } -} diff --git a/Pages/Excel/ExpensesReport.cshtml b/Pages/Excel/ExpensesReport.cshtml deleted file mode 100644 index 7caf5ecd..00000000 --- a/Pages/Excel/ExpensesReport.cshtml +++ /dev/null @@ -1,52 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.ExpensesReport -@section ActionDescription { - This sample demonstrates how to create a simple Excel report for expenses with data, chart, formula, and cell formatting using XlsIO. -} - -@section Meta { - -} -@section Description { - Expenses report is used for visualizing a company's financial statistics. This demo shows a expenses report with the difference between expected cost and actual cost for the different categories of a company’s expenses. -
-
- Features: -
-
This sample demonstrates following features: -
-
-
    -
  • Cell formattings
  • -
  • Chart
  • -
  • Number formats
  • -
  • Formulas
  • -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("expensesreport", "excel", FormMethod.Post); - { -
-

- Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
-
-
- -
-
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Expenses Report Example - Syncfusion Demos -} -@section Header { -

Example of Expenses Report in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/ExpensesReport.cshtml.cs b/Pages/Excel/ExpensesReport.cshtml.cs deleted file mode 100644 index 0dc57707..00000000 --- a/Pages/Excel/ExpensesReport.cshtml.cs +++ /dev/null @@ -1,149 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class ExpensesReport : PageModel - { - public void OnGet() - { - } - #region ExpensesReport - public ActionResult OnPost(string button) - { - if (button == null) - return null; - - //New instance of XlsIO is created.[Equivalent to launching MS Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - #region Generate Excel - // Creating new workbook - IWorkbook workbook = application.Workbooks.Create(1); - IWorksheet sheet1 = workbook.Worksheets[0]; - sheet1.Name = "Budget"; - sheet1.IsGridLinesVisible = false; - sheet1.EnableSheetCalculations(); - - sheet1.Range[1, 1].ColumnWidth = 19.86; - sheet1.Range[1, 2].ColumnWidth = 14.38; - sheet1.Range[1, 3].ColumnWidth = 12.98; - sheet1.Range[1, 4].ColumnWidth = 12.08; - sheet1.Range[1, 5].ColumnWidth = 8.82; - sheet1.Range["A1:A18"].RowHeight = 20.2; - - //Adding cell style. - IStyle style1 = workbook.Styles.Add("style1"); - style1.Color = Syncfusion.Drawing.Color.FromArgb(217, 225, 242); - style1.HorizontalAlignment = ExcelHAlign.HAlignLeft; - style1.VerticalAlignment = ExcelVAlign.VAlignCenter; - style1.Font.Bold = true; - - IStyle style2 = workbook.Styles.Add("style2"); - style2.Color = Syncfusion.Drawing.Color.FromArgb(142, 169, 219); - style2.VerticalAlignment = ExcelVAlign.VAlignCenter; - style2.NumberFormat = "[Red]($#,###)"; - style2.Font.Bold = true; - - sheet1.Range["A10"].CellStyle = style1; - sheet1.Range["B10:D10"].CellStyle.Color = Syncfusion.Drawing.Color.FromArgb(217, 225, 242); - sheet1.Range["B10:D10"].HorizontalAlignment = ExcelHAlign.HAlignRight; - sheet1.Range["B10:D10"].VerticalAlignment = ExcelVAlign.VAlignCenter; - sheet1.Range["B10:D10"].CellStyle.Font.Bold = true; - - sheet1.Range["A11:A17"].CellStyle.VerticalAlignment = ExcelVAlign.VAlignCenter; - sheet1.Range["A11:D17"].Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thin; - sheet1.Range["A11:D17"].Borders[ExcelBordersIndex.EdgeBottom].Color = ExcelKnownColors.Grey_25_percent; - - sheet1.Range["D18"].CellStyle = style2; - sheet1.Range["D18"].CellStyle.VerticalAlignment = ExcelVAlign.VAlignCenter; - sheet1.Range["A18:C18"].CellStyle.Color = Syncfusion.Drawing.Color.FromArgb(142, 169, 219); - sheet1.Range["A18:C18"].CellStyle.VerticalAlignment = ExcelVAlign.VAlignCenter; - sheet1.Range["A18:C18"].CellStyle.Font.Bold = true; - sheet1.Range["A18:C18"].NumberFormat = "$#,###"; - - sheet1.Range[10, 1].Text = "Category"; - sheet1.Range[10, 2].Text = "Expected cost"; - sheet1.Range[10, 3].Text = "Actual Cost"; - sheet1.Range[10, 4].Text = "Difference"; - sheet1.Range[11, 1].Text = "Venue"; - sheet1.Range[12, 1].Text = "Seating & Decor"; - sheet1.Range[13, 1].Text = "Technical team"; - sheet1.Range[14, 1].Text = "Performers"; - sheet1.Range[15, 1].Text = "Performer\'s transport"; - sheet1.Range[16, 1].Text = "Performer\'s stay"; - sheet1.Range[17, 1].Text = "Marketing"; - sheet1.Range[18, 1].Text = "Total"; - - sheet1.Range["B11:D17"].NumberFormat = "$#,###"; - sheet1.Range["D11"].NumberFormat = "[Red]($#,###)"; - sheet1.Range["D12"].NumberFormat = "[Red]($#,###)"; - sheet1.Range["D14"].NumberFormat = "[Red]($#,###)"; - - sheet1.Range["B11"].Number = 16250; - sheet1.Range["B12"].Number = 1600; - sheet1.Range["B13"].Number = 1000; - sheet1.Range["B14"].Number = 12400; - sheet1.Range["B15"].Number = 3000; - sheet1.Range["B16"].Number = 4500; - sheet1.Range["B17"].Number = 3000; - sheet1.Range["B18"].Formula = "=SUM(B11:B17)"; - - sheet1.Range["C11"].Number = 17500; - sheet1.Range["C12"].Number = 1828; - sheet1.Range["C13"].Number = 800; - sheet1.Range["C14"].Number = 14000; - sheet1.Range["C15"].Number = 2600; - sheet1.Range["C16"].Number = 4464; - sheet1.Range["C17"].Number = 2700; - sheet1.Range["C18"].Formula = "=SUM(C11:C17)"; - - sheet1.Range["D11"].Formula = "=IF(C11>B11,C11-B11,B11-C11)"; - sheet1.Range["D12"].Formula = "=IF(C12>B12,C12-B12,B12-C12)"; - sheet1.Range["D13"].Formula = "=IF(C13>B13,C13-B13,B13-C13)"; - sheet1.Range["D14"].Formula = "=IF(C14>B14,C14-B14,B14-C14)"; - sheet1.Range["D15"].Formula = "=IF(C15>B15,C15-B15,B15-C15)"; - sheet1.Range["D16"].Formula = "=IF(C16>B16,C16-B16,B16-C16)"; - sheet1.Range["D17"].Formula = "=IF(C17>B17,C17-B17,B17-C17)"; - sheet1.Range["D18"].Formula = "=IF(C18>B18,C18-B18,B18-C18)"; - - IChartShape chart = sheet1.Charts.Add(); - chart.ChartType = ExcelChartType.Pie; - chart.DataRange = sheet1.Range["A11:B17"]; - chart.IsSeriesInRows = false; - chart.ChartTitle = "Event Expenses"; - chart.ChartTitleArea.Bold = true; - chart.ChartTitleArea.Size = 16; - chart.TopRow = 1; - chart.BottomRow = 10; - chart.LeftColumn = 1; - chart.RightColumn = 5; - chart.ChartArea.Border.LinePattern = ExcelChartLinePattern.None; - #endregion - - workbook.Version = ExcelVersion.Excel2013; - string ContentType = "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - string fileName = "ExpenseReport.xlsx"; - - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, ContentType, fileName); - } - #endregion - } -} diff --git a/Pages/Excel/FormControls.cshtml b/Pages/Excel/FormControls.cshtml deleted file mode 100644 index 475ba9ae..00000000 --- a/Pages/Excel/FormControls.cshtml +++ /dev/null @@ -1,55 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.FormControls -@section ActionDescription { - This sample demonstrates how to use form controls in spreadsheet using XlsIO. -} -@section Meta { - -} -@section Description { - Essential XlsIO can read and write form controls such as text boxes, check boxes, combo boxes and option buttons. -
-
Features: -
-
-
    -
  • Creating rich reports with text boxes, check boxes, and combo boxes using XlsIO
  • -
  • Text box formatting
  • -
  • Check boxes with Cell Link
  • -
  • Combo boxes with formatting
  • -
  • Option button with formatting
  • -
-
-} -@section ControlsSection { -
- @{ - Html.BeginForm("formcontrols", "excel", FormMethod.Post); - { -

- Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
- Save As : - - -   - - -
-
-
- -
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Form Controls Example - Syncfusion Demos -} -@section Header { -

Example of Form Controls in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/FormControls.cshtml.cs b/Pages/Excel/FormControls.cshtml.cs deleted file mode 100644 index 08501a9c..00000000 --- a/Pages/Excel/FormControls.cshtml.cs +++ /dev/null @@ -1,261 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; -using Syncfusion.Drawing; -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class FormControls : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - private Color color1; - private string[] onlinePayments; - public FormControls(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - // - // GET: /FormControls/ - - public ActionResult OnPost(string SaveOption) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPathTemp = basePath + @"/images/XlsIO/contact_sales.gif"; - if (SaveOption == null) - return null; - - onlinePayments = new string[] { "Credit Card", "Net Banking" }; - // New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - // The instantiation process consists of two steps. - - // Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - // Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - // Check if user opts for XLSX - if (SaveOption == "Xlsx") - { - application.DefaultVersion = ExcelVersion.Excel2016; - color1 = Color.FromArgb(255, 255, 230); - } - // Check if user opts for XLS - else - color1 = Color.FromArgb(255, 255, 204); - - // A new workbook is created.[Equivalent to creating a new workbook in Microsoft Excel] - // Workbook created with two worksheets - IWorkbook workbook = application.Workbooks.Create(2); - // The first worksheet object in the worksheets collection is accessed. - // (0 based index) - IWorksheet sheet2 = workbook.Worksheets[1]; - //Assigning the array content to cells - // by passing row and column position - for (int i = 0; i < onlinePayments.Length; i++) - sheet2.SetValue(i + 1, 1, onlinePayments[i]); - - // The first worksheet object in the worksheets collection is accessed. - IWorksheet sheet = workbook.Worksheets[0]; - - FileStream imageStream = new FileStream(dataPathTemp , FileMode.Open, FileAccess.Read); - sheet.Pictures.AddPicture(2, 3, imageStream); - - sheet[4, 3].Text = "Phone"; - sheet[4, 3].CellStyle.Font.Bold = true; - sheet[5, 3].Text = "Toll Free"; - sheet[5, 5].Text = "1-888-9DOTNET"; - sheet[6, 5].Text = "1-888-936-8638"; - sheet[7, 5].Text = "1-919-481-1974"; - sheet[8, 3].Text = "Fax"; - sheet[8, 5].Text = "1-919-573-0306"; - sheet[9, 3].Text = "Email"; - sheet[10, 3].Text = "Sales"; - //Creating the hyperlink in the 10th column and - //5th row of the sheet - IHyperLink link = sheet.HyperLinks.Add(sheet[10, 5]); - link.Type = ExcelHyperLinkType.Url; - link.Address = "mailto:sales@syncfusion.com"; - - sheet[12, 3].Text = "Please fill out all required fields."; - sheet[14, 5].Text = "First Name*"; - sheet[14, 5].CellStyle.Font.Bold = true; - sheet[14, 8].Text = "Last Name*"; - sheet[14, 8].CellStyle.Font.Bold = true; - - //Create textbox for respective field - //textbox to get First Name - ITextBoxShape textBoxShape = sheet.TextBoxes.AddTextBox(15, 5, 23, 190); - textBoxShape.Fill.FillType = ExcelFillType.SolidColor; - textBoxShape.Fill.ForeColor = color1; - - //textbox to get Last Name - textBoxShape = sheet.TextBoxes.AddTextBox(15, 8, 23, 195); - textBoxShape.Fill.FillType = ExcelFillType.SolidColor; - textBoxShape.Fill.ForeColor = color1; - - sheet[17, 3].Text = "Company*"; - textBoxShape = sheet.TextBoxes.AddTextBox(17, 5, 23, 385); - textBoxShape.Fill.FillType = ExcelFillType.SolidColor; - textBoxShape.Fill.ForeColor = color1; - sheet[19, 3].Text = "Phone*"; - textBoxShape = sheet.TextBoxes.AddTextBox(19, 5, 23, 385); - textBoxShape.Fill.FillType = ExcelFillType.SolidColor; - textBoxShape.Fill.ForeColor = color1; - sheet[21, 3].Text = "Email*"; - textBoxShape = sheet.TextBoxes.AddTextBox(21, 5, 23, 385); - textBoxShape.Fill.FillType = ExcelFillType.SolidColor; - textBoxShape.Fill.ForeColor = color1; - sheet[23, 3].Text = "Website"; - textBoxShape = sheet.TextBoxes.AddTextBox(23, 5, 23, 385); - - ICheckBoxShape chkBoxProducts = sheet.CheckBoxes.AddCheckBox(25, 5, 20, 75); - chkBoxProducts.Text = ""; - - sheet[25, 3].Text = "Multiple products?"; - - sheet[27, 3, 28, 3].Merge(); - sheet[27, 3].Text = "Product(s)*"; - sheet[27, 3].MergeArea.CellStyle.VerticalAlignment = ExcelVAlign.VAlignCenter; - // Create a checkbox for each product - ICheckBoxShape chkBoxProduct; - chkBoxProduct = sheet.CheckBoxes.AddCheckBox(27, 5, 20, 75); - chkBoxProduct.Text = "Studio"; - chkBoxProduct = sheet.CheckBoxes.AddCheckBox(27, 6, 20, 75); - chkBoxProduct.Text = "Calculate"; - chkBoxProduct.IsSizeWithCell = true; - chkBoxProduct = sheet.CheckBoxes.AddCheckBox(27, 7, 20, 75); - chkBoxProduct.Text = "Chart"; - chkBoxProduct = sheet.CheckBoxes.AddCheckBox(27, 8, 20, 75); - chkBoxProduct.Text = "Diagram"; - chkBoxProduct.IsSizeWithCell = true; - chkBoxProduct = sheet.CheckBoxes.AddCheckBox(27, 9, 20, 75); - chkBoxProduct.Text = "Edit"; - chkBoxProduct = sheet.CheckBoxes.AddCheckBox(27, 10, 20, 75); - chkBoxProduct.Text = "XlsIO"; - chkBoxProduct = sheet.CheckBoxes.AddCheckBox(28, 5, 20, 75); - chkBoxProduct.Text = "Grid"; - chkBoxProduct = sheet.CheckBoxes.AddCheckBox(28, 6, 20, 75); - chkBoxProduct.Text = "Grouping"; - chkBoxProduct = sheet.CheckBoxes.AddCheckBox(28, 7, 20, 75); - chkBoxProduct.Text = "HTMLUI"; - chkBoxProduct = sheet.CheckBoxes.AddCheckBox(28, 8, 20, 75); - chkBoxProduct.Text = "PDF"; - chkBoxProduct = sheet.CheckBoxes.AddCheckBox(28, 9, 20, 75); - chkBoxProduct.Text = "Tools"; - chkBoxProduct = sheet.CheckBoxes.AddCheckBox(28, 10, 20, 75); - chkBoxProduct.Text = "DocIO"; - chkBoxProducts.CheckState = ExcelCheckState.Mixed; - - //generate the link to linked cell property and formula - GenerateFormula(excelEngine); - - - sheet[30, 3].Text = "Selected Products Count"; - //counts the selected product - sheet[30, 5].Formula = "Sum(AA2:AA13)"; - //align the cell content - sheet[30, 5].CellStyle.HorizontalAlignment = ExcelHAlign.HAlignLeft; - //create the textbox for additional information - sheet[35, 3].Text = "Additional Information"; - textBoxShape = sheet.TextBoxes.AddTextBox(32, 5, 150, 385); - - - if (!(SaveOption == "Xls")) - { - sheet[43, 3].Text = "Online Payment"; - - // Create combobox - IComboBoxShape comboBox1 = sheet.ComboBoxes.AddComboBox(43, 5, 20, 100); - - // Assign range to display in dropdown list - comboBox1.ListFillRange = sheet2["A1:A2"]; - - // select 1st item from the list - comboBox1.SelectedIndex = 1; - - sheet[46, 3].Text = "Card Type"; - IOptionButtonShape optionButton1 = sheet.OptionButtons.AddOptionButton(46, 5); - optionButton1.Text = "American Express"; - optionButton1.CheckState = ExcelCheckState.Checked; - - optionButton1 = sheet.OptionButtons.AddOptionButton(46, 7); - optionButton1.Text = "Master Card"; - - optionButton1 = sheet.OptionButtons.AddOptionButton(46, 9); - optionButton1.Text = "Visa"; - } - //column alignment - sheet.Columns[0].AutofitColumns(); - sheet.Columns[3].ColumnWidth = 12; - sheet.Columns[4].ColumnWidth = 10; - sheet.Columns[5].ColumnWidth = 10; - sheet.IsGridLinesVisible = false; - - sheet.DeleteRow(40); - sheet.DeleteRow(41); - sheet.DeleteRow(42); - sheet.DeleteRow(45); - try - { - string ContentType = null; - string fileName = null; - if (SaveOption == "Xls") - { - workbook.Version = ExcelVersion.Excel97to2003; - ContentType = "Application/vnd.ms-excel"; - fileName = "FormControls.xls"; - } - else - { - workbook.Version = ExcelVersion.Excel2013; - ContentType = "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - fileName = "FormControls.xlsx"; - } - - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, ContentType, fileName); - } - catch (Exception) - { - } - - // Close the workbook - workbook.Close(); - excelEngine.Dispose(); - return null; - } - #region Helper Methods - /// - /// Generates the formula and linkedcell - /// - /// excel application engine - private void GenerateFormula(ExcelEngine excelEngine) - { - //gets the address of the 1st sheet - IWorksheet worksheet = excelEngine.Excel.Workbooks[0].Worksheets[0]; - ICheckBoxes checkBoxes = worksheet.CheckBoxes; - string formula; - // loop through each checkbox and assing the link - for (int i = 1; i < checkBoxes.Count; i++) - { - // range for linkedcell - IRange range = worksheet["Z" + (i + 1)]; - checkBoxes[i].LinkedCell = range; - //formula to check whether the checkbox checked - formula = "IF(" + range.AddressLocal + ",1,0)"; - worksheet["AA" + (i + 1)].Formula = formula; - } - } - #endregion - } -} diff --git a/Pages/Excel/FormatCells.cshtml b/Pages/Excel/FormatCells.cshtml deleted file mode 100644 index f4b764f3..00000000 --- a/Pages/Excel/FormatCells.cshtml +++ /dev/null @@ -1,60 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.FormatCells -@section ActionDescription { - This sample demonstrates how to apply formatting to the cells using XlsIO. -} - -@section Meta { - -} - -@section Description { -

- Formatting worksheets makes them more attractive and easier to use. Excel provides various options for setting font, font size, color, and background. - The "Format Cells" dialog in Excel has six tabs, each with several characteristics that allow you to set various formats for a cell. You can set number formats, horizontal and vertical alignment, text control operations, font and font styles, and borders for the cells.
-

-
- Features: -
-
-
    -
  • Various styles such as colors, font settings, borders, and alignments
  • -
  • Number formats
  • -
  • Patterns
  • -
  • Conditional formatting
  • -
  • RTF
  • -
  • Image insertion
  • -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("formatcells", "excel", FormMethod.Post); - { -

- Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
- Save As : - - -   - - -
-
-
- -
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Format Cells Example - Syncfusion Demos -} -@section Header { -

Example of Format Cells in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/FormatCells.cshtml.cs b/Pages/Excel/FormatCells.cshtml.cs deleted file mode 100644 index 3bdab6fd..00000000 --- a/Pages/Excel/FormatCells.cshtml.cs +++ /dev/null @@ -1,265 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; -using Syncfusion.Drawing; -using System.Globalization; -using Microsoft.Win32.SafeHandles; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class FormatCells : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public FormatCells(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button, string SaveOption) - { - string basePath = _hostingEnvironment.WebRootPath; - - if (button == null) - return null; - - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - - if (SaveOption == "Xls") - application.DefaultVersion = ExcelVersion.Excel97to2003; - else - application.DefaultVersion = ExcelVersion.Excel2016; - //A new workbook is created.[Equivalent to creating a new workbook in Microsoft Excel] - //The new workbook will have 3 worksheets - IWorkbook workbook = application.Workbooks.Create(3); - //The first worksheet object in the worksheets collection is accessed. - IWorksheet sheet = workbook.Worksheets[0]; - sheet.IsGridLinesVisible = false; - - # region RTF - //Insert Rich Text - IRange range = sheet.Range["D3"]; - range.Text = "Employee Report"; - IRichTextString rtf = range.RichText; - - //Formatting the text - IFont redFont = workbook.CreateFont(); - redFont.Size = 16; - redFont.Bold = true; - redFont.Italic = true; - redFont.RGBColor = Color.FromArgb(0x82, 0x2e, 0x1b); - rtf.SetFont(0, 14, redFont); - - - #endregion - - #region Number Formatting - - sheet.Range["H24"].Number = 5000; - sheet.Range["H24"].NumberFormat = "$#,##0.00"; - sheet.Range["H14"].NumberFormat = "dd/mm/yyyy"; - sheet.Range["H14"].DateTime = DateTime.Parse(" 8/3/1963", CultureInfo.InvariantCulture); - sheet.Range["H16"].NumberFormat = "mm/dd/yyyy"; - sheet.Range["H16"].DateTime = DateTime.Parse(" 4/1/1992", CultureInfo.InvariantCulture); - - #endregion - - # region Alignment settings - - # region Text alignment - sheet.Range["F10:F24"].HorizontalAlignment = ExcelHAlign.HAlignRight; - sheet.Range["D3"].HorizontalAlignment = ExcelHAlign.HAlignCenter; - sheet.Range["H10:H24"].HorizontalAlignment = ExcelHAlign.HAlignLeft; - sheet.Range["F10:F24"].VerticalAlignment = ExcelVAlign.VAlignCenter; - - #endregion - - #region Text Control - sheet.Range["F27"].WrapText = true; - sheet.Range["F27"].Text = "Antony Jose graduated from St. Andrews University, Scotland, with a BSC degree in 1976. Upon joining the company as a sales representative in 1992, he spent 6 months in an orientation program at the Seattle office and then returned to his permanent post in London. He was promoted to sales manager in March 1993."; - - #endregion - - #region Cell merging - sheet.Range["F27:H28"].Merge(); - sheet.Range["D3:F3"].Merge(); - sheet.Range["B7:J8"].Merge(); - sheet.Range["F27"].RowHeight = 66; - sheet.Range["H10:H24"].ColumnWidth = 25; - sheet.Range["C10:D28"].Merge(); - sheet.Range["B10:C28"].ColumnWidth = 1; - sheet.Range["E10:E28"].ColumnWidth = 5; - sheet.Range["D10:D28"].ColumnWidth = 15; - #endregion - - #region Text Direction - sheet.Range["B7"].Text = "Antony Jose"; - sheet.Range["B7"].CellStyle.ReadingOrder = Syncfusion.XlsIO.ExcelReadingOrderType.LeftToRight; - sheet.Range["B7"].CellStyle.HorizontalAlignment = ExcelHAlign.HAlignLeft; - sheet.Range["B7"].CellStyle.VerticalAlignment = ExcelVAlign.VAlignCenter; - #endregion - - #region Text Indent - - sheet.Range["D7"].CellStyle.IndentLevel = 6; - - #endregion - - - #endregion - - #region Font settings - - // Setting Font Type - sheet.Range["F10:F24"].CellStyle.Font.FontName = "Arial"; - sheet.Range["D3"].CellStyle.Font.FontName = "Arial"; - sheet.Range["B7"].CellStyle.Font.FontName = "Arial"; - sheet.Range["B7"].CellStyle.Font.Size = 12f; - sheet.Range["B7"].CellStyle.Font.Bold = true; - - // Setting Font Styles - sheet.Range["F10:F24"].CellStyle.Font.Bold = true; - sheet.Range["D3"].CellStyle.Font.Bold = true; - - // Setting Font Size - sheet.Range["F10:F24"].CellStyle.Font.Size = 10; - sheet.Range["D3"].CellStyle.Font.Size = 14; - sheet.Range["F27:H28"].CellStyle.Font.Size = 9f; - - // Setting Font Color - sheet.Range["B7"].CellStyle.Font.RGBColor = Color.White; - sheet.Range["D28"].CellStyle.Font.RGBColor = Color.White; - - - // Setting UnderLine - sheet.Range["D3"].CellStyle.Font.Underline = ExcelUnderline.Double; - - sheet.Range["F10"].Text = "Name"; - sheet.Range["F12"].Text = "Title"; - sheet.Range["F14"].Text = "Birth Date"; - sheet.Range["F16"].Text = "Hire date"; - sheet.Range["F18"].Text = "Home phone"; - sheet.Range["F20"].Text = "Extension"; - sheet.Range["F22"].Text = "Home address"; - sheet.Range["F24"].Text = "Salary"; - - sheet.Range["H10"].Text = "Antony Jose"; - sheet.Range["H12"].Text = "Sales Manager"; - sheet.Range["H18"].Text = "(206) 555-3412"; - sheet.Range["H20"].Number = 3355; - sheet.Range["H22"].Text = "722 Moss Bay Blvd"; - - - #endregion - - #region Insert Image - FileStream imageStream = new(basePath + @"/images/XlsIO/EMPID1.png", FileMode.Open, FileAccess.Read); - sheet.Pictures.AddPicture(11, 4, imageStream, 55, 65); - #endregion - - #region Border setting - - sheet.Range["H10"].CellStyle.Borders.LineStyle = ExcelLineStyle.Medium; - sheet.Range["H10"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["H10"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - - sheet.Range["H12"].CellStyle.Borders.LineStyle = ExcelLineStyle.Medium; - sheet.Range["H12"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["H12"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - - sheet.Range["H14"].CellStyle.Borders.LineStyle = ExcelLineStyle.Medium; - sheet.Range["H14"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["H14"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - - sheet.Range["H16"].CellStyle.Borders.LineStyle = ExcelLineStyle.Medium; - sheet.Range["H16"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["H16"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - - sheet.Range["H18"].CellStyle.Borders.LineStyle = ExcelLineStyle.Medium; - sheet.Range["H18"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["H18"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - - sheet.Range["H20"].CellStyle.Borders.LineStyle = ExcelLineStyle.Medium; - sheet.Range["H20"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["H20"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - - sheet.Range["H22"].CellStyle.Borders.LineStyle = ExcelLineStyle.Medium; - sheet.Range["H22"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["H22"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - - sheet.Range["H24"].CellStyle.Borders.LineStyle = ExcelLineStyle.Medium; - sheet.Range["H24"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["H24"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - - sheet.Range["F27:H28"].CellStyle.Borders.LineStyle = ExcelLineStyle.Medium; - sheet.Range["F27:H28"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["F27:H28"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - - sheet.Range["C10:D28"].CellStyle.Borders.LineStyle = ExcelLineStyle.Thin; - sheet.Range["C10:D28"].CellStyle.Borders[ExcelBordersIndex.DiagonalDown].ShowDiagonalLine = false; - sheet.Range["C10:D28"].CellStyle.Borders[ExcelBordersIndex.DiagonalUp].ShowDiagonalLine = false; - - #endregion - - #region Pattern settings - sheet.Range["B9:I29"].CellStyle.Color = Color.FromArgb(198, 215, 239); - sheet.Range["A7:J8"].CellStyle.Color = Color.FromArgb(57, 93, 148); - - sheet.Range["A7:A30"].CellStyle.Color = Color.FromArgb(57, 93, 148); - sheet.Range["A7:A30"].ColumnWidth = 2.29; - - sheet.Range["J7:J30"].CellStyle.Color = Color.FromArgb(57, 93, 148); - sheet.Range["J7:J30"].ColumnWidth = 2.29; - - sheet.Range["A30:J30"].CellStyle.Color = Color.FromArgb(57, 93, 148); - - sheet.Range["C10:D28"].CellStyle.Color = Color.FromArgb(231, 235, 247); - sheet.Range["F27:H28"].CellStyle.Color = Color.FromArgb(231, 235, 247); - #endregion - - try - { - string ContentType = null; - string fileName = null; - if (SaveOption == "Xls") - { - workbook.Version = ExcelVersion.Excel97to2003; - ContentType = "Application/vnd.ms-excel"; - fileName = "FormatCells.xls"; - } - else - { - workbook.Version = ExcelVersion.Excel2013; - ContentType = "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - fileName = "FormatCells.xlsx"; - } - - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, ContentType, fileName); - } - catch (Exception) - { - } - - // Close the workbook - workbook.Close(); - excelEngine.Dispose(); - return null; - } - } -} diff --git a/Pages/Excel/Formulas.cshtml b/Pages/Excel/Formulas.cshtml deleted file mode 100644 index cd2831a4..00000000 --- a/Pages/Excel/Formulas.cshtml +++ /dev/null @@ -1,82 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.Formulas -@section ActionDescription { - This sample demonstrates how to use formulas in spreadsheets using XlsIO. -} - -@section Meta { - -} - -@section Description { -

- Formulas are entries in Excel that have an equation that calculates the value to be displayed. A typical formula might contain cells, constants, and even functions. Essential XlsIO has support for reading and writing formulas. -

-
- Features: -
-
-
    -
  • Writing array formulas
  • -
  • Writing Excel built-in formulas
  • -
  • Reading formula strings using XlsIO
  • -
  • Reading evaluated formulas using XlsIO
  • -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("formulas", "excel", FormMethod.Post); - { -
-

- Click the "Read Formula" button to view the formula and its CalculatedValue. Click the "Write Formula" button to view the Excel spreadsheet generated by Essential XlsIO. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
-
-
- -    - -
-
-
-
-
-
-
- -     - - -
-
-
-
-
-
-
- - -
-
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Formulas Example - Syncfusion Demos -} -@section Header { -

Example of Formulas in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/Formulas.cshtml.cs b/Pages/Excel/Formulas.cshtml.cs deleted file mode 100644 index 2b5faffe..00000000 --- a/Pages/Excel/Formulas.cshtml.cs +++ /dev/null @@ -1,140 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class Formulas : PageModel - { - public string ComputedValue = ""; - public string FormulaString = ""; - private readonly IWebHostEnvironment _hostingEnvironment; - public Formulas(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button) - { - string basePath = _hostingEnvironment.WebRootPath; - if (button == null) - return null; - else if (button == "Write Formula") - { - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - //A new workbook is created.[Equivalent to creating a new workbook in Microsoft Excel] - //The new workbook will have 3 worksheets - IWorkbook workbook = application.Workbooks.Create(3); - //The first worksheet object in the worksheets collection is accessed. - IWorksheet sheet = workbook.Worksheets[0]; - - #region Insert Array Formula - - sheet.Range["A2"].Text = "Array formulas"; - sheet.Range["B2:E2"].FormulaArray = "{10,20,30,40}"; - sheet.Names.Add("ArrayRange", sheet.Range["B2:E2"]); - sheet.Range["B3:E3"].FormulaArray = "ArrayRange+100"; - sheet.Range["A2"].CellStyle.Font.Bold = true; - sheet.Range["A2"].CellStyle.Font.Size = 14; - - #endregion - - #region Excel functions - - sheet.Range["A5"].Text = "Formula"; - sheet.Range["B5"].Text = "Result"; - - sheet.Range["A7"].Text = "ABS(ABS(-B3))"; - sheet.Range["B7"].Formula = "ABS(ABS(-B3))"; - - sheet.Range["A9"].Text = "SUM(B3,C3)"; - sheet.Range["B9"].Formula = "SUM(B3,C3)"; - - sheet.Range["A11"].Text = "MIN({10,20,30;5,15,35;6,16,36})"; - sheet.Range["B11"].Formula = "MIN({10,20,30;5,15,35;6,16,36})"; - - sheet.Range["A13"].Text = "LOOKUP(B3,B3:E8)"; - sheet.Range["B13"].Formula = "LOOKUP(B3,B3:E3)"; - - sheet.Range["A5:B5"].CellStyle.Font.Bold = true; - sheet.Range["A5:B5"].CellStyle.Font.Size = 14; - - #endregion - - #region Simple formulas - sheet.Range["C7"].Number = 10; - sheet.Range["C9"].Number = 10; - sheet.Range["A15"].Text = "C7+C9"; - sheet.Range["B15"].Formula = "C7+C9"; - - #endregion - - sheet.Range["B1"].Text = "Excel formula support"; - sheet.Range["B1"].CellStyle.Font.Bold = true; - sheet.Range["B1"].CellStyle.Font.Size = 14; - sheet.Range["B1:E1"].Merge(); - sheet.Range["A1:A15"].AutofitColumns(); - - try - { - - workbook.Version = ExcelVersion.Excel97to2003; - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, "Application/vnd.ms-excel", "Formulas.xls"); - } - catch (Exception) - { - } - - // Close the workbook - workbook.Close(); - excelEngine.Dispose(); - return null; - } - else - { - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - FileStream inputStream = new FileStream(basePath + @"/XlsIO/FormulaTemplate.xls", FileMode.Open, FileAccess.Read); - IWorkbook workbook = application.Workbooks.Open(inputStream); - - //The first worksheet object in the worksheets collection is accessed. - IWorksheet sheet = workbook.Worksheets[0]; - - //Read computed Formula Value. - double value = sheet.Range["C1"].FormulaNumberValue; - ComputedValue=value.ToString(); - - //Read Formula - FormulaString = sheet.Range["C1"].Formula; - - //Close the workbook. - workbook.Close(); - excelEngine.Dispose(); - } - return null; - } - } -} diff --git a/Pages/Excel/GroupShapes.cshtml b/Pages/Excel/GroupShapes.cshtml deleted file mode 100644 index 41ec38c3..00000000 --- a/Pages/Excel/GroupShapes.cshtml +++ /dev/null @@ -1,70 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.GroupShapes -@section ControlsSection { -
- @{ - Html.BeginForm("groupshapes", "excel", FormMethod.Post); - { -
-

- Click the "Input Template" button to view the input Excel document and click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
-
- - -   - - -   - - -
-
-
-
-
- - -
-
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription { - This sample demonstrates how to use group shapes in spreadsheets using XlsIO. -} - -@section Meta { - -} - -@section Description { -
- Essential XlsIO allows to group multiple shapes and ungroup the shapes in worksheet. The IGroupShape interface is the in-memory representation of the - group shapes in an Excel workbook. -
-
- Features: -
-
- This sample demonstrates following features: -
-
-
    -
  • Grouping multiple shapes into a single group shape.
  • -
  • Ungroup the group shape and all its inner shapes.
  • -
-
-
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Group Shapes Example - Syncfusion Demos -} -@section Header { -

Example of Group Shapes in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/GroupShapes.cshtml.cs b/Pages/Excel/GroupShapes.cshtml.cs deleted file mode 100644 index 791de09f..00000000 --- a/Pages/Excel/GroupShapes.cshtml.cs +++ /dev/null @@ -1,150 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class GroupShapes : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public GroupShapes(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button, string Group1) - { - string basePath = _hostingEnvironment.WebRootPath; - - if (button == null) - return null; - - else if (button == "Input Document") - { - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - application.DefaultVersion = ExcelVersion.Excel2016; - - FileStream inputStream = new FileStream(basePath + @"/XlsIO/GroupShapes.xlsx", FileMode.Open, FileAccess.Read); - - // Opening the Existing Worksheet from a Workbook. - IWorkbook workbook = application.Workbooks.Open(inputStream); - - try - { - workbook.Version = ExcelVersion.Excel2013; - string ContentType = "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - string fileName = "GroupShapes.xlsx"; - - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, ContentType, fileName); - } - catch (Exception) - { - } - - // Close the workbook - workbook.Close(); - excelEngine.Dispose(); - } - else - { - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - application.DefaultVersion = ExcelVersion.Excel2016; - - FileStream inputStream = new FileStream(basePath + @"/XlsIO/GroupShapes.xlsx", FileMode.Open, FileAccess.Read); - // Opening the encrypted Workbook. - IWorkbook workbook = application.Workbooks.Open(inputStream, ExcelParseOptions.Default, true, "PASSWORD"); - - IWorksheet worksheet; - - if (Group1 == "Group") - { - // The first worksheet object in the worksheets collection is accessed. - worksheet = workbook.Worksheets[0]; - IShapes shapes = worksheet.Shapes; - - IShape[] groupItems; - for (int i = 0; i < shapes.Count; i++) - { - if (shapes[i].Name == "Development" || shapes[i].Name == "Production" || shapes[i].Name == "Sales") - { - groupItems = new IShape[] { shapes[i], shapes[i + 1], shapes[i + 2], shapes[i + 3], shapes[i + 4], shapes[i + 5] }; - shapes.Group(groupItems); - i = -1; - } - } - - groupItems = new IShape[] { shapes[0], shapes[1], shapes[2], shapes[3], shapes[4], shapes[5], shapes[6] }; - - // Group the selected shapes - shapes.Group(groupItems); - } - else if (Group1 == "UngroupAll") - { - // The second worksheet object in the worksheets collection is accessed. - worksheet = workbook.Worksheets[1]; - IShapes shapes = worksheet.Shapes; - - // Ungroup group shape and its all the inner shapes. - shapes.Ungroup(shapes[0] as IGroupShape, true); - worksheet.Activate(); - } - else if (Group1 == "Ungroup") - { - // The second worksheet object in the worksheets collection is accessed. - worksheet = workbook.Worksheets[1]; - IShapes shapes = worksheet.Shapes; - - // Ungroup group shape. - shapes.Ungroup(shapes[0] as IGroupShape); - worksheet.Activate(); - } - - try - { - workbook.Version = ExcelVersion.Excel2013; - string ContentType = "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - string fileName = "GroupShapes.xlsx"; - - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, ContentType, fileName); - } - catch - { - - } - - // Close the workbook - workbook.Close(); - excelEngine.Dispose(); - } - return null; - } - } -} diff --git a/Pages/Excel/HTMLToWorksheet.cshtml b/Pages/Excel/HTMLToWorksheet.cshtml deleted file mode 100644 index ff9ee1c2..00000000 --- a/Pages/Excel/HTMLToWorksheet.cshtml +++ /dev/null @@ -1,56 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.HTMLToWorksheet -@section ControlsSection { -
- @{ - Html.BeginForm("htmltoworksheet", "excel", FormMethod.Post); - { -

- Click the "Input Template" button to view the input HTML document. -

-

- Click the "Import" button to view the output Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
- Import with formula -
-
- - -
- Html.EndForm(); - } - } -
-} - -@section ActionDescription { - This sample demonstrates how to convert HTML table to worksheet using Essential XlsIO. -} - -@section Meta { - -} -@section Description { -
-

- Essential XlsIO supports importing HTML tables into Excel worksheets. The ImportHtmlTable method loads an HTML file and imports all the tables in the file to the worksheet. -

-
-
- Features: -
-
    -
  • Imports HTML table
  • -
  • Imports with table formatting
  • -
-
-
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Import HTML Table Example - Syncfusion Demos -} -@section Header { -

Example of Import HTML Table in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/HTMLToWorksheet.cshtml.cs b/Pages/Excel/HTMLToWorksheet.cshtml.cs deleted file mode 100644 index 12ab36f0..00000000 --- a/Pages/Excel/HTMLToWorksheet.cshtml.cs +++ /dev/null @@ -1,88 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class HTMLToWorksheet : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public HTMLToWorksheet(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button, string chkbox) - { - string basePath = _hostingEnvironment.WebRootPath; - - if (button == null) - return null; - else if (button == "Input Template") - { - if (chkbox == null) - { - Stream ms = new FileStream(basePath + @"/XlsIO/HTMLToExcel.html", FileMode.Open, FileAccess.Read); - return File(ms, "text/html", "Import-HTML-Table.html"); - } - else - { - Stream ms = new FileStream(basePath + @"/XlsIO/HTMLwithFormulaToExcel.html", FileMode.Open, FileAccess.Read); - return File(ms, "text/html", "Import-HTML-Table-formula.html"); - } - } - else - { - string filename = ""; - // The instantiation process consists of two steps. - // Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - - // Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - application.DefaultVersion = ExcelVersion.Excel2016; - - // A workbook is created. - IWorkbook workbook = application.Workbooks.Create(1); - - // The first worksheet object in the worksheets collection is accessed. - IWorksheet worksheet = workbook.Worksheets[0]; - - if (chkbox == null) - { - Stream file = new FileStream(basePath + @"/XlsIO/HTMLToExcel.html", FileMode.Open, FileAccess.Read); - - worksheet.ImportHtmlTable(file, 1, 1); - filename = "Import-HTML-Table.xlsx"; - } - else - { - Stream file = new FileStream(basePath + @"/XlsIO/HTMLwithFormulaToExcel.html", FileMode.Open, FileAccess.Read); - - worksheet.ImportHtmlTable(file, 1, 1, HtmlImportOptions.DetectFormulas); - worksheet.Range["E2:F25"].NumberFormat = "_($* #,##0.00_);_($* (#,##0.00)"; - worksheet.Range["H2:I25"].NumberFormat = "_($* #,##0.00_);_($* (#,##0.00)"; - filename = "Import-HTML-Table-formula.xlsx"; - - } - - worksheet.UsedRange.AutofitColumns(); - worksheet.UsedRange.AutofitRows(); - - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - excelEngine.Dispose(); - - return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename); - } - } - } -} diff --git a/Pages/Excel/ImportNestedCollection.cshtml b/Pages/Excel/ImportNestedCollection.cshtml deleted file mode 100644 index c6ed97f0..00000000 --- a/Pages/Excel/ImportNestedCollection.cshtml +++ /dev/null @@ -1,168 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.ImportNestedCollection -@section ActionDescription { - This sample demonstrates how to use Nested Collection in spreadsheets using XlsIO. -} -@section Meta { - -} -@section Description { - Essential XlsIO allows you to import data directly from nested collection objects with import data layout and group options. -
-
This sample demonstrates the usage of Nested Collection objects using Essential XlsIO. -} -@section ControlsSection { -
- @{ - Html.BeginForm("importnestedcollection", "excel", FormMethod.Post); - { -
-

- Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
- @*
-
-   - -
-
-
*@ -
-
- - - - - -
- - - -
-
-
-
-
-
- - - - - -
- - -
-
-
-
-
-
- - - - - -
- -
- - -
- - -    - -
-
-
-
-
- - - - - -
- -
-
- - - - - - Html.EndForm(); - } - } -
-} -@section Scripts { - - -} -@section Title { - ASP.NET Core Excel (XlsIO) library - Import Nested Collection Example - Syncfusion Demos -} -@section Header { -

Example of Import Nested Collection in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/ImportNestedCollection.cshtml.cs b/Pages/Excel/ImportNestedCollection.cshtml.cs deleted file mode 100644 index 0e6576c3..00000000 --- a/Pages/Excel/ImportNestedCollection.cshtml.cs +++ /dev/null @@ -1,258 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; -using System.ComponentModel; -using System.Xml.Serialization; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class ImportNestedCollection : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public ImportNestedCollection(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string LayoutOptions, string button, string checkbox, string rdb1, string textBox) - { - - if (button == null) - return null; - - ExcelEngine excelEngine = new ExcelEngine(); - IApplication application = excelEngine.Excel; - application.DefaultVersion = ExcelVersion.Excel2016; - - //Open an existing spreadsheet which will be used as a template for generating the new spreadsheet. - //After opening, the workbook object represents the complete in-memory object model of the template spreadsheet. - IWorkbook workbook = excelEngine.Excel.Workbooks.Create(1); - //The first worksheet object in the worksheets collection is accessed. - IWorksheet worksheet = workbook.Worksheets[0]; - - IList list = GetVehicleDetails(); - - ExcelImportDataOptions importDataOptions = new ExcelImportDataOptions(); - importDataOptions.FirstRow = 4; - - if (LayoutOptions == "Default") - importDataOptions.NestedDataLayoutOptions = ExcelNestedDataLayoutOptions.Default; - else if (LayoutOptions == "Merge") - importDataOptions.NestedDataLayoutOptions = ExcelNestedDataLayoutOptions.Merge; - else if (LayoutOptions == "Repeat") - importDataOptions.NestedDataLayoutOptions = ExcelNestedDataLayoutOptions.Repeat; - - if (checkbox == "Group") - { - if (rdb1 == "Expand") - { - importDataOptions.NestedDataGroupOptions = ExcelNestedDataGroupOptions.Expand; - } - else if (rdb1 == "Collapse") - { - importDataOptions.NestedDataGroupOptions = ExcelNestedDataGroupOptions.Collapse; - if (textBox != string.Empty) - { - importDataOptions.CollapseLevel = int.Parse(textBox); - } - } - } - - worksheet.ImportData(list, importDataOptions); - - #region Define Styles - IStyle pageHeader = workbook.Styles.Add("PageHeaderStyle"); - IStyle tableHeader = workbook.Styles.Add("TableHeaderStyle"); - - pageHeader.Font.FontName = "Calibri"; - pageHeader.Font.Size = 16; - pageHeader.Font.Bold = true; - pageHeader.Color = Color.FromArgb(0, 146, 208, 80); - pageHeader.HorizontalAlignment = ExcelHAlign.HAlignCenter; - pageHeader.VerticalAlignment = ExcelVAlign.VAlignCenter; - - tableHeader.Font.Bold = true; - tableHeader.Font.FontName = "Calibri"; - tableHeader.Color = Color.FromArgb(0, 146, 208, 80); - - #endregion - - #region Apply Styles - // Apply style for header - worksheet["A1:C2"].Merge(); - worksheet["A1"].Text = "Automobile Brands in the US"; - worksheet["A1"].CellStyle = pageHeader; - - worksheet["A4:C4"].CellStyle = tableHeader; - - worksheet["A1:C1"].CellStyle.Font.Bold = true; - worksheet.UsedRange.AutofitColumns(); - - #endregion - - try - { - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "ImportData.xlsx"); - } - catch (Exception) - { - } - - workbook.Close(); - excelEngine.Dispose(); - - return null; - } - - #region Helper Methods - private IList GetVehicleDetails() - { - XmlSerializer deserializer = new XmlSerializer(typeof(BrandObjects)); - string basePath = _hostingEnvironment.WebRootPath; - FileStream inputStream = new FileStream(basePath + @"/XlsIO/ExportData.xml", FileMode.Open, FileAccess.Read); - TextReader textReader = new StreamReader(inputStream); - BrandObjects brands = (BrandObjects)deserializer.Deserialize(textReader); - - List list = new List(); - string brandName = brands.BrandObject[0].BrandName; - string vehicleType = brands.BrandObject[0].VahicleType; - string modelName = brands.BrandObject[0].ModelName; - Brands brand = new Brands(brandName); - brand.VehicleTypes = new List(); - - VehicleTypes vehicle = new VehicleTypes(vehicleType); - vehicle.Models = new List(); - Model model = new Model(modelName); - - brand.VehicleTypes.Add(vehicle); - list.Add(brand); - - foreach (BrandObject brandObj in brands.BrandObject) - { - if (brandName == brandObj.BrandName) - { - if (vehicleType == brandObj.VahicleType) - { - vehicle.Models.Add(new Model(brandObj.ModelName)); - continue; - } - else - { - vehicle = new VehicleTypes(brandObj.VahicleType); - vehicle.Models = new List(); - vehicle.Models.Add(new Model(brandObj.ModelName)); - brand.VehicleTypes.Add(vehicle); - vehicleType = brandObj.VahicleType; - } - continue; - } - else - { - brand = new Brands(brandObj.BrandName); - vehicle = new VehicleTypes(brandObj.VahicleType); - vehicle.Models = new List(); - vehicle.Models.Add(new Model(brandObj.ModelName)); - brand.VehicleTypes = new List(); - brand.VehicleTypes.Add(vehicle); - vehicleType = brandObj.VahicleType; - list.Add(brand); - brandName = brandObj.BrandName; - } - } - textReader.Close(); - return list; - } - #endregion - } - - #region Helper Class - [XmlRootAttribute("BrandObjects")] - public class BrandObjects - { - [XmlElement("BrandObject")] - public BrandObject[] BrandObject { get; set; } - } - public class BrandObject - { - public string BrandName { get; set; } - public string VahicleType { get; set; } - public string ModelName { get; set; } - } - //[Serializable] - public class Brands - { - private string m_brandName; - [DisplayNameAttribute("Brand")] - public string BrandName - { - get { return m_brandName; } - set { m_brandName = value; } - } - - private IList m_vehicles; - public IList VehicleTypes - { - get { return m_vehicles; } - set { m_vehicles = value; } - } - - public Brands(string brandName) - { - m_brandName = brandName; - } - } - - public class VehicleTypes - { - private string m_vehicle; - [DisplayNameAttribute("Vehicle Type")] - public string Vehicle - { - get { return m_vehicle; } - set { m_vehicle = value; } - } - - private IList m_models; - public IList Models - { - get { return m_models; } - set { m_models = value; } - } - - public VehicleTypes(string vehicle) - { - m_vehicle = vehicle; - } - } - public class Model - { - private string m_modelName; - [DisplayNameAttribute("Model")] - public string ModelName - { - get { return m_modelName; } - set { m_modelName = value; } - } - - public Model(string name) - { - m_modelName = name; - } - public Model() - { - - } - } - #endregion -} - diff --git a/Pages/Excel/PivotLayout.cshtml b/Pages/Excel/PivotLayout.cshtml deleted file mode 100644 index fd1bdc7f..00000000 --- a/Pages/Excel/PivotLayout.cshtml +++ /dev/null @@ -1,74 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.PivotLayout -@section ActionDescription { - This sample demonstrates how to layout pivot table using XlsIO. -} - -@section Meta { - -} - -@section Description { - When there is a need to summarize large reports, Excel allows you to summarize data through pivot table insertion. Microsoft Excel supplies various built-in styles for pivot tables, allowing the creation of pivot tables with rich formats and more flexibility in summarizing reports. -
-
- Features: -
-
-
    -
  • Create and layout pivot table from template data
  • -
  • Format pivot table cells with cell styles
  • -
  • Convert pivot table to PDF
  • -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("pivotlayout", "excel", FormMethod.Post); - { -
-
-

- Choose the pivot table layout and file format type, then click the "Create Document" button to view the document in Excel or PDF. A PDF viewer is required to view the PDF document, and an Excel viewer is required to view the Excel document. -

-
-
-
-
-
- Layout options - -
-
-
-
-
- File type - - -   - - -
-
-
-
- -
-
-
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Pivot Table Layout Example - Syncfusion Demos -} -@section Header { -

Example of Pivot Table Layout in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/PivotLayout.cshtml.cs b/Pages/Excel/PivotLayout.cshtml.cs deleted file mode 100644 index 4814cef8..00000000 --- a/Pages/Excel/PivotLayout.cshtml.cs +++ /dev/null @@ -1,194 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Pdf; -using Syncfusion.XlsIO.Implementation.PivotTables; -using Syncfusion.XlsIO; -using Syncfusion.Drawing; -using Syncfusion.XlsIORenderer; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class PivotLayout : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public PivotLayout(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button, string layoutOption, string fileType) - { - if (button == null) - return null; - - string basePath = _hostingEnvironment.WebRootPath; - - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - IWorkbook workbook = null; - application.DefaultVersion = ExcelVersion.Excel2016; - - if (fileType == "pdf") - { - FileStream inputStream = new FileStream(basePath + @"/XlsIO/PivotLayout.xlsx", FileMode.Open, FileAccess.Read); - workbook = application.Workbooks.Open(inputStream); - - CreatePivotTable(workbook, layoutOption); - - //Intialize the XlsIORenderer Class - XlsIORenderer renderer = new XlsIORenderer(); - //Intialize the PdfDocument Class - PdfDocument pdfDoc = new PdfDocument(); - - //Intialize the ExcelToPdfConverterSettings class - XlsIORendererSettings settings = new XlsIORendererSettings(); - settings.LayoutOptions = LayoutOptions.FitSheetOnOnePage; - - pdfDoc = renderer.ConvertToPDF(workbook, settings); - inputStream.Dispose(); - - MemoryStream stream = new MemoryStream(); - pdfDoc.Save(stream); - - try - { - stream.Position = 0; - return File(stream, "application/pdf", "PivotLayout.pdf"); - } - catch (Exception) - { - } - - } - else - { - FileStream inputStream = new FileStream(basePath + @"/XlsIO/PivotLayout.xlsx", FileMode.Open, FileAccess.Read); - workbook = application.Workbooks.Open(inputStream); - - CreatePivotTable(workbook, layoutOption); - - IPivotTable pivotTable = workbook.Worksheets[1].PivotTables[0]; - pivotTable.Layout(); - - //To view the pivot table inline formatting in MS Excel, we have to set the IsRefreshOnLoad property as true. - (workbook.PivotCaches[pivotTable.CacheIndex] as PivotCacheImpl).IsRefreshOnLoad = true; - - try - { - workbook.Version = ExcelVersion.Excel2016; - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "PivotLayout.xlsx"); - } - catch (Exception) - { - } - } - //Close the workbook. - workbook.Close(); - excelEngine.Dispose(); - return null; - } - - private static void CreatePivotTable(IWorkbook workbook, string layoutOption) - { - // The first worksheet object in the worksheets collection is accessed. - IWorksheet sheet = workbook.Worksheets[0]; - //Access the sheet to draw pivot table. - IWorksheet pivotSheet = workbook.Worksheets[1]; - pivotSheet.Activate(); - //Select the data to add in cache - IPivotCache cache = workbook.PivotCaches.Add(sheet["A1:G20"]); - //Insert the pivot table. - IPivotTable pivotTable = pivotSheet.PivotTables.Add("PivotTable1", pivotSheet["A1"], cache); - pivotTable.Fields[0].Axis = PivotAxisTypes.Row; - pivotTable.Fields[1].Axis = PivotAxisTypes.Row; - pivotTable.Fields[2].Axis = PivotAxisTypes.Row; - IPivotField field1 = pivotSheet.PivotTables[0].Fields[5]; - pivotTable.DataFields.Add(field1, "Sum of Land Area", PivotSubtotalTypes.Sum); - IPivotField field2 = pivotSheet.PivotTables[0].Fields[6]; - pivotTable.DataFields.Add(field2, "Sum of Water Area", PivotSubtotalTypes.Sum); - - if (layoutOption == "Outline") - { - pivotTable.Options.RowLayout = PivotTableRowLayout.Outline; - - pivotTable.Location = pivotSheet.Range[1, 1, 51, 5]; - - //Apply Inline formatting to pivot table - IPivotCellFormat cellFormat1 = pivotTable.GetCellFormat("B3:E4"); - cellFormat1.BackColorRGB = Color.FromArgb(255, 169, 208, 142); - IPivotCellFormat cellFormat2 = pivotTable.GetCellFormat("B31:E32"); - cellFormat2.BackColorRGB = Color.FromArgb(255, 244, 176, 132); - } - else if (layoutOption == "Tabular") - { - pivotTable.Location = pivotSheet.Range[1, 1, 51, 5]; - - pivotTable.Options.RowLayout = PivotTableRowLayout.Tabular; - - //Apply Inline formatting to pivot table - IPivotCellFormat cellFormat1 = pivotTable.GetCellFormat("B2:E2"); - cellFormat1.BackColorRGB = Color.FromArgb(255, 169, 208, 142); - IPivotCellFormat cellFormat2 = pivotTable.GetCellFormat("B30:E30"); - cellFormat2.BackColorRGB = Color.FromArgb(255, 244, 176, 132); - } - else - { - pivotTable.Location = pivotSheet.Range[1, 1, 51, 3]; - - //Apply Inline formatting to pivot table - IPivotCellFormat cellFormat1 = pivotTable.GetCellFormat("A3:C4"); - cellFormat1.BackColorRGB = Color.FromArgb(255, 169, 208, 142); - IPivotCellFormat cellFormat2 = pivotTable.GetCellFormat("A31:C32"); - cellFormat2.BackColorRGB = Color.FromArgb(255, 244, 176, 132); - } - - //Apply the show values row option in pivot table. - pivotTable.Options.ShowValuesRow = true; - - //Apply built in style. - pivotTable.BuiltInStyle = PivotBuiltInStyles.PivotStyleMedium9; - pivotSheet.Range[1, 1, 1, 14].ColumnWidth = 11; - pivotSheet.SetColumnWidth(1, 15.29); - pivotSheet.SetColumnWidth(2, 15.29); - - if (pivotTable.Options.RowLayout == PivotTableRowLayout.Compact) - { - pivotSheet.SetColumnWidth(4, 1.0); - pivotSheet.SetColumnWidth(5, 2.0); - pivotSheet.SetColumnWidth(6, 0.5); - pivotSheet.Range[2, 5, 2, 5].CellStyle.Color = Color.FromArgb(255, 169, 208, 142); - pivotSheet.Range[4, 5, 4, 5].CellStyle.Color = Color.FromArgb(255, 244, 176, 132); - pivotSheet.Range[2, 7, 2, 7].Text = "County with largest land area"; - pivotSheet.Range[4, 7, 4, 7].Text = "County with smallest land area"; - } - else - { - pivotSheet.SetColumnWidth(6, 1.0); - pivotSheet.SetColumnWidth(7, 2.0); - pivotSheet.SetColumnWidth(8, 0.5); - pivotSheet.Range[2, 7, 2, 7].CellStyle.Color = Color.FromArgb(255, 169, 208, 142); - pivotSheet.Range[4, 7, 4, 7].CellStyle.Color = Color.FromArgb(255, 244, 176, 132); - pivotSheet.Range[2, 9, 2, 9].Text = "County with largest land area"; - pivotSheet.Range[4, 9, 4, 9].Text = "County with smallest land area"; - } - - //Activate the pivot sheet. - pivotSheet.Activate(); - } - } -} diff --git a/Pages/Excel/PivotTable.cshtml b/Pages/Excel/PivotTable.cshtml deleted file mode 100644 index 39fceafe..00000000 --- a/Pages/Excel/PivotTable.cshtml +++ /dev/null @@ -1,96 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.PivotTable -@section ActionDescription { - This sample demonstrates how to use PivotTable in spreadsheets using XlsIO. -} -@section Meta { - -} -@section Description { - When there is a need to summarize large reports, Excel allows you to summarize data through pivot table insertion. Microsoft Excel supplies various built-in styles for pivot tables, allowing the creation of pivot tables with rich formats and more flexibility in summarizing reports. -
-
- Features: -
-
-
    -
  • Creating pivot tables from template data
  • -
  • Customizing pivot tables with various properties
  • -
  • Formatting pivot tables with built-in styles
  • -
-
-} -@section ControlsSection { -
- @{ - Html.BeginForm("pivottable", "excel", FormMethod.Post); - { -
-

- Click the "Create Document" button to view the created Excel document and click the "Customize Pivot Table" button to view the Excel document created with customized pivot table. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
-
-
- - - - - -         -
-
-
- - - - - -         -
-
-
- - -         -
-
- - -
-
- - Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Pivot Table Example - Syncfusion Demos -} -@section Header { -

Example of Pivot Table in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/PivotTable.cshtml.cs b/Pages/Excel/PivotTable.cshtml.cs deleted file mode 100644 index 3ccf378b..00000000 --- a/Pages/Excel/PivotTable.cshtml.cs +++ /dev/null @@ -1,244 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Syncfusion.XlsIO; -using Microsoft.AspNetCore.Mvc.RazorPages; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class PivotTable : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public PivotTable(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button, string Filter, string RowFilter, string ColumnFilter, string ApplyGrouping, string MultiplePageFilter, string PageFilter) - { - if (button == null) - return null; - - string basePath = _hostingEnvironment.WebRootPath; - - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - IWorkbook workbook = null; - application.DefaultVersion = ExcelVersion.Excel2016; - - if (button == "Customize Pivot Table") - { - FileStream inputStream = new FileStream(basePath + @"/XlsIO/PivotTable.xlsx", FileMode.Open, FileAccess.Read); - workbook = application.Workbooks.Open(inputStream); - - // The first worksheet object in the worksheets collection is accessed. - IWorksheet sheet = workbook.Worksheets[1]; - sheet.Activate(); - //Access the collection of Pivot Table in the worksheet. - IPivotTables pivotTables = sheet.PivotTables; - - //Access the Single pivot table from the collection. - IPivotTable pivotTable = pivotTables[0]; - - //Access collection of pivot fields from the pivot table. - IPivotFields fields = pivotTable.Fields; - - //Access a Pivot field from the collection. - IPivotField field = fields[2]; - //Add the field to page axis - field.Axis = PivotAxisTypes.Page; - fields[1].Axis = PivotAxisTypes.None; - fields[3].Axis = PivotAxisTypes.Row; - fields[4].Axis = PivotAxisTypes.Column; - IPivotField dataField = fields[5]; - - //Apply grouping to the years, quarters and months fields - if (ApplyGrouping == "ApplyGrouping") - { - IPivotFieldGroup group = pivotTable.Fields[0].FieldGroup; - group.GroupBy = PivotFieldGroupType.Years | PivotFieldGroupType.Quarters | PivotFieldGroupType.Months; - } - //Accessing the Calculated fields from the pivot table . - IPivotCalculatedFields calculatedfields = pivotTable.CalculatedFields; - - if (RowFilter == "RowFilter") - { - if (Filter == "LabelFilter") - { - pivotTable.Fields[3].PivotFilters.Add(PivotFilterType.CaptionNotEqual, null, "Parent", null); - } - else if (Filter == "ValueFilter") - { - pivotTable.Fields[3].PivotFilters.Add(PivotFilterType.ValueGreaterThan, dataField, "100", null); - } - else - { - pivotTable.Fields[3].Items[0].Visible = false; - } - - } - if (ColumnFilter == "ColumnFilter") - { - if (Filter == "LabelFilter") - { - pivotTable.Fields[4].PivotFilters.Add(PivotFilterType.CaptionNotEqual, null, "Binder", null); - } - else if (Filter == "ValueFilter") - { - pivotTable.Fields[4].PivotFilters.Add(PivotFilterType.ValueGreaterThan, dataField, "100", null); - } - else - { - pivotTable.Fields[4].Items[0].Visible = false; - } - - } - //Adding Calculatd field to the pivot table. - // IPivotField calculatedField = calculatedfields.Add("Percent", "Units/3000*100"); - if (PageFilter == "PageFilter") - { - //Create Pivot Filter object to apply filter to page Fields - IPivotFilter filterValue = pivotTable.Fields[2].PivotFilters.Add(); - //Page Field would be filtered with value 'Binder' - filterValue.Value1 = "East"; - } - else if (MultiplePageFilter == "MultiplePageFilter") - { - pivotTable.Fields[2].Items[0].Visible = false; - } - sheet.Range[1, 1, 1, 14].ColumnWidth = 11; - sheet.SetColumnWidth(1, 15.29); - sheet.SetColumnWidth(2, 15.29); - try - { - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "PivotTable.xlsx"); - - } - catch (Exception) - { - } - - } - else - { - FileStream inputStream = new FileStream(basePath + @"/XlsIO/PivotCodeDate.xlsx", FileMode.Open, FileAccess.Read); - workbook = application.Workbooks.Open(inputStream); - - // The first worksheet object in the worksheets collection is accessed. - IWorksheet sheet = workbook.Worksheets[0]; - - //Access the sheet to draw pivot table. - IWorksheet pivotSheet = workbook.Worksheets[1]; - pivotSheet.Activate(); - //Select the data to add in cache - IPivotCache cache = workbook.PivotCaches.Add(sheet["A1:H50"]); - - //Insert the pivot table. - IPivotTable pivotTable = pivotSheet.PivotTables.Add("PivotTable1", pivotSheet["A1"], cache); - if (ApplyGrouping == "ApplyGrouping") - pivotTable.Fields[0].Axis = PivotAxisTypes.Row; - pivotTable.Fields[4].Axis = PivotAxisTypes.Page; - - pivotTable.Fields[2].Axis = PivotAxisTypes.Row; - pivotTable.Fields[6].Axis = PivotAxisTypes.Row; - pivotTable.Fields[3].Axis = PivotAxisTypes.Column; - - IPivotField field = pivotSheet.PivotTables[0].Fields[5]; - pivotTable.DataFields.Add(field, "Sum of Units", PivotSubtotalTypes.Sum); - - //Apply grouping to the years, quarters and months fields - if (ApplyGrouping == "ApplyGrouping") - { - IPivotFieldGroup group = pivotTable.Fields[0].FieldGroup; - group.GroupBy = PivotFieldGroupType.Years | PivotFieldGroupType.Quarters | PivotFieldGroupType.Months; - } - #region Apply RowField Filter - if (RowFilter == "RowFilter") - { - if (Filter == "LabelFilter") - { - pivotTable.Fields[2].PivotFilters.Add(PivotFilterType.CaptionEqual, null, "East", null); - } - else if (Filter == "ValueFilter") - { - pivotTable.Fields[2].PivotFilters.Add(PivotFilterType.ValueEqual, field, "1341", null); - } - else - { - pivotTable.Fields[2].Items[0].Visible = false; - pivotTable.Fields[2].Items[1].Visible = false; - } - } - #endregion - - #region Column Field Filter - if (ColumnFilter == "ColumnFilter") - { - if (Filter == "LabelFilter") - { - pivotTable.Fields[3].PivotFilters.Add(PivotFilterType.CaptionNotEqual, null, "Jones", null); - } - else if (Filter == "ValueFilter") - { - pivotTable.Fields[3].PivotFilters.Add(PivotFilterType.ValueEqual, field, "398", null); - } - else - { - pivotTable.Fields[3].Items[0].Visible = false; - pivotTable.Fields[3].Items[1].Visible = false; - } - } - #endregion - if (PageFilter == "PageFilter") - { - //'Create Pivot Filter object to apply filter to page Fields - IPivotFilter filterValue = pivotTable.Fields[4].PivotFilters.Add(); - //Page Field would be filtered with value 'Binder' - filterValue.Value1 = "Binder"; - } - else - { - pivotTable.Fields[4].Items[1].Visible = false; - pivotTable.Fields[4].Items[2].Visible = false; - } - //Apply built in style. - pivotTable.BuiltInStyle = PivotBuiltInStyles.PivotStyleMedium2; - pivotSheet.Range[1, 1, 1, 14].ColumnWidth = 11; - pivotSheet.SetColumnWidth(1, 15.29); - pivotSheet.SetColumnWidth(2, 15.29); - //Activate the pivot sheet. - pivotSheet.Activate(); - - try - { - workbook.Version = ExcelVersion.Excel2016; - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "PivotTable.xlsx"); - } - catch (Exception) - { - } - } - //Close the workbook. - workbook.Close(); - excelEngine.Dispose(); - return null; - } - } -} diff --git a/Pages/Excel/ReadExcel.cshtml b/Pages/Excel/ReadExcel.cshtml deleted file mode 100644 index 7c33416a..00000000 --- a/Pages/Excel/ReadExcel.cshtml +++ /dev/null @@ -1,71 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.ReadExcel -@section ActionDescription { - This sample demonstrates how to read Excel documents using XlsIO. -} - -@section Meta { - -} - -@section Description { -
Essential XlsIO allows to read Excel documents efficiently with high performance. -
-
-

- The below table shows the details of Excel (XlsIO) performance for reading Excel document and creating a data table with that data. -

- - - - - - - - - -
- Number of rows and columns - - Time taken in ms -
- 30,000 rows and 50 columns - - 9130 ms -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("readexcel", "excel", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
-

- Click the "Input Template" button to view the input Excel document. -

-

- Click the "Read Document" button to read the cell values from the Excel document. -

-
-
- -
- - -
-
-
- -
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Read Excel Example - Syncfusion Demos -} -@section Header { -

Example of Read Excel in ASP.NET Core Excel (XlsIO) Library

-} - diff --git a/Pages/Excel/ReadExcel.cshtml.cs b/Pages/Excel/ReadExcel.cshtml.cs deleted file mode 100644 index 5b5973fd..00000000 --- a/Pages/Excel/ReadExcel.cshtml.cs +++ /dev/null @@ -1,88 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; -using System.Data; -using System.Diagnostics; - - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class ReadExcel : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - private DataTable dataTable; - public string TimeTaken=""; - public ReadExcel(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public IActionResult OnPost(string button) - { - if (button == null) - return null; - - string basePath = _hostingEnvironment.WebRootPath; - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - Stopwatch stopwatch = Stopwatch.StartNew(); - stopwatch.Start(); - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - //Get file stream. - Stream fileStream = new FileStream(basePath + @"/XlsIO/ReadTemplate.xlsx", FileMode.Open, FileAccess.Read); - fileStream.Position = 0; - - //Open the Workbook using the file stream. - IWorkbook sourceWorkbook = application.Workbooks.Open(fileStream); - if (button == "Input Template") - { - MemoryStream ms = new MemoryStream(); - sourceWorkbook.Version = ExcelVersion.Xlsx; - string contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - string fileName = "InputTemplate.xlsx"; - sourceWorkbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, contentType, fileName); - } - else - { - IWorksheet worksheet = sourceWorkbook.Worksheets[0]; - IRange usedRange = worksheet.UsedRange; - int firstRow = usedRange.Row; - int lastRow = usedRange.LastRow; - int firstColumn = usedRange.Column; - int lastColumn = usedRange.LastColumn; - IMigrantRange migrantRange = worksheet.MigrantRange; - dataTable = new System.Data.DataTable(); - for (int column = firstColumn; column <= lastColumn; column++) - { - dataTable.Columns.Add(worksheet[1, column].Value); - } - for (int row = firstRow + 1; row <= lastRow; row++) - { - dataTable.Rows.Add(); - for (int column = firstColumn; column <= lastColumn; column++) - { - migrantRange.ResetRowColumn(row, column); - dataTable.Rows[row - 2][column - 1] = migrantRange.Value; - } - } - stopwatch.Stop(); - TimeTaken = "Time Taken: " + stopwatch.ElapsedMilliseconds.ToString() + " ms"; - return null; - } - } - } -} diff --git a/Pages/Excel/Slicer.cshtml b/Pages/Excel/Slicer.cshtml deleted file mode 100644 index 15e9334b..00000000 --- a/Pages/Excel/Slicer.cshtml +++ /dev/null @@ -1,109 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.Slicer -@section ActionDescription { - The sample shows how to create and use slicers in table -} -@section Meta { - -} -@section Description { - Slicers are UI filters that help to display only specific data based on the selection criteria. It provides easy and simple UI options to enable/disable the filters in a table. -
-
Features: -
-
    -
  • Create slicers and filter table data.
  • -
  • Format slicers with built-in styles.
  • -
-} -@section ControlsSection -{ -
- @{ - Html.BeginForm("slicer", "excel", FormMethod.Post); - { -
-

- Click the "Input Template" button to view the input Excel document and click the "Create Document" button to view the output Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
- - - - - - - - - - - - - - -
- Choose the column to create a slicer -
- - - - - -
-
- Select Column           -
- -
-
- - - - - -
-
- Select Column           -
- -
- -
-
-
- - - - - - -
- - -               - - -
-
-
- Html.EndForm(); - Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Slicer Example - Syncfusion Demos -} -@section Header { -

Example of Slicer in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/Slicer.cshtml.cs b/Pages/Excel/Slicer.cshtml.cs deleted file mode 100644 index 83bfc282..00000000 --- a/Pages/Excel/Slicer.cshtml.cs +++ /dev/null @@ -1,97 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using System; -using Syncfusion.XlsIO; -using Syncfusion.Drawing; - - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class Slicer : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - - public Slicer(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string view, string Columns1, string Columns2) - { - string basePath = _hostingEnvironment.WebRootPath; - - if (Columns1 == null) - return null; - - if (view == "Input Template") - { - ExcelEngine excelEngine = new ExcelEngine(); - FileStream inputStream = new FileStream(basePath + @"/XlsIO/TableSlicer.xlsx", FileMode.Open, FileAccess.Read); - IWorkbook workbook = excelEngine.Excel.Workbooks.Open(inputStream); - - workbook.Version = ExcelVersion.Xlsx; - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - excelEngine.Dispose(); - - return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "InputTemplate.xlsx"); - - } - - else - { - string fileName = "TableSlicer.xlsx"; - - //Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - FileStream inputStream = new FileStream(basePath + @"/XlsIO/TableSlicer.xlsx", FileMode.Open, FileAccess.Read); - IWorkbook workbook = application.Workbooks.Open(inputStream); - IWorksheet sheet = workbook.Worksheets[0]; - - IListObject table = sheet.ListObjects[0]; - - //Get the column id from the given column name - int colId1 = GetColumnId(Columns1, table); - int colId2 = GetColumnId(Columns2, table); - - // Add slicer for the table - sheet.Slicers.Add(table, colId1, 11, 2); - sheet.Slicers.Add(table, colId2, 11, 4); - - MemoryStream result = new MemoryStream(); - workbook.SaveAs(result); - result.Position = 0; - - excelEngine.Dispose(); - - return File(result, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName); - - } - } - - private int GetColumnId(String columnName, IListObject table) - { - int colId = 0; - for (int i = 0; i < table.Columns.Count; i++) - { - if (table.Columns[i].Name == columnName) - { - colId = i + 1; - break; - } - } - return colId; - } - } -} diff --git a/Pages/Excel/Sparklines.cshtml b/Pages/Excel/Sparklines.cshtml deleted file mode 100644 index 29d4a651..00000000 --- a/Pages/Excel/Sparklines.cshtml +++ /dev/null @@ -1,45 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.Sparklines -@section ActionDescription { - This sample demonstrates how to create sparkline charts using XlsIO. -} - -@section Meta { - -} - -@section Description { -

- Sparkline is a small chart in a worksheet cell that provides visual representation of data. Essential XlsIO has the APIs for creating and manipulating sparklines.
-

-
Features: -
-
-
    -
  • Creation of Sparkline types
  • -
  • Sparkline creation from values fetched from a template document
  • -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("sparklines", "excel", FormMethod.Post); - { -

- Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
- -
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Sparklines Example - Syncfusion Demos -} -@section Header { -

Example of Sparklines in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/Sparklines.cshtml.cs b/Pages/Excel/Sparklines.cshtml.cs deleted file mode 100644 index 6bb0b4eb..00000000 --- a/Pages/Excel/Sparklines.cshtml.cs +++ /dev/null @@ -1,161 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class Sparklines : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public Sparklines(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button) - { - string basePath = _hostingEnvironment.WebRootPath; - - if (button == null) - return null; - - //Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - - IApplication application = excelEngine.Excel; - - application.DefaultVersion = ExcelVersion.Excel2016; - //A new workbook is created.[Equivalent to creating a new workbook in Microsoft Excel] - //Open workbook with Data - FileStream inputStream = new FileStream(basePath + @"/XlsIO/Sparkline.xlsx", FileMode.Open, FileAccess.Read); - IWorkbook workbook = application.Workbooks.Open(inputStream); - - //The first worksheet object in the worksheets collection is accessed. - IWorksheet sheet = workbook.Worksheets[0]; - - #region WholeSale Report - - //A new Sparkline group is added to the sheet sparklinegroups - ISparklineGroup sparklineGroup = sheet.SparklineGroups.Add(); - - //Set the Sparkline group type as line - sparklineGroup.SparklineType = SparklineType.Line; - - //Set to display the empty cell as line - sparklineGroup.DisplayEmptyCellsAs = SparklineEmptyCells.Line; - - //Sparkline group style properties - sparklineGroup.ShowFirstPoint = true; - sparklineGroup.FirstPointColor = Color.Green; - sparklineGroup.ShowLastPoint = true; - sparklineGroup.LastPointColor = Color.DarkOrange; - sparklineGroup.ShowHighPoint = true; - sparklineGroup.HighPointColor = Color.DarkBlue; - sparklineGroup.ShowLowPoint = true; - sparklineGroup.LowPointColor = Color.DarkViolet; - sparklineGroup.ShowMarkers = true; - sparklineGroup.MarkersColor = Color.Black; - sparklineGroup.ShowNegativePoint = true; - sparklineGroup.NegativePointColor = Color.Red; - - //set the line weight - sparklineGroup.LineWeight = 0.3; - - //The sparklines are added to the sparklinegroup. - ISparklines sparklines = sparklineGroup.Add(); - - //Set the Sparkline Datarange . - IRange dataRange = sheet.Range["D6:G17"]; - //Set the Sparkline Reference range. - IRange referenceRange = sheet.Range["H6:H17"]; - - //Create a sparkline with the datarange and reference range. - sparklines.Add(dataRange, referenceRange); - #endregion - - #region Retail Trade - - //A new Sparkline group is added to the sheet sparklinegroups - sparklineGroup = sheet.SparklineGroups.Add(); - - //Set the Sparkline group type as column - sparklineGroup.SparklineType = SparklineType.Column; - - //Set to display the empty cell as zero - sparklineGroup.DisplayEmptyCellsAs = SparklineEmptyCells.Zero; - - //Sparkline group style properties - sparklineGroup.ShowHighPoint = true; - sparklineGroup.HighPointColor = Color.Green; - sparklineGroup.ShowLowPoint = true; - sparklineGroup.LowPointColor = Color.Red; - sparklineGroup.ShowNegativePoint = true; - sparklineGroup.NegativePointColor = Color.Black; - - //The sparklines are added to the sparklinegroup. - sparklines = sparklineGroup.Add(); - - //Set the Sparkline Datarange . - dataRange = sheet.Range["D21:G32"]; - //Set the Sparkline Reference range. - referenceRange = sheet.Range["H21:H32"]; - - //Create a sparkline with the datarange and reference range. - sparklines.Add(dataRange, referenceRange); - - #endregion - - #region Manufacturing Trade - - //A new Sparkline group is added to the sheet sparklinegroups - sparklineGroup = sheet.SparklineGroups.Add(); - - //Set the Sparkline group type as win/loss - sparklineGroup.SparklineType = SparklineType.ColumnStacked100; - - sparklineGroup.DisplayEmptyCellsAs = SparklineEmptyCells.Zero; - - sparklineGroup.DisplayAxis = true; - sparklineGroup.AxisColor = Color.Black; - sparklineGroup.ShowFirstPoint = true; - sparklineGroup.FirstPointColor = Color.Green; - sparklineGroup.ShowLastPoint = true; - sparklineGroup.LastPointColor = Color.Orange; - sparklineGroup.ShowNegativePoint = true; - sparklineGroup.NegativePointColor = Color.Red; - - sparklines = sparklineGroup.Add(); - - dataRange = sheet.Range["D36:G46"]; - referenceRange = sheet.Range["H36:H46"]; - - sparklines.Add(dataRange, referenceRange); - - #endregion - - try - { - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Sparklines.xlsx"); - } - catch (Exception) - { - } - - // Close the workbook - workbook.Close(); - excelEngine.Dispose(); - return null; - } - } -} diff --git a/Pages/Excel/Tables.cshtml b/Pages/Excel/Tables.cshtml deleted file mode 100644 index 58340235..00000000 --- a/Pages/Excel/Tables.cshtml +++ /dev/null @@ -1,61 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.Tables -@section ActionDescription { - This sample deomonstrates how to use tables in spreadsheets using XlsIO. -} - -@section Meta { - -} - -@section Description { - Microsoft Office Excel 2007, Excel 2010 and Excel 2013 provides tables support that makes managing and analyzing data with ease and efficient. These tables come with specific style support. -
-
XlsIO supports reading and writing tables in Excel 2007, Excel 2010 and Excel 2013 formats. Tables can be created from any input range of sheet data and the total row can be inserted into the table. Styles can also be applied to the tables. -
-
- Features: -
-
-
    -
  • Adding tables to a spreadsheet
  • -
  • Advanced options of Excel tables such as Total Rows and Styles
  • -
  • Advanced options of Excel tables such as custom table style
  • -
-
-} -@section ControlsSection { -
- @{ - Html.BeginForm("tables", "excel", FormMethod.Post); - { -
-

- Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
-
-
- - -
-
-
-
-
- -
-
-
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Tables Example - Syncfusion Demos -} -@section Header { -

Example of Tables in ASP.NET Core Excel (XlsIO) Library

-} diff --git a/Pages/Excel/Tables.cshtml.cs b/Pages/Excel/Tables.cshtml.cs deleted file mode 100644 index f89c4a94..00000000 --- a/Pages/Excel/Tables.cshtml.cs +++ /dev/null @@ -1,159 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class Tables : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public Tables(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button, string customStyle) - { - if (button == null) - return null; - - ExcelEngine excelEngine = new ExcelEngine(); - IApplication application = excelEngine.Excel; - application.DefaultVersion = ExcelVersion.Excel2016; - - IWorkbook workbook = application.Workbooks.Create(1); - IWorksheet sheet = workbook.Worksheets[0]; - - # region Table data - // Create data - sheet[1, 1].Text = "Products"; - sheet[1, 2].Text = "Qtr1"; - sheet[1, 3].Text = "Qtr2"; - sheet[1, 4].Text = "Qtr3"; - sheet[1, 5].Text = "Qtr4"; - - sheet[2, 1].Text = "Alfreds Futterkiste"; - sheet[2, 2].Number = 744.6; - sheet[2, 3].Number = 162.56; - sheet[2, 4].Number = 5079.6; - sheet[2, 5].Number = 1249.2; - - sheet[3, 1].Text = "Antonio Moreno Taqueria"; - sheet[3, 2].Number = 5079.6; - sheet[3, 3].Number = 1249.2; - sheet[3, 4].Number = 943.89; - sheet[3, 5].Number = 349.6; - - sheet[4, 1].Text = "Around the Horn"; - sheet[4, 2].Number = 1267.5; - sheet[4, 3].Number = 1062.5; - sheet[4, 4].Number = 744.6; - sheet[4, 5].Number = 162.56; - - sheet[5, 1].Text = "Bon app"; - sheet[5, 2].Number = 1418; - sheet[5, 3].Number = 756; - sheet[5, 4].Number = 1267.5; - sheet[5, 5].Number = 1062.5; - - sheet[6, 1].Text = "Eastern Connection"; - sheet[6, 2].Number = 4728; - sheet[6, 3].Number = 4547.92; - sheet[6, 4].Number = 1418; - sheet[6, 5].Number = 756; - - sheet[7, 1].Text = "Ernst Handel"; - sheet[7, 2].Number = 943.89; - sheet[7, 3].Number = 349.6; - sheet[7, 4].Number = 4728; - sheet[7, 5].Number = 4547.92; - # endregion - - // Create style for table number format - IStyle style1 = workbook.Styles.Add("CurrencyFormat"); - style1.NumberFormat = "_($* #,##0.00_);_($* (#,##0.00);_($* \" - \"??_);_(@_)"; - - // Apply number format - sheet["B2:E8"].CellStyleName = "CurrencyFormat"; - - // Create table - IListObject table1 = sheet.ListObjects.Create("Table1", sheet["A1:E7"]); - - if (customStyle == "ApplyCustomStyle") - { - //// Apply custom table style - table1.TableStyleName = CreateCustomStyle(workbook).Name; - } - else - { - // Apply builtin style - table1.BuiltInTableStyle = TableBuiltInStyles.TableStyleMedium9; - } - - // Total row - table1.ShowTotals = true; - table1.ShowFirstColumn = true; - table1.ShowTableStyleColumnStripes = true; - table1.Columns[0].TotalsRowLabel = "Total"; - table1.Columns[1].TotalsCalculation = ExcelTotalsCalculation.Sum; - table1.Columns[2].TotalsCalculation = ExcelTotalsCalculation.Sum; - table1.Columns[3].TotalsCalculation = ExcelTotalsCalculation.Sum; - table1.Columns[4].TotalsCalculation = ExcelTotalsCalculation.Sum; - - sheet.UsedRange.AutofitColumns(); - sheet.SetColumnWidth(2, 12.43); - sheet.SetColumnWidth(4, 12.43); - - try - { - - workbook.Version = ExcelVersion.Excel2013; - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Tables.xlsx"); - } - catch (Exception) - { - } - - // Close the workbook - workbook.Close(); - excelEngine.Dispose(); - return null; - } - private ITableStyle CreateCustomStyle(IWorkbook workbook) - { - #region Custom table style - string tableStyleName = "Table Style 1"; - - ITableStyles tableStyles = workbook.TableStyles; - ITableStyle tableStyle = tableStyles.Add(tableStyleName); - ITableStyleElements tableStyleElements = tableStyle.TableStyleElements; - ITableStyleElement tableStyleElement = tableStyleElements.Add(ExcelTableStyleElementType.SecondColumnStripe); - tableStyleElement.BackColorRGB = Color.FromArgb(217, 225, 242); - - ITableStyleElement tableStyleElement1 = tableStyleElements.Add(ExcelTableStyleElementType.FirstColumn); - tableStyleElement1.FontColorRGB = Color.FromArgb(128, 128, 128); - - ITableStyleElement tableStyleElement2 = tableStyleElements.Add(ExcelTableStyleElementType.HeaderRow); - tableStyleElement2.FontColor = ExcelKnownColors.White; - tableStyleElement2.BackColorRGB = Color.FromArgb(0, 112, 192); - - ITableStyleElement tableStyleElement3 = tableStyleElements.Add(ExcelTableStyleElementType.TotalRow); - tableStyleElement3.BackColorRGB = Color.FromArgb(0, 112, 192); - tableStyleElement3.FontColor = ExcelKnownColors.White; - #endregion - - return tableStyle; - } - } -} diff --git a/Pages/Excel/TemplateMarker.cshtml b/Pages/Excel/TemplateMarker.cshtml deleted file mode 100644 index a65fba74..00000000 --- a/Pages/Excel/TemplateMarker.cshtml +++ /dev/null @@ -1,69 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.TemplateMarker -@section ActionDescription { - The sample demonstrates how to import data to a predefined Excel template using template marker in Excel (XlsIO) library. -} - -@section Meta { - -} - -@section Description { -
-

- A template marker is a special marker symbol created in an Excel template that will be bound to data. -

-
-

Essential XlsIO allows you to create and bind markers with data from various sources, such as data tables, variables, and arrays. This allows users to control the format of the data when it is bound to a template document.

-
-} -@section ControlsSection { -
- @{ - Html.BeginForm("templatemarker", "excel", FormMethod.Post); - { -

- Click the "Input Template" button to view the input Excel document and click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
- Select data source - - -   - - -
-
-
-
- -
-
- -
-
-
-
- - -
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Template Marker Example - Syncfusion Demos -} -@section Header { -

Example of Template Marker in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/TemplateMarker.cshtml.cs b/Pages/Excel/TemplateMarker.cshtml.cs deleted file mode 100644 index 83bdd18f..00000000 --- a/Pages/Excel/TemplateMarker.cshtml.cs +++ /dev/null @@ -1,290 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; -using System.Data; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class TemplateMarker : PageModel - { - #region Private Members - private DataTable northwindDt; - private DataTable numbersDt; - IList _customers = new List(); - private readonly IWebHostEnvironment _hostingEnvironment; - public TemplateMarker(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - # endregion - public IActionResult OnPost(string importOption, string typeOfImage, string button) - { - if (button == null) - return null; - - string basePath = _hostingEnvironment.WebRootPath; - string fileName = string.Empty; - switch (typeOfImage) - { - case "Image only": - fileName = "TemplateMarkerImageOnly.xlsx"; - break; - case "Image with size": - fileName = "TemplateMarkerImageWithSize.xlsx"; - break; - case "Image with position": - fileName = "TemplateMarkerImageWithPosition.xlsx"; - break; - case "Image fit to cell": - fileName = "TemplateMarkerImageFitToCell.xlsx"; - break; - default: - fileName = "TemplateMarkerImageWithSize&Position.xlsx"; - break; - } - - //Save input tamplate - if (button == "Input Template") - { - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - FileStream inputStream = new FileStream(basePath + @"/XlsIO/" + fileName, FileMode.Open, FileAccess.Read); - IWorkbook workbook = application.Workbooks.Open(inputStream); - try - { - workbook.Version = ExcelVersion.Xlsx; - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName); - } - catch (Exception) - { - } - } - else - { - //Load Data - DataSet customersDataSet = new DataSet(); - FileStream xmlStream = new FileStream(basePath + @"/XlsIO/customers.xml", FileMode.Open, FileAccess.Read); - customersDataSet.ReadXml(xmlStream, XmlReadMode.ReadSchema); - northwindDt = customersDataSet.Tables[0].Copy(); - //Change the column Data type from string to Byte Array - northwindDt.Columns.Remove("Image"); - northwindDt.Columns.Add("Image", typeof(byte[])); - int i = 0; - //Get the path of Image File and convert the image into bytes - foreach (DataRow row in customersDataSet.Tables[0].Rows) - { - northwindDt.Rows[i]["Image"] = System.IO.File.ReadAllBytes(basePath + @"/XlsIO/Template_Marker_Images/" + row[4].ToString()); - i++; - } - customersDataSet.Dispose(); - numbersDt = GetTable(); - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - IApplication application = excelEngine.Excel; - application.DefaultVersion = ExcelVersion.Xlsx; - - //Open an existing spreadsheet which will be used as a template for generating the new spreadsheet. - //After opening, the workbook object represents the complete in-memory object model of the template spreadsheet. - FileStream inputStream = new FileStream(basePath + @"/XlsIO/" + fileName, FileMode.Open, FileAccess.Read); - IWorkbook workbook = application.Workbooks.Open(inputStream); - - //The first worksheet object in the worksheets collection is accessed. - IWorksheet sheet1 = workbook.Worksheets[0]; - IWorksheet sheet2 = workbook.Worksheets[1]; - - //Create Template Marker Processor - ITemplateMarkersProcessor marker = workbook.CreateTemplateMarkersProcessor(); - - IConditionalFormats conditions = marker.CreateConditionalFormats(sheet1["C5"]); - #region Data Bar - //Apply markers using Formula - - IConditionalFormat condition = conditions.AddCondition(); - - //Set Data bar and icon set for the same cell - //Set the format type - condition.FormatType = ExcelCFType.DataBar; - IDataBar dataBar = condition.DataBar; - - //Set the constraint - dataBar.MinPoint.Type = ConditionValueType.LowestValue; - dataBar.MinPoint.Value = "0"; - dataBar.MaxPoint.Type = ConditionValueType.HighestValue; - dataBar.MaxPoint.Value = "0"; - - //Set color for Bar - dataBar.BarColor = Syncfusion.Drawing.Color.FromArgb(156, 208, 243); - - //Hide the value in data bar - dataBar.ShowValue = false; - #endregion - - #region IconSet - condition = conditions.AddCondition(); - condition.FormatType = ExcelCFType.IconSet; - IIconSet iconSet = condition.IconSet; - iconSet.IconSet = ExcelIconSetType.FourRating; - iconSet.IconCriteria[0].Type = ConditionValueType.LowestValue; - iconSet.IconCriteria[0].Value = "0"; - iconSet.IconCriteria[1].Type = ConditionValueType.HighestValue; - iconSet.IconCriteria[1].Value = "0"; - iconSet.ShowIconOnly = true; - #endregion - - conditions = marker.CreateConditionalFormats(sheet1["D5"]); - - #region Color Scale - - condition = conditions.AddCondition(); - - condition.FormatType = ExcelCFType.ColorScale; - IColorScale colorScale = condition.ColorScale; - - //Sets 3 - color scale. - colorScale.SetConditionCount(3); - - colorScale.Criteria[0].FormatColorRGB = Syncfusion.Drawing.Color.FromArgb(230, 197, 218); - colorScale.Criteria[0].Type = ConditionValueType.LowestValue; - colorScale.Criteria[0].Value = "0"; - - colorScale.Criteria[1].FormatColorRGB = Syncfusion.Drawing.Color.FromArgb(244, 210, 178); - colorScale.Criteria[1].Type = ConditionValueType.Percentile; - colorScale.Criteria[1].Value = "50"; - - colorScale.Criteria[2].FormatColorRGB = Syncfusion.Drawing.Color.FromArgb(245, 247, 171); - colorScale.Criteria[2].Type = ConditionValueType.HighestValue; - colorScale.Criteria[2].Value = "0"; - #endregion - - conditions = marker.CreateConditionalFormats(sheet1["E5"]); - - #region Iconset - condition = conditions.AddCondition(); - condition.FormatType = ExcelCFType.IconSet; - iconSet = condition.IconSet; - iconSet.IconSet = ExcelIconSetType.ThreeSymbols; - iconSet.IconCriteria[0].Type = ConditionValueType.LowestValue; - iconSet.IconCriteria[0].Value = "0"; - iconSet.IconCriteria[1].Type = ConditionValueType.HighestValue; - iconSet.IconCriteria[1].Value = "0"; - iconSet.ShowIconOnly = false; - - #endregion - - if (importOption == "Data Table") - { - sheet1["A5"].Value = sheet1["A5"].Value.Replace("Customers.Hyperlink.", "Customers."); - //Northwind customers table - marker.AddVariable("Customers", northwindDt); - } - else - { - if (this._customers.Count == 0) - { - this._customers = GetCustomerAsObjects(); - } - marker.AddVariable("Customers", _customers); - } - - marker.AddVariable("NumbersTable", numbersDt); - - //Imports data to the workbook by processing the markers in the template. - marker.ApplyMarkers(); - try - { - //Saving the workbook - workbook.Version = ExcelVersion.Xlsx; - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", fileName); - } - catch (Exception) - { - } - - //Close the workbook. - workbook.Close(); - excelEngine.Dispose(); - } - return null; - } - # region Helpher Methods - /// - /// Gets the Collection of objects from the XML data. - /// - /// Collection of Customer Objects - private IList GetCustomerAsObjects() - { - string basePath = _hostingEnvironment.WebRootPath; - DataSet customersDataSet = new DataSet(); - FileStream xmlStream = new FileStream(basePath + @"/XlsIO/customers.xml", FileMode.Open, FileAccess.Read); - customersDataSet.ReadXml(xmlStream, XmlReadMode.ReadSchema); - northwindDt = customersDataSet.Tables[0].Copy(); - northwindDt.Columns.Remove("Image"); - - //Changing the column data type from string to Byte Array - northwindDt.Columns.Add("Image", typeof(byte[])); - - //Get the path of Image File and convert it into bytes - for (int j = 0; j < customersDataSet.Tables[0].Rows.Count; j++) - { - northwindDt.Rows[j]["Image"] = System.IO.File.ReadAllBytes(basePath + @"/XlsIO/Template_Marker_Images/" + customersDataSet.Tables[0].Rows[j]["Image"].ToString().Trim()); - } - IList tmpCustomers = new List(); - Customer customer = new Customer(); - numbersDt = GetTable(); - DataRowCollection rows = northwindDt.Rows; - foreach (DataRow row in rows) - { - customer = new Customer(); - customer.SalesPerson = row[0].ToString(); - customer.SalesJanJune = Convert.ToInt32(row[1]); - customer.SalesJulyDec = Convert.ToInt32(row[2]); - customer.Change = Convert.ToInt32(row[3]); - customer.Hyperlink = new Hyperlink("https://help.syncfusion.com/file-formats/xlsio/working-with-template-markers", "", "Hyperlink", "Syncfusion", ExcelHyperLinkType.Url, (byte[])row[4]); - tmpCustomers.Add(customer); - } - return tmpCustomers; - } - private DataTable GetTable() - { - Random r = new Random(); - DataTable dt = new DataTable("NumbersTable"); - - int nCols = 4; - int nRows = 10; - - for (int i = 0; i < nCols; i++) - dt.Columns.Add(new DataColumn("Column" + i.ToString())); - - for (int i = 0; i < nRows; ++i) - { - DataRow dr = dt.NewRow(); - for (int j = 0; j < nCols; j++) - dr[j] = r.Next(0, 10); - dt.Rows.Add(dr); - } - return dt; - } - - # endregion - } -} diff --git a/Pages/Excel/WhatIfAnalysis.cshtml b/Pages/Excel/WhatIfAnalysis.cshtml deleted file mode 100644 index 349b16a8..00000000 --- a/Pages/Excel/WhatIfAnalysis.cshtml +++ /dev/null @@ -1,46 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.WhatIfAnalysis -@section ControlsSection { -
- @{ - Html.BeginForm("whatifanalysis", "excel", FormMethod.Post); - { -

- Click the "Input Template" button to view the input Excel document. -

-

- Click the "Create Document" button to view the output Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
- Create Summary -
-
- - -
- Html.EndForm(); - } - } -
-} - -@section ActionDescription { - The sample shows how to create different scenarios of What-If Analysis using Essential XlsIO. -} - -@section Meta { - -} -@section Description { -
-

What-If Analysis is the process of changing the values in cells to see how those changes will affect the outcome of formulas on the worksheet. Essential XlsIO supports the What-If Analysis of Scenarios type.

-

A Scenario is a set of values that Excel saves and can substitute automatically in cells on a worksheet. It is possible to create and save different groups of values on a worksheet and then switch to any of these new scenarios to view different results.

-
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - What-If Analysis Example - Syncfusion Demos -} -@section Header { -

Example of What-If Analysis in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/WhatIfAnalysis.cshtml.cs b/Pages/Excel/WhatIfAnalysis.cshtml.cs deleted file mode 100644 index 6f405185..00000000 --- a/Pages/Excel/WhatIfAnalysis.cshtml.cs +++ /dev/null @@ -1,82 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class WhatIfAnalysis : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public WhatIfAnalysis(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button, string chkbox) - { - string basePath = _hostingEnvironment.WebRootPath; - - if (button == null) - return null; - else if (button == "Input Template") - { - Stream ms = new FileStream(basePath + @"/XlsIO/WhatIfAnalysisTemplate.xlsx", FileMode.Open, FileAccess.Read); - return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "WhatIfAnalysisTemplate.xlsx"); - } - else - { - //Initialize ExcelEngine - using (ExcelEngine excelEngine = new ExcelEngine()) - { - //Initialize IApplication and set the default application version - IApplication application = excelEngine.Excel; - application.DefaultVersion = ExcelVersion.Xlsx; - - //Load the Excel template into IWorkbook and get the worksheet into IWorksheet - FileStream excelStream = new FileStream(basePath + @"/XlsIO/WhatIfAnalysisTemplate.xlsx", FileMode.Open); - IWorkbook workbook = application.Workbooks.Open(excelStream); - IWorksheet worksheet = workbook.Worksheets[0]; - - //Initailize list objects with different values for scenarios - List currentChange_Values = new List { 0.23, 0.8, 1.1, 0.5, 0.35, 0.2, 0.4, 0.37, 1.1, 1, 0.94, 0.75 }; - List increasedChange_Values = new List { 0.45, 0.56, 0.9, 0.5, 0.58, 0.43, 0.39, 0.89, 1.45, 1.2, 0.99, 0.8 }; - List decreasedChange_Values = new List { 0.3, 0.2, 0.5, 0.3, 0.5, 0.23, 0.2, 0.3, 0.8, 0.6, 0.87, 0.4 }; - - List currentQuantity_Values = new List { 1500, 3000, 5000, 4000, 500, 4000, 1200, 1500, 750, 750, 1200, 7900 }; - List increasedQuantity_Values = new List { 1000, 5000, 4500, 3900, 10000, 8900, 8000, 3500, 15000, 5500, 4500, 4200 }; - List decreasedQuantity_Values = new List { 1000, 2000, 3000, 3000, 300, 4000, 1200, 1000, 550, 650, 800, 6900 }; - - //Add scenarios in the worksheet - IScenarios scenarios = worksheet.Scenarios; - scenarios.Add("Current % of Change", worksheet.Range["F5:F16"], currentChange_Values); - scenarios.Add("Increased % of Change", worksheet.Range["F5:F16"], increasedChange_Values); - scenarios.Add("Decreased % of Change", worksheet.Range["F5:F16"], decreasedChange_Values); - - scenarios.Add("Current Quantity", worksheet.Range["D5:D16"], currentQuantity_Values); - scenarios.Add("Increased Quantity", worksheet.Range["D5:D16"], increasedQuantity_Values); - scenarios.Add("Decreased Quantity", worksheet.Range["D5:D16"], decreasedQuantity_Values); - - //Create Summary - if (chkbox != null) - { - worksheet.Scenarios.CreateSummary(worksheet.Range["L7"]); - } - - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - excelEngine.Dispose(); - excelStream.Dispose(); - return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "What-If Analysis.xlsx"); - } - } - } - } -} diff --git a/Pages/Excel/WorkbookProtection.cshtml b/Pages/Excel/WorkbookProtection.cshtml deleted file mode 100644 index f29c15f4..00000000 --- a/Pages/Excel/WorkbookProtection.cshtml +++ /dev/null @@ -1,63 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.WorkbookProtection -@section ActionDescription { - This sample demonstrates how to set protection for a workbook using Excel (XlsIO) Library. -} - -@section Meta { - -} - -@section Description { -
-

- You can lock the structure of a workbook, which prevents users from adding or deleting worksheets or from displaying hidden worksheets. You can also prevent users from changing the size or position of worksheet windows. Workbook structure and window protection apply to the entire workbook. -

-
- Features: -
-
-
    -
  • Protecting a workbook with a password
  • -
  • Protecting a window or structure from modification
  • -
  • Removing protection of a workbook with a password
  • -
-
-

- To protect a workbook, point to Protection on the Tools menu, and then click Protect Workbook. You can choose which elements you want to protect (workbook structure, windows, or both) by selecting or clearing the corresponding check boxes. -

-
-} -@section ControlsSection { -
- @{ - Html.BeginForm("workbookprotection", "excel", FormMethod.Post); - { -

- Click the "Protect Workbook" button to view the protected Excel document and "Unprotect Workbook" to view the unprotected Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
- Save As : - - -   - - -
-
-
- - -
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Workbook Protection Example - Syncfusion Demos -} -@section Header { -

Example of Workbook Protection in ASP.NET Core Excel (XlsIO) Library

-} diff --git a/Pages/Excel/WorkbookProtection.cshtml.cs b/Pages/Excel/WorkbookProtection.cshtml.cs deleted file mode 100644 index ee3097e3..00000000 --- a/Pages/Excel/WorkbookProtection.cshtml.cs +++ /dev/null @@ -1,166 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class WorkbookProtection : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public WorkbookProtection(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public IActionResult OnPost(string button, string saveOption) - { - if (button == null) - return null; - - if (button == "Protect Workbook") - { - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - if (saveOption == "Xls") - application.DefaultVersion = ExcelVersion.Excel97to2003; - else - application.DefaultVersion = ExcelVersion.Excel2016; - - // Opening the Existing Worksheet from a Workbook - IWorkbook workbook = application.Workbooks.Create(1); - - //The first worksheet object in the worksheets collection is accessed. - IWorksheet sheet = workbook.Worksheets[0]; - - sheet.Range["C5"].Text = "Workbook is protected with password 'syncfusion'"; - sheet.Range["C6"].Text = "You can't make changes to structure and window of the workbook."; - sheet.Range["C5"].CellStyle.Font.Bold = true; - sheet.Range["C5"].CellStyle.Font.Size = 12; - - sheet.Range["C6"].CellStyle.Font.Bold = true; - sheet.Range["C6"].CellStyle.Font.Size = 12; - - sheet.Range["C8"].Text = "For Excel 2003: Click 'Tools->Protection' to view the Protection settings."; - sheet.Range["C8"].CellStyle.Font.Bold = true; - sheet.Range["C8"].CellStyle.Font.Size = 12; - - sheet.Range["C10"].Text = "For Excel 2007 and above: Click 'Review Tab->Protect Workbook' to view the Protection settings."; - sheet.Range["C10"].CellStyle.Font.Bold = true; - sheet.Range["C10"].CellStyle.Font.Size = 12; - - workbook.Protect(true, true, "syncfusion"); - - try - { - //Saving the workbook to disk. - MemoryStream ms = new MemoryStream(); - string contentType = string.Empty; - string fileName = string.Empty; - if (saveOption == "Xls") - { - workbook.Version = ExcelVersion.Excel97to2003; - contentType = "application/vnd.ms-excel"; - fileName = "WorkbookProtection.xls"; - workbook.SaveAs(ms); - } - else - { - workbook.Version = ExcelVersion.Xlsx; - contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - fileName = "WorkbookProtection.xlsx"; - workbook.SaveAs(ms); - } - ms.Position = 0; - - return File(ms, contentType, fileName); - } - catch (Exception) - { - } - workbook.Close(); - excelEngine.Dispose(); - } - else - { - string basePath = _hostingEnvironment.WebRootPath; - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - // Opening the encrypted Workbook. - FileStream inputStream = new FileStream(basePath + @"/XlsIO/ProtectedWorkbook.xls", FileMode.Open, FileAccess.Read); - IWorkbook workbook = application.Workbooks.Open(inputStream); - - if (saveOption == "Xls") - workbook.Version = ExcelVersion.Excel97to2003; - else - workbook.Version = ExcelVersion.Excel2016; - - //Unprotecting( unlocking) Workbook using the Password - workbook.Unprotect("syncfusion"); - - //The first worksheet object in the worksheets collection is accessed. - IWorksheet sheet = workbook.Worksheets[0]; - - sheet.Range["C5"].Text = "Workbook is Unprotected with password 'syncfusion' and changes are done"; - sheet.Range["C6"].Text = "You can now edit the structure and window of this workbook."; - - sheet.Range["C5"].CellStyle.Font.Bold = true; - sheet.Range["C5"].CellStyle.Font.Size = 12; - - sheet.Range["C8"].Text = "Click 'Tools->Protection' to view the Protection settings."; - sheet.Range["C8"].CellStyle.Font.Bold = true; - sheet.Range["C8"].CellStyle.Font.Size = 12; - - try - { - //Saving the workbook to disk. - MemoryStream ms = new MemoryStream(); - string contentType = string.Empty; - string fileName = string.Empty; - if (saveOption == "Xls") - { - workbook.Version = ExcelVersion.Excel97to2003; - contentType = "application/vnd.ms-excel"; - fileName = "WorkbookProtection.xls"; - workbook.SaveAs(ms); - } - else - { - workbook.Version = ExcelVersion.Xlsx; - contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - fileName = "WorkbookProtection.xlsx"; - workbook.SaveAs(ms); - } - ms.Position = 0; - - return File(ms, contentType, fileName); - } - catch (Exception) - { - } - - workbook.Close(); - excelEngine.Dispose(); - } - return null; - } - } -} diff --git a/Pages/Excel/WorksheetProtection.cshtml b/Pages/Excel/WorksheetProtection.cshtml deleted file mode 100644 index f81c1330..00000000 --- a/Pages/Excel/WorksheetProtection.cshtml +++ /dev/null @@ -1,54 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.WorksheetProtection -@section ActionDescription { - This sample demonstrates how to Lock and Unlock spreadsheets using Excel (XlsIO) Library. -} - -@section Meta { - -} - -@section Description { -
-

- Microsoft Excel offers a special way for protecting specific data and certain worksheets with or without a password. This prevents anyone from changing, moving, or deleting important data. -

-
-

- Excel allows you to edit or lock a range of cells in a protected worksheet by using the Protection tab in the Format Cells dialog. By default, all cells are locked, but they are not hidden when the worksheet is protected. Worksheets can be protected by choosing the Tools - Protection - Protect Sheet option in Excel. -

-
-} -@section ControlsSection { -
- @{ - Html.BeginForm("worksheetprotection", "excel", FormMethod.Post); - { -

- Click the "Lock Worksheet" button to view the locked Excel document and "Unlock Worksheet" to view the unlocked Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
- Save As : - - -   - - -
-
-
- - -
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Worksheet Protection Example - Syncfusion Demos -} -@section Header { -

Example of Worksheet Protection in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/WorksheetProtection.cshtml.cs b/Pages/Excel/WorksheetProtection.cshtml.cs deleted file mode 100644 index 513119a5..00000000 --- a/Pages/Excel/WorksheetProtection.cshtml.cs +++ /dev/null @@ -1,175 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class WorksheetProtection : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public WorksheetProtection(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public IActionResult OnPost(string button, string saveOption) - { - if (button == null) - return null; - - if (button == "Lock Worksheet") - { - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - if (saveOption == "Xls") - application.DefaultVersion = ExcelVersion.Excel97to2003; - else - application.DefaultVersion = ExcelVersion.Xlsx; - - // Opening the Existing Worksheet from a Workbook - IWorkbook workbook = application.Workbooks.Create(1); - - //The first worksheet object in the worksheets collection is accessed. - IWorksheet sheet = workbook.Worksheets[0]; - - sheet.Range["C5"].Text = "Worksheet protected with password 'syncfusion'"; - sheet.Range["C6"].Text = "You can't edit any cells other than A1 and A2"; - sheet.Range["C5"].CellStyle.Font.Bold = true; - sheet.Range["C5"].CellStyle.Font.Size = 12; - - sheet.Range["C6"].CellStyle.Font.Bold = true; - sheet.Range["C6"].CellStyle.Font.Size = 12; - - sheet.Range["C8"].Text = "For Excel 2003: Click 'Tools->Protection' to view the Protection settings."; - sheet.Range["C8"].CellStyle.Font.Bold = true; - sheet.Range["C8"].CellStyle.Font.Size = 12; - - sheet.Range["C10"].Text = "For Excel 2007 and above: Click 'Review Tab->Unprotect Sheet' to view the Protection settings."; - sheet.Range["C10"].CellStyle.Font.Bold = true; - sheet.Range["C10"].CellStyle.Font.Size = 12; - - sheet.Range["A1:A2"].Text = "You can edit this cell"; - sheet.Range["A1:A2"].CellStyle.Font.Bold = true; - - //Protecting Worksheet using Password - sheet.Protect("syncfusion"); - - //Unlocking the cells which are needed to be edited - sheet.Range["A1"].CellStyle.Locked = false; - sheet.Range["A2"].CellStyle.Locked = false; - - try - { - //Saving the workbook to disk. - MemoryStream ms = new MemoryStream(); - string contentType = string.Empty; - string fileName = string.Empty; - if (saveOption == "Xls") - { - workbook.Version = ExcelVersion.Excel97to2003; - contentType = "application/vnd.ms-excel"; - fileName = "WorksheetProtection.xls"; - workbook.SaveAs(ms); - } - else - { - workbook.Version = ExcelVersion.Xlsx; - contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - fileName = "WorksheetProtection.xlsx"; - workbook.SaveAs(ms); - } - ms.Position = 0; - - return File(ms, contentType, fileName); - } - catch (Exception) - { - } - - workbook.Close(); - excelEngine.Dispose(); - } - else - { - string basePath = _hostingEnvironment.WebRootPath; - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - // Opening a Existing(Protected) Worksheet from a Workbook - FileStream inputStream = new FileStream(basePath + @"/XlsIO/WorksheetProtectionTemplate.xls", FileMode.Open, FileAccess.Read); - IWorkbook workbook = application.Workbooks.Open(inputStream); - - if (saveOption == "Xls") - workbook.Version = ExcelVersion.Excel97to2003; - else - workbook.Version = ExcelVersion.Xlsx; - - IWorksheet sheet = workbook.Worksheets[0]; - - //Unprotecting( unlocking) Worksheet using the Password - sheet.Unprotect("syncfusion"); - - sheet.Range["C5"].Text = "Worksheet is Unprotected with password 'syncfusion' and changes are done"; - sheet.Range["C6"].Text = "You can edit any cell"; - sheet.Range["A1:A2"].Text = " "; - - sheet.Range["C5"].CellStyle.Font.Bold = true; - sheet.Range["C5"].CellStyle.Font.Size = 12; - - sheet.Range["C8"].Text = "Click 'Tools->Protection' to view the Protection settings."; - sheet.Range["C8"].CellStyle.Font.Bold = true; - sheet.Range["C8"].CellStyle.Font.Size = 12; - - try - { - //Saving the workbook to disk. - MemoryStream ms = new MemoryStream(); - string contentType = string.Empty; - string fileName = string.Empty; - if (saveOption == "Xls") - { - workbook.Version = ExcelVersion.Excel97to2003; - contentType = "application/vnd.ms-excel"; - fileName = "WorksheetProtection.xls"; - workbook.SaveAs(ms); - } - else - { - workbook.Version = ExcelVersion.Xlsx; - contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - fileName = "WorksheetProtection.xlsx"; - workbook.SaveAs(ms); - } - ms.Position = 0; - - return File(ms, contentType, fileName); - } - catch (Exception) - { - } - - workbook.Close(); - excelEngine.Dispose(); - } - return null; - } - } -} diff --git a/Pages/Excel/WorksheetToHTML.cshtml b/Pages/Excel/WorksheetToHTML.cshtml deleted file mode 100644 index 27045fb4..00000000 --- a/Pages/Excel/WorksheetToHTML.cshtml +++ /dev/null @@ -1,55 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.WorksheetToHTML -@section ControlsSection { -
- @{ - Html.BeginForm("worksheettohtml", "excel", FormMethod.Post); - { -

- Click the "Input Template" button to view the input Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-

- Click the "Convert To HTML" button to view the converted HTML document. -

-
-
-
- Convert Type : - - -   - - -
-
-
-
- - -
- Html.EndForm(); - } - } -
-} -} -@section ActionDescription { - This sample demonstrates how to convert Worksheets to html files using Essential XlsIO. -} - -@section Meta { - -} -@section Description { -
- This sample demonstrates how a worksheet or workbook is converted to HTML. The - output file can be saved to disc and also as a memory stream. -
-
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Worksheet To HTML Example - Syncfusion Demos -} -@section Header { -

Example of Worksheet To HTML in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/WorksheetToHTML.cshtml.cs b/Pages/Excel/WorksheetToHTML.cshtml.cs deleted file mode 100644 index c3c993e7..00000000 --- a/Pages/Excel/WorksheetToHTML.cshtml.cs +++ /dev/null @@ -1,83 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; -using Syncfusion.XlsIORenderer; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class WorksheetToHTML : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public WorksheetToHTML(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button, string saveOption) - { - string basePath = _hostingEnvironment.WebRootPath; - - if (button == null) - return null; - else if (button == "Input Template") - { - Stream ms = new FileStream(basePath + @"/XlsIO/NorthwindTemplate.xlsx", FileMode.Open, FileAccess.Read); - return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Template.xlsx"); - } - else - { - // The instantiation process consists of two steps. - // Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - - // Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - application.DefaultVersion = ExcelVersion.Excel2016; - - //Read file to memory stream - Stream file = new FileStream(basePath + @"/XlsIO/NorthwindTemplate.xlsx", FileMode.Open, FileAccess.Read); - - // An existing workbook is opened. - IWorkbook workbook = application.Workbooks.Open(file); - - // The first worksheet object in the worksheets collection is accessed. - IWorksheet worksheet = workbook.Worksheets[0]; - - //Create a memory stream to store the generated image. - Stream stream = new MemoryStream(); - FileStreamResult fileStreamResult = null; - - try - { - //Convert Workbook to HTML file. - if (saveOption == "Workbook") - { - workbook.SaveAsHtml(stream); - } - //Convert Worksheet to HTML file. - else - { - worksheet.SaveAsHtml(stream); - } - stream.Position = 0; - fileStreamResult = new FileStreamResult(stream, "text/html"); - return fileStreamResult; - } - catch (Exception) - { } - finally - { - workbook.Close(); - excelEngine.Dispose(); - } - } - return null; - } - } -} diff --git a/Pages/Excel/WorksheetToImage.cshtml b/Pages/Excel/WorksheetToImage.cshtml deleted file mode 100644 index a67c8c78..00000000 --- a/Pages/Excel/WorksheetToImage.cshtml +++ /dev/null @@ -1,70 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.WorksheetToImage -@section ControlsSection { -
- @{ - Html.BeginForm("worksheettoimage", "excel", FormMethod.Post); - { -

- Click the "Input Template" button to view the input Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-

- Click the "Convert To Image" button to view the converted image. -

-
- -
-
- Image Format : - - -   - - -
-
-
-
- - -
- Html.EndForm(); - } - } -
-} -} -@section ActionDescription { - This sample demonstrates how to convert Worksheets to images using Essential XlsIO. -} -@section Meta { - -} -@section Description { -
- A worksheet is converted to an image with few limitations. The image is of any format, and can also be saved as the memory stream. -
-
- Features -
-
    -
  • Convert entire Excel worksheet into Image.
  • -
  • Convert specific Excel range into Image.
  • -
  • Convert Excel document with,
  • -
  • Pivot tables
  • -
  • Conditional formatting
  • -
  • Styles
  • -
  • Rich-text formatting
  • -
  • Text alignments
  • -
  • Images
  • -
  • Text boxes
  • -
  • Unicode characters
  • -
-
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Worksheet To Image Example - Syncfusion Demos -} -@section Header { -

Example of Worksheet To Image in ASP.NET Core Excel (XlsIO) Library

-} diff --git a/Pages/Excel/WorksheetToImage.cshtml.cs b/Pages/Excel/WorksheetToImage.cshtml.cs deleted file mode 100644 index 71ed9a9c..00000000 --- a/Pages/Excel/WorksheetToImage.cshtml.cs +++ /dev/null @@ -1,90 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; -using Syncfusion.XlsIORenderer; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class WorksheetToImage : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public WorksheetToImage(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button, string saveOption) - { - string basePath = _hostingEnvironment.WebRootPath; - - if (button == null) - return null; - else if (button == "Input Template") - { - Stream ms = new FileStream(basePath + @"/XlsIO/ExpenseReport.xlsx", FileMode.Open, FileAccess.Read); - return File(ms, "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "Template.xlsx"); - } - else - { - // The instantiation process consists of two steps. - // Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - - // Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - application.DefaultVersion = ExcelVersion.Excel2016; - - //Read file to memory stream - Stream file = new FileStream(basePath + @"/XlsIO/ExpenseReport.xlsx", FileMode.Open, FileAccess.Read); - - // An existing workbook is opened. - IWorkbook workbook = application.Workbooks.Open(file); - - // The first worksheet object in the worksheets collection is accessed. - IWorksheet worksheet = workbook.Worksheets[0]; - - try - { - //Create a memory stream to store the generated image. - Stream image = new MemoryStream(); - application.XlsIORenderer = new XlsIORenderer(); - - ExportImageOptions imageOptions = new ExportImageOptions() - { - ImageFormat = ExportImageFormat.Jpeg - }; - - //Save as JPEG image - if (saveOption == "jpeg") - { - worksheet.ConvertToImage(worksheet.UsedRange, imageOptions, image); - image.Position = 0; - return File(image, "image/jpeg", "Image.jpeg"); - } - //Save as PNG image - else - { - imageOptions.ImageFormat = ExportImageFormat.Png; - worksheet.ConvertToImage(worksheet.UsedRange, imageOptions, image); - image.Position = 0; - return File(image, "image/png", "Image.png"); - } - } - catch (Exception) - { } - finally - { - workbook.Close(); - excelEngine.Dispose(); - } - } - return null; - } - } -} diff --git a/Pages/Excel/WriteExcel.cshtml b/Pages/Excel/WriteExcel.cshtml deleted file mode 100644 index d07260e9..00000000 --- a/Pages/Excel/WriteExcel.cshtml +++ /dev/null @@ -1,132 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.WriteExcel -@section ActionDescription { - This sample demonstrates how to write Excel documents using XlsIO. -} - -@section Meta { - -} - -@section Description { -
Essential XlsIO allows to create Excel documents efficiently with high performance. -
-
-

- The below table shows the details of Excel (XlsIO) performance for creating an Excel document. -

- - - - - - - - - - - - - - - - - -
- Number of rows and columns - - Time taken in ms -
- 10,000 rows and 50 columns - - 1180 ms -
- 20,000 rows and 50 columns - - 2670 ms -
- 30,000 rows and 50 columns - - 5653 ms -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("writeexcel", "excel", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
-

- Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
-
-
- - - - - -
Enter the number of rows
-
-
-
- - - - - -
Enter the number of columns
-
-
-
-
-
-
- Save As : - - -   - - -
-
-
-
- - -
-

Import on Save option directly serialize data while saving the workbook.

-
-
-
- -
-
- -
-
- - Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Write Excel Example - Syncfusion Demos -} -@section Header { -

Example of Write Excel in ASP.NET Core Excel (XlsIO) Library

-} - diff --git a/Pages/Excel/WriteExcel.cshtml.cs b/Pages/Excel/WriteExcel.cshtml.cs deleted file mode 100644 index 69741f6b..00000000 --- a/Pages/Excel/WriteExcel.cshtml.cs +++ /dev/null @@ -1,112 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; -using System.Data; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class WriteExcel : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public WriteExcel(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public IActionResult OnPost(string lblRows, string lblColumns, string saveOption, string import) - { - if (saveOption == null) - return null; - - int rowCount = Convert.ToInt32(lblRows); - int colCount = Convert.ToInt32(lblColumns); - - //New instance of XlsIO is created.[Equivalent to launching Microsoft Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - if (saveOption == "Xlsx") - application.DefaultVersion = ExcelVersion.Xlsx; - else - application.DefaultVersion = ExcelVersion.Excel97to2003; - - IWorkbook workbook = application.Workbooks.Create(1); - IWorksheet sheet = workbook.Worksheets[0]; - - if (import == "ImportOnSave") - { - workbook.Version = ExcelVersion.Excel2013; - DataTable dataTable = new DataTable(); - for (int column = 1; column <= colCount; column++) - { - dataTable.Columns.Add("Column: " + column.ToString(), typeof(int)); - } - //Adding data into data table - for (int row = 1; row < rowCount; row++) - { - dataTable.Rows.Add(); - for (int column = 1; column <= colCount; column++) - { - dataTable.Rows[row - 1][column - 1] = row * column; - } - } - sheet.ImportDataTable(dataTable, 1, 1, true, true); - } - else - { - - IMigrantRange migrantRange = sheet.MigrantRange; - - for (int column = 1; column <= colCount; column++) - { - migrantRange.ResetRowColumn(1, column); - migrantRange.SetValue("Column: " + column.ToString()); - } - - //Writing Data using normal interface - for (int row = 2; row <= rowCount; row++) - { - //double columnSum = 0.0; - for (int column = 1; column <= colCount; column++) - { - //Writing number - migrantRange.ResetRowColumn(row, column); - migrantRange.SetValue(row * column); - } - } - } - string ContentType = string.Empty; - string fileName = string.Empty; - if (saveOption == "Xls") - { - ContentType = "Application/vnd.ms-excel"; - fileName = "Sample.xls"; - } - else - { - workbook.Version = ExcelVersion.Xlsx; - ContentType = "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - fileName = "Sample.xlsx"; - } - - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, ContentType, fileName); - } - } -} - diff --git a/Pages/Excel/YearlySales.cshtml b/Pages/Excel/YearlySales.cshtml deleted file mode 100644 index 8f4dde6f..00000000 --- a/Pages/Excel/YearlySales.cshtml +++ /dev/null @@ -1,52 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Excel.YearlySales -@section ActionDescription { - This sample demonstrates how to create a simple Excel report for yearly sales with data, chart, formulas, and cell formatting using XlsIO. -} - -@section Meta { - -} -@section Description { - A yearly sales report is used for visualizing a company’s yearly growth. This demo shows the product sales of a company for each month in a specific year by visualizing the data with charts. -
-
- Features: -
-
This sample demonstrates following features: -
-
-
    -
  • Cell formattings
  • -
  • Chart
  • -
  • Number formats
  • -
  • Formulas
  • -
-} -@section ControlsSection { -
- @{ - Html.BeginForm("yearlysales", "excel", FormMethod.Post); - { -
-

- Click the "Create Document" button to view the created Excel document. Please note that the Microsoft Excel viewer or Microsoft Excel is required to view the Excel document. -

-
-
-
-
- -
-
- Html.EndForm(); - } - } -
-} -@section Title { - ASP.NET Core Excel (XlsIO) library - Yearly Sales Example - Syncfusion Demos -} -@section Header { -

Example of Yearly Sales in ASP.NET Core Excel (XlsIO) Library

-} \ No newline at end of file diff --git a/Pages/Excel/YearlySales.cshtml.cs b/Pages/Excel/YearlySales.cshtml.cs deleted file mode 100644 index e6810e5e..00000000 --- a/Pages/Excel/YearlySales.cshtml.cs +++ /dev/null @@ -1,394 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.XlsIO; - -namespace EJ2CoreSampleBrowser.Pages.Excel -{ - public class YearlySales : PageModel - { - private readonly IWebHostEnvironment _hostingEnvironment; - public YearlySales(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - #region YearlySales - public ActionResult OnPost(string button) - { - if (button == null) - return null; - - //New instance of XlsIO is created.[Equivalent to launching MS Excel with no workbooks open]. - //The instantiation process consists of two steps. - - //Step 1 : Instantiate the spreadsheet creation engine. - ExcelEngine excelEngine = new ExcelEngine(); - //Step 2 : Instantiate the excel application object. - IApplication application = excelEngine.Excel; - - application.DefaultVersion = ExcelVersion.Xlsx; - - //Create a workbook - IWorkbook workbook = application.Workbooks.Create(1); - IWorksheet sheet = workbook.Worksheets[0]; - - sheet.Name = "Sales Report"; - - sheet.IsGridLinesVisible = false; - IWorksheet sheet2 = workbook.Worksheets.Create("Data"); - sheet.EnableSheetCalculations(); - - sheet.Range[1, 1, 1, 7].Merge(); - IRange range = sheet.Range["A1"]; - - range.RowHeight = 22.5; - range.Text = "Yearly Sales"; - range.CellStyle.VerticalAlignment = ExcelVAlign.VAlignCenter; - range.CellStyle.HorizontalAlignment = ExcelHAlign.HAlignCenter; - range.CellStyle.Font.Bold = true; - range.CellStyle.Font.Size = 14; - range.CellStyle.Color = Syncfusion.Drawing.Color.FromArgb(155, 194, 230); - - sheet.Range["A1"].ColumnWidth = 3.44; - sheet.Range["B1"].ColumnWidth = 11.0; - sheet.Range["C1"].ColumnWidth = 11.0; - sheet.Range["D1"].ColumnWidth = 0.92; - sheet.Range["E1"].ColumnWidth = 11.0; - sheet.Range["F1"].ColumnWidth = 11.0; - sheet.Range["G1"].ColumnWidth = 3.44; - - sheet.Range[1, 1, 1, 7].Merge(); - - sheet.Range["A13"].RowHeight = 12; - sheet.Range["A14"].RowHeight = 21; - sheet.Range["A15"].RowHeight = 15; - sheet.Range["A16"].RowHeight = 3; - sheet.Range["A17"].RowHeight = 21; - sheet.Range["A18"].RowHeight = 15; - sheet.Range["A19"].RowHeight = 12; - - IRange range5 = sheet.Range["B14:C14"]; - IRange range6 = sheet.Range["B15:C15"]; - IRange range7 = sheet.Range["B17:C17"]; - IRange range8 = sheet.Range["B18:C18"]; - IRange range9 = sheet.Range["E14:F14"]; - IRange range10 = sheet.Range["E15:F15"]; - IRange range11 = sheet.Range["E17:F17"]; - IRange range12 = sheet.Range["E18:F18"]; - - range5.Text = "$ 4.51 M"; - range9.Formula = "=Data!D14"; - range7.Formula = "=Data!C19"; - range11.Formula = "=Data!E14"; - - range5.Merge(); - range6.Merge(); - range7.Merge(); - range8.Merge(); - range9.Merge(); - range10.Merge(); - range11.Merge(); - range12.Merge(); - - List styles = CreateStyles(workbook); - - range5.CellStyle = styles[0]; - range9.CellStyle = styles[1]; - range7.CellStyle = styles[2]; - range11.CellStyle = styles[3]; - - range6.CellStyle = styles[4]; - range6.Text = "Sales Amount"; - range10.CellStyle = styles[5]; - range10.Text = "Average Unit Price"; - range8.CellStyle = styles[6]; - range8.Text = "Gross Profit Margin"; - range12.CellStyle = styles[7]; - range12.Text = "Customer Count"; - - sheet2.Range["B1"].ColumnWidth = 23; - sheet2.Range["C1"].ColumnWidth = 23; - sheet2.Range["D1"].ColumnWidth = 10; - sheet2.Range["E1"].ColumnWidth = 10; - - sheet2.Range["A1"].Text = "Months"; - sheet2.Range["B1"].Text = "Internet Sales Amount"; - sheet2.Range["C1"].Text = "Reseller Sales Amount"; - sheet2.Range["D1"].Text = "Unit Price"; - sheet2.Range["E1"].Text = "Customers"; - - - sheet2.Range["A2"].Text = "Jan"; - sheet2.Range["A3"].Text = "Feb"; - sheet2.Range["A4"].Text = "Mar"; - sheet2.Range["A5"].Text = "Apr"; - sheet2.Range["A6"].Text = "May"; - sheet2.Range["A7"].Text = "June"; - sheet2.Range["A8"].Text = "Jul"; - sheet2.Range["A9"].Text = "Aug"; - sheet2.Range["A10"].Text = "Sep"; - sheet2.Range["A11"].Text = "Oct"; - sheet2.Range["A12"].Text = "Nov"; - sheet2.Range["A13"].Text = "Dec"; - sheet2.Range["A14"].Text = "Total"; - - sheet2.Range["B2"].Number = 226170; - sheet2.Range["B3"].Number = 212259; - sheet2.Range["B4"].Number = 181079; - sheet2.Range["B5"].Number = 188809; - sheet2.Range["B6"].Number = 198195; - sheet2.Range["B7"].Number = 235524; - sheet2.Range["B8"].Number = 185786; - sheet2.Range["B9"].Number = 196745; - sheet2.Range["B10"].Number = 164897; - sheet2.Range["B11"].Number = 175673; - sheet2.Range["B12"].Number = 212896; - sheet2.Range["B13"].Number = 325634; - sheet2.Range["B14"].Formula = "=SUM(B2:B13)"; - - sheet2.Range["C2"].Number = 170234; - sheet2.Range["C3"].Number = 189456; - sheet2.Range["C4"].Number = 168795; - sheet2.Range["C5"].Number = 143567; - sheet2.Range["C6"].Number = 163567; - sheet2.Range["C7"].Number = 163546; - sheet2.Range["C8"].Number = 143787; - sheet2.Range["C9"].Number = 149898; - sheet2.Range["C10"].Number = 153784; - sheet2.Range["C11"].Number = 164289; - sheet2.Range["C12"].Number = 172453; - sheet2.Range["C13"].Number = 223430; - sheet2.Range["C14"].Formula = "=SUM(C2:C13)"; - - sheet2.Range["D2"].Number = 202; - sheet2.Range["D3"].Number = 204; - sheet2.Range["D4"].Number = 191; - sheet2.Range["D5"].Number = 223; - sheet2.Range["D6"].Number = 203; - sheet2.Range["D7"].Number = 185; - sheet2.Range["D8"].Number = 198; - sheet2.Range["D9"].Number = 196; - sheet2.Range["D10"].Number = 220; - sheet2.Range["D11"].Number = 218; - sheet2.Range["D12"].Number = 299; - sheet2.Range["D13"].Number = 185; - sheet2.Range["D14"].Formula = "=AVERAGE(D2:D13)"; - - sheet2.Range["E2"].Number = 1861; - sheet2.Range["E3"].Number = 1522; - sheet2.Range["E4"].Number = 1410; - sheet2.Range["E5"].Number = 1488; - sheet2.Range["E6"].Number = 1781; - sheet2.Range["E7"].Number = 2155; - sheet2.Range["E8"].Number = 1657; - sheet2.Range["E9"].Number = 1767; - sheet2.Range["E10"].Number = 1448; - sheet2.Range["E11"].Number = 1556; - sheet2.Range["E12"].Number = 1928; - sheet2.Range["E13"].Number = 2956; - sheet2.Range["E14"].Formula = "=SUM(E2:E13)"; - - sheet2.Range["B17"].Text = "2018 Sales"; - sheet2.Range["B18"].Text = "2018 Sales"; - sheet2.Range["B19"].Text = "Gain %"; - sheet2.Range["C17"].Number = 3845634; - sheet2.Range["C18"].Formula = "=B14+C14"; - sheet2.Range["C19"].Formula = "=(C18-C17)/10000000"; - - sheet2.Range["C19"].NumberFormat = "0.00%"; - sheet2.Range["C17:C18"].NumberFormat = "_($ #,##0.00"; - sheet2.Range["B2:D14"].NumberFormat = "_($ #,##0.00"; - - sheet2.Range["A1:E1"].CellStyle.Color = Syncfusion.Drawing.Color.FromArgb(198, 224, 180); - sheet2.Range["A1:E1"].CellStyle.Font.Bold = true; - sheet2.Range["A14:E14"].CellStyle.Color = Syncfusion.Drawing.Color.FromArgb(198, 224, 180); - sheet2.Range["A14:E14"].CellStyle.Font.Bold = true; - sheet.Range["G30"].Text = "."; - - #region Chart Creation - IChartShape chart1 = sheet.Charts.Add(); - chart1.ChartType = ExcelChartType.Column_Stacked; - chart1.DataRange = sheet2.Range["A1:B13"]; - chart1.IsSeriesInRows = false; - chart1.Legend.Position = ExcelLegendPosition.Bottom; - chart1.PrimaryValueAxis.NumberFormat = "$#,###"; - chart1.PrimaryValueAxis.HasMajorGridLines = false; - chart1.TopRow = 2; - chart1.BottomRow = 13; - chart1.LeftColumn = 1; - chart1.RightColumn = 8; - chart1.ChartArea.Border.LinePattern = ExcelChartLinePattern.None; - chart1.PrimaryCategoryAxis.TextRotationAngle = -45; - - IChartShape chart2 = sheet.Charts.Add(); - chart2.ChartType = ExcelChartType.Line; - chart2.DataRange = sheet2.Range["A1:C13"]; - chart2.IsSeriesInRows = false; - chart2.ChartTitleArea.Bold = true; - chart2.ChartTitleArea.Size = 11; - chart2.ChartTitleArea.Color = ExcelKnownColors.Grey_80_percent; - chart2.ChartTitleArea.Text = "Internet Sales vs Reseller Sales"; - chart2.Legend.Position = ExcelLegendPosition.Bottom; - chart2.Legend.TextArea.Size = 9; - chart2.Legend.TextArea.Color = ExcelKnownColors.Grey_80_percent; - chart2.TopRow = 20; - chart2.BottomRow = 32; - chart2.LeftColumn = 1; - chart2.RightColumn = 8; - chart2.PrimaryValueAxis.NumberFormat = "$#,###"; - chart2.PrimaryValueAxis.HasMajorGridLines = false; - chart2.ChartArea.Border.LinePattern = ExcelChartLinePattern.None; - #endregion - - sheet.Calculate(); - - string ContentType = "Application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; - string fileName = "YearlySales.xlsx"; - - MemoryStream ms = new MemoryStream(); - workbook.SaveAs(ms); - ms.Position = 0; - - return File(ms, ContentType, fileName); - - } - #endregion - - #region HelperMethods - /// - ///Create styles using workbook - /// - /// workbook used to create the styles - List CreateStyles(IWorkbook workbook) - { - IStyle style1 = workbook.Styles.Add("style1"); - style1.Color = Syncfusion.Drawing.Color.FromArgb(155, 194, 230); - style1.Font.Size = 18; - style1.Font.Bold = true; - style1.NumberFormat = "$#,##0.00"; - style1.HorizontalAlignment = ExcelHAlign.HAlignCenter; - style1.VerticalAlignment = ExcelVAlign.VAlignCenter; - style1.Borders[ExcelBordersIndex.EdgeTop].LineStyle = ExcelLineStyle.Thin; - style1.Borders[ExcelBordersIndex.EdgeTop].Color = ExcelKnownColors.Grey_25_percent; - style1.Borders[ExcelBordersIndex.EdgeRight].LineStyle = ExcelLineStyle.Thin; - style1.Borders[ExcelBordersIndex.EdgeRight].Color = ExcelKnownColors.Grey_25_percent; - style1.Borders[ExcelBordersIndex.EdgeLeft].LineStyle = ExcelLineStyle.Thin; - style1.Borders[ExcelBordersIndex.EdgeLeft].Color = ExcelKnownColors.Grey_25_percent; - - - IStyle style2 = workbook.Styles.Add("style2"); - style2.Color = Syncfusion.Drawing.Color.FromArgb(244, 176, 132); - style2.Font.Size = 18; - style2.Font.Bold = true; - style2.NumberFormat = "$#,##0.00"; - style2.HorizontalAlignment = ExcelHAlign.HAlignCenter; - style2.VerticalAlignment = ExcelVAlign.VAlignCenter; - style2.Borders[ExcelBordersIndex.EdgeTop].LineStyle = ExcelLineStyle.Thin; - style2.Borders[ExcelBordersIndex.EdgeTop].Color = ExcelKnownColors.Grey_25_percent; - style2.Borders[ExcelBordersIndex.EdgeRight].LineStyle = ExcelLineStyle.Thin; - style2.Borders[ExcelBordersIndex.EdgeRight].Color = ExcelKnownColors.Grey_25_percent; - style2.Borders[ExcelBordersIndex.EdgeLeft].LineStyle = ExcelLineStyle.Thin; - style2.Borders[ExcelBordersIndex.EdgeLeft].Color = ExcelKnownColors.Grey_25_percent; - - IStyle style3 = workbook.Styles.Add("style3"); - style3.Color = Syncfusion.Drawing.Color.FromArgb(255, 217, 102); - style3.Font.Size = 18; - style3.Font.Bold = true; - style3.NumberFormat = "0.00%"; - style3.HorizontalAlignment = ExcelHAlign.HAlignCenter; - style3.VerticalAlignment = ExcelVAlign.VAlignCenter; - style3.Borders[ExcelBordersIndex.EdgeTop].LineStyle = ExcelLineStyle.Thin; - style3.Borders[ExcelBordersIndex.EdgeTop].Color = ExcelKnownColors.Grey_25_percent; - style3.Borders[ExcelBordersIndex.EdgeRight].LineStyle = ExcelLineStyle.Thin; - style3.Borders[ExcelBordersIndex.EdgeRight].Color = ExcelKnownColors.Grey_25_percent; - style3.Borders[ExcelBordersIndex.EdgeLeft].LineStyle = ExcelLineStyle.Thin; - style3.Borders[ExcelBordersIndex.EdgeLeft].Color = ExcelKnownColors.Grey_25_percent; - - IStyle style4 = workbook.Styles.Add("style4"); - style4.Color = Syncfusion.Drawing.Color.FromArgb(169, 208, 142); - style4.Font.Size = 18; - style4.Font.Bold = true; - style4.NumberFormat = "#,###"; - style4.HorizontalAlignment = ExcelHAlign.HAlignCenter; - style4.VerticalAlignment = ExcelVAlign.VAlignCenter; - style4.Borders[ExcelBordersIndex.EdgeTop].LineStyle = ExcelLineStyle.Thin; - style4.Borders[ExcelBordersIndex.EdgeTop].Color = ExcelKnownColors.Grey_25_percent; - style4.Borders[ExcelBordersIndex.EdgeRight].LineStyle = ExcelLineStyle.Thin; - style4.Borders[ExcelBordersIndex.EdgeRight].Color = ExcelKnownColors.Grey_25_percent; - style4.Borders[ExcelBordersIndex.EdgeLeft].LineStyle = ExcelLineStyle.Thin; - style4.Borders[ExcelBordersIndex.EdgeLeft].Color = ExcelKnownColors.Grey_25_percent; - - IStyle style5 = workbook.Styles.Add("style5"); - style5.Color = Syncfusion.Drawing.Color.FromArgb(155, 194, 230); - style5.Font.Color = ExcelKnownColors.Grey_50_percent; - style5.HorizontalAlignment = ExcelHAlign.HAlignCenter; - style5.VerticalAlignment = ExcelVAlign.VAlignCenter; - style5.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thin; - style5.Borders[ExcelBordersIndex.EdgeBottom].Color = ExcelKnownColors.Grey_25_percent; - style5.Borders[ExcelBordersIndex.EdgeRight].LineStyle = ExcelLineStyle.Thin; - style5.Borders[ExcelBordersIndex.EdgeRight].Color = ExcelKnownColors.Grey_25_percent; - style5.Borders[ExcelBordersIndex.EdgeLeft].LineStyle = ExcelLineStyle.Thin; - style5.Borders[ExcelBordersIndex.EdgeLeft].Color = ExcelKnownColors.Grey_25_percent; - - - IStyle style6 = workbook.Styles.Add("style6"); - style6.Color = Syncfusion.Drawing.Color.FromArgb(244, 176, 132); - style6.Font.Color = ExcelKnownColors.Grey_50_percent; - style6.HorizontalAlignment = ExcelHAlign.HAlignCenter; - style6.VerticalAlignment = ExcelVAlign.VAlignCenter; - style6.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thin; - style6.Borders[ExcelBordersIndex.EdgeBottom].Color = ExcelKnownColors.Grey_25_percent; - style6.Borders[ExcelBordersIndex.EdgeRight].LineStyle = ExcelLineStyle.Thin; - style6.Borders[ExcelBordersIndex.EdgeRight].Color = ExcelKnownColors.Grey_25_percent; - style6.Borders[ExcelBordersIndex.EdgeLeft].LineStyle = ExcelLineStyle.Thin; - style6.Borders[ExcelBordersIndex.EdgeLeft].Color = ExcelKnownColors.Grey_25_percent; - - - IStyle style7 = workbook.Styles.Add("style7"); - style7.Color = Syncfusion.Drawing.Color.FromArgb(255, 217, 102); - style7.Font.Color = ExcelKnownColors.Grey_50_percent; - style7.HorizontalAlignment = ExcelHAlign.HAlignCenter; - style7.VerticalAlignment = ExcelVAlign.VAlignCenter; - style7.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thin; - style7.Borders[ExcelBordersIndex.EdgeBottom].Color = ExcelKnownColors.Grey_25_percent; - style7.Borders[ExcelBordersIndex.EdgeRight].LineStyle = ExcelLineStyle.Thin; - style7.Borders[ExcelBordersIndex.EdgeRight].Color = ExcelKnownColors.Grey_25_percent; - style7.Borders[ExcelBordersIndex.EdgeLeft].LineStyle = ExcelLineStyle.Thin; - style7.Borders[ExcelBordersIndex.EdgeLeft].Color = ExcelKnownColors.Grey_25_percent; - - IStyle style8 = workbook.Styles.Add("style8"); - style8.Color = Syncfusion.Drawing.Color.FromArgb(169, 208, 142); - style8.Font.Color = ExcelKnownColors.Grey_50_percent; - style8.HorizontalAlignment = ExcelHAlign.HAlignCenter; - style8.VerticalAlignment = ExcelVAlign.VAlignCenter; - style8.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thin; - style8.Borders[ExcelBordersIndex.EdgeBottom].Color = ExcelKnownColors.Grey_25_percent; - style8.Borders[ExcelBordersIndex.EdgeRight].LineStyle = ExcelLineStyle.Thin; - style8.Borders[ExcelBordersIndex.EdgeRight].Color = ExcelKnownColors.Grey_25_percent; - style8.Borders[ExcelBordersIndex.EdgeLeft].LineStyle = ExcelLineStyle.Thin; - style8.Borders[ExcelBordersIndex.EdgeLeft].Color = ExcelKnownColors.Grey_25_percent; - - - List styles = new List(); - styles.Add(style1); - styles.Add(style2); - styles.Add(style3); - styles.Add(style4); - styles.Add(style5); - styles.Add(style6); - styles.Add(style7); - styles.Add(style8); - - return styles; - - } - - #endregion - } -} diff --git a/Pages/Pdf/AnnotationFlatten.cshtml b/Pages/Pdf/AnnotationFlatten.cshtml deleted file mode 100644 index 0ae69343..00000000 --- a/Pages/Pdf/AnnotationFlatten.cshtml +++ /dev/null @@ -1,123 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.AnnotationFlatten - -@section ControlsSection -{ -
- @{Html.BeginForm("annotationflatten", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. - -
-
-
-
- - - - - - -
-
- Annotation Creation: -
- - - - - - - - - -
- - Flatten annotation -
-
- -
-
-
-
-
-
-
-
-
- - - - - - -
-
- Annotation Flatten: -
- - - - - - - - - -
-
- -
-
-
- -
-
-
-
-
-
- - Html.EndForm(); - } - } - -
-} - -@section Scripts { - -} - -@section ActionDescription { -
- This sample demonstrates the creation of different type of annotations such as ink, free text, pop up, text markup, rich media annotation and more. The Essential PDF supports 20+ annotations with create, edit, and delete support. -
-} -@section Meta{ - - } -@section Description{ -
- This feature can be used for reviewing purpose. - More information about the annotations can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - Annotations Example - Syncfusion Demos - } -@section Header{ -

Example of Annotations in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/AnnotationFlatten.cshtml.cs b/Pages/Pdf/AnnotationFlatten.cshtml.cs deleted file mode 100644 index 632f795d..00000000 --- a/Pages/Pdf/AnnotationFlatten.cshtml.cs +++ /dev/null @@ -1,595 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Pdf.Interactive; -using Syncfusion.Pdf.Parsing; -using Syncfusion.Pdf.Redaction; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class AnnotationFlatten : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public AnnotationFlatten(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string InsideBrowser, string checkboxFlatten, string submit, IFormFile file) - { - if (submit == "Create Annotations") - { - //Creates a new PDF document. - PdfDocument document = new PdfDocument(); - - //Creates a new page - PdfPage page = document.Pages.Add(); - document.PageSettings.SetMargins(0); - - PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 10f); - PdfBrush brush = new PdfSolidBrush(Color.Black); - string text = - "Adventure Works Cycles, the fictitious company on which the AdventureWorks sample databases are based, is a large, multinational manufacturing company. The company manufactures and sells metal and composite bicycles to North American, European and Asian commercial markets. While its base operation is located in Washington with 290 employees, several regional sales teams are located throughout their market base."; - - page.Graphics.DrawString("Annotation with Comments and Reviews", font, brush, new PointF(30, 10)); - page.Graphics.DrawString(text, font, brush, new RectangleF(30, 40, page.GetClientSize().Width - 60, 60)); - - string markupText = "North American, European and Asian commercial markets"; - PdfTextMarkupAnnotation textMarkupAnnot = - new PdfTextMarkupAnnotation("sample", "Highlight", markupText, new PointF(147, 63.5f), font); - textMarkupAnnot.Author = "Annotation"; - textMarkupAnnot.Opacity = 1.0f; - textMarkupAnnot.Subject = "Comments and Reviews"; - textMarkupAnnot.ModifiedDate = new DateTime(2015, 1, 18); - textMarkupAnnot.TextMarkupAnnotationType = PdfTextMarkupAnnotationType.Highlight; - textMarkupAnnot.TextMarkupColor = new PdfColor(Color.Yellow); - textMarkupAnnot.InnerColor = new PdfColor(Color.Red); - textMarkupAnnot.Color = new PdfColor(Color.Yellow); - textMarkupAnnot.AnnotationFlags = PdfAnnotationFlags.Print; - if (checkboxFlatten == "Flatten") - { - textMarkupAnnot.Flatten = true; - } - - //Create a new comment. - PdfPopupAnnotation userQuery = new PdfPopupAnnotation(); - userQuery.Author = "John"; - userQuery.Text = "Can you please change South Asian to Asian?"; - userQuery.ModifiedDate = new DateTime(2015, 1, 18); - //Add comment to the annotation - textMarkupAnnot.Comments.Add(userQuery); - - //Creates a new comment - PdfPopupAnnotation userAnswer = new PdfPopupAnnotation(); - userAnswer.Author = "Smith"; - userAnswer.Text = "South Asian has changed as Asian"; - userAnswer.ModifiedDate = new DateTime(2015, 1, 18); - //Add comment to the annotation - textMarkupAnnot.Comments.Add(userAnswer); - - //Creates a new review - PdfPopupAnnotation userAnswerReview = new PdfPopupAnnotation(); - userAnswerReview.Author = "Smith"; - userAnswerReview.State = PdfAnnotationState.Completed; - userAnswerReview.StateModel = PdfAnnotationStateModel.Review; - userAnswerReview.ModifiedDate = new DateTime(2015, 1, 18); - //Add review to the comment - userAnswer.ReviewHistory.Add(userAnswerReview); - - //Creates a new review - PdfPopupAnnotation userAnswerReviewJohn = new PdfPopupAnnotation(); - userAnswerReviewJohn.Author = "John"; - userAnswerReviewJohn.State = PdfAnnotationState.Accepted; - userAnswerReviewJohn.StateModel = PdfAnnotationStateModel.Review; - userAnswerReviewJohn.ModifiedDate = new DateTime(2015, 1, 18); - //Add review to the comment - userAnswer.ReviewHistory.Add(userAnswerReviewJohn); - - //Add annotation to the page - page.Annotations.Add(textMarkupAnnot); - - RectangleF bounds = new RectangleF(350, 170, 80, 80); - //Creates a new Circle annotation. - PdfCircleAnnotation circleannotation = new PdfCircleAnnotation(bounds); - circleannotation.InnerColor = new PdfColor(Color.Yellow); - circleannotation.Color = new PdfColor(Color.Red); - circleannotation.AnnotationFlags = PdfAnnotationFlags.Default; - circleannotation.Author = "Syncfusion"; - circleannotation.Subject = "CircleAnnotation"; - circleannotation.ModifiedDate = new DateTime(2015, 1, 18); - circleannotation.AnnotationFlags = PdfAnnotationFlags.Print; - page.Annotations.Add(circleannotation); - page.Graphics.DrawString("Circle Annotation", font, brush, new PointF(350, 130)); - - //Creates a new Ellipse annotation. - PdfEllipseAnnotation ellipseannotation = - new PdfEllipseAnnotation(new RectangleF(30, 150, 50, 100), "Ellipse Annotation"); - ellipseannotation.Color = new PdfColor(Color.Red); - ellipseannotation.InnerColor = new PdfColor(Color.Yellow); - page.Graphics.DrawString("Ellipse Annotation", font, brush, new PointF(30, 130)); - ellipseannotation.AnnotationFlags = PdfAnnotationFlags.Print; - page.Annotations.Add(ellipseannotation); - - //Creates a new Square annotation. - PdfSquareAnnotation squareannotation = new PdfSquareAnnotation(new RectangleF(30, 300, 80, 80)); - squareannotation.Text = "SquareAnnotation"; - squareannotation.InnerColor = new PdfColor(Color.Red); - squareannotation.Color = new PdfColor(Color.Yellow); - page.Graphics.DrawString("Square Annotation", font, brush, new PointF(30, 280)); - squareannotation.AnnotationFlags = PdfAnnotationFlags.Print; - page.Annotations.Add(squareannotation); - - //Creates a new Rectangle annotation. - RectangleF rectannot = new RectangleF(350, 320, 100, 50); - PdfRectangleAnnotation rectangleannotation = new PdfRectangleAnnotation(rectannot, "RectangleAnnotation"); - rectangleannotation.InnerColor = new PdfColor(Color.Red); - rectangleannotation.Color = new PdfColor(Color.Yellow); - page.Graphics.DrawString("Rectangle Annotation", font, brush, new PointF(350, 280)); - rectangleannotation.AnnotationFlags = PdfAnnotationFlags.Print; - page.Annotations.Add(rectangleannotation); - - //Creates a new Line annotation. - int[] points = new int[] { 400, 350, 550, 350 }; - PdfLineAnnotation lineAnnotation = - new PdfLineAnnotation(points, "Line Annoation is the one of the annotation type..."); - lineAnnotation.Author = "Syncfusion"; - lineAnnotation.Subject = "LineAnnotation"; - lineAnnotation.ModifiedDate = new DateTime(2015, 1, 18); - lineAnnotation.Text = "PdfLineAnnotation"; - lineAnnotation.BackColor = new PdfColor(Color.Red); - lineAnnotation.SetAppearance(true); - page.Graphics.DrawString("Line Annotation", font, brush, new PointF(400, 420)); - lineAnnotation.AnnotationFlags = PdfAnnotationFlags.Print; - page.Annotations.Add(lineAnnotation); - - //Creates a new Polygon annotation. - int[] polypoints = new int[] { 50, 298, 100, 325, 200, 355, 300, 230, 180, 230 }; - PdfPolygonAnnotation polygonannotation = new PdfPolygonAnnotation(polypoints, "PolygonAnnotation"); - polygonannotation.Bounds = new RectangleF(30, 210, 300, 200); - PdfPen pen = new PdfPen(Color.Red); - polygonannotation.Text = "polygon"; - polygonannotation.Color = new PdfColor(Color.Red); - polygonannotation.InnerColor = new PdfColor(Color.LightPink); - polygonannotation.SetAppearance(true); - page.Graphics.DrawString("Polygon Annotation", font, brush, new PointF(50, 420)); - polygonannotation.AnnotationFlags = PdfAnnotationFlags.Print; - page.Annotations.Add(polygonannotation); - - //Creates a new Freetext annotation. - RectangleF freetextrect = new RectangleF(405, 645, 80, 30); - PdfFreeTextAnnotation freeText = new PdfFreeTextAnnotation(freetextrect); - freeText.MarkupText = "Free Text with Callouts"; - freeText.TextMarkupColor = new PdfColor(Color.Green); - freeText.Font = new PdfStandardFont(PdfFontFamily.Helvetica, 7f); - freeText.BorderColor = new PdfColor(Color.Blue); - freeText.Border = new PdfAnnotationBorder(.5f); - freeText.AnnotationFlags = PdfAnnotationFlags.Default | PdfAnnotationFlags.Print; - freeText.Text = "Free Text"; - freeText.Color = new PdfColor(Color.Yellow); - PointF[] Freetextpoints = { new PointF(365, 700), new PointF(379, 654), new PointF(405, 654) }; - freeText.CalloutLines = Freetextpoints; - freeText.SetAppearance(true); - page.Graphics.DrawString("FreeText Annotation", font, brush, new PointF(400, 610)); - page.Annotations.Add(freeText); - - //Creates a new Ink annotation. - List linePoints = new List - { - 72.919f, 136.376f, 72.264f, 136.376f, 62.446f, 142.922f, 61.137f, 142.922f, 55.901f, 139.649f, 55.246f, - 138.34f, 54.592f, 132.449f, 54.592f, 127.867f, 55.901f, 125.904f, 59.828f, 121.976f, 63.101f, 121.322f, - 65.719f, 122.631f, 68.992f, 125.249f, 70.301f, 130.485f, 71.61f, 133.104f, 72.264f, 136.376f, 72.919f, - 140.304f, 74.883f, 144.885f, 76.192f, 150.776f, 76.192f, 151.431f, 76.192f, 152.085f, 76.192f, 158.631f, - 76.192f, 159.94f, 75.537f, 155.358f, 74.228f, 150.122f, 74.228f, 146.195f, 73.574f, 141.613f, 73.574f, - 137.685f, 74.228f, 132.449f, 74.883f, 128.522f, 75.537f, 124.594f, 76.192f, 123.285f, 76.846f, 122.631f, - 80.774f, 122.631f, 82.737f, 123.285f, 85.355f, 125.249f, 88.628f, 129.831f, 89.283f, 133.104f, 89.937f, - 137.031f, 90.592f, 140.958f, 89.937f, 142.267f, 86.665f, 141.613f, 85.355f, 140.304f, 84.701f, 138.34f, - 84.701f, 137.685f, 85.355f, 137.031f, 87.974f, 135.722f, 90.592f, 136.376f, 92.555f, 137.031f, 96.483f, - 139.649f, 98.446f, 140.958f, 101.719f, 142.922f, 103.028f, 142.922f, 100.41f, 138.34f, 99.756f, - 134.413f, 99.101f, 131.14f, 99.101f, 128.522f, 99.756f, 127.213f, 101.065f, 125.904f, 102.374f, 123.94f, - 103.683f, 123.94f, 107.61f, 125.904f, 110.228f, 129.831f, 114.156f, 135.067f, 117.428f, 140.304f, - 119.392f, 143.576f, 121.356f, 144.231f, 122.665f, 144.231f, 123.974f, 142.267f, 126.592f, 139.649f, - 127.247f, 140.304f, 126.592f, 142.922f, 124.628f, 143.576f, 122.01f, 142.922f, 118.083f, 141.613f, - 114.81f, 136.376f, 114.81f, 131.14f, 113.501f, 127.213f, 114.156f, 125.904f, 118.083f, 125.904f, - 120.701f, 126.558f, 123.319f, 130.485f, 125.283f, 136.376f, 125.937f, 140.304f, 125.937f, 142.922f, - 126.592f, 143.576f, 125.937f, 135.722f, 125.937f, 131.794f, 125.937f, 131.14f, 127.247f, 129.176f, - 129.21f, 127.213f, 131.828f, 127.213f, 134.447f, 128.522f, 136.41f, 136.376f, 139.028f, 150.122f, - 141.647f, 162.558f, 140.992f, 163.213f, 138.374f, 160.595f, 135.756f, 153.395f, 135.101f, 148.158f, - 134.447f, 140.304f, 134.447f, 130.485f, 133.792f, 124.594f, 133.792f, 115.431f, 133.792f, 110.194f, - 133.792f, 105.612f, 134.447f, 105.612f, 137.065f, 110.194f, 137.719f, 116.74f, 139.028f, 120.013f, - 139.028f, 123.94f, 137.719f, 127.213f, 135.756f, 130.485f, 134.447f, 130.485f, 133.792f, 130.485f, - 137.719f, 131.794f, 141.647f, 135.722f, 146.883f, 142.922f, 152.774f, 153.395f, 153.428f, 159.286f, - 150.156f, 159.94f, 147.537f, 156.667f, 146.883f, 148.813f, 146.883f, 140.958f, 146.883f, 134.413f, - 146.883f, 125.904f, 145.574f, 118.703f, 145.574f, 114.776f, 145.574f, 112.158f, 146.228f, 111.503f, - 147.537f, 111.503f, 148.192f, 112.158f, 150.156f, 112.812f, 150.81f, 113.467f, 152.119f, 114.776f, - 154.083f, 117.394f, 155.392f, 119.358f, 156.701f, 120.667f, 157.356f, 121.976f, 156.701f, 121.322f, - 156.047f, 120.013f, 155.392f, 119.358f, 154.083f, 117.394f, 154.083f, 116.74f, 152.774f, 114.776f, - 152.119f, 114.121f, 150.81f, 113.467f, 149.501f, 113.467f, 147.537f, 112.158f, 146.883f, 112.158f, - 145.574f, 111.503f, 144.919f, 112.158f, 144.265f, 114.121f, 144.265f, 115.431f, 144.265f, 116.74f, - 144.265f, 117.394f, 144.265f, 118.049f, 144.919f, 118.703f, 145.574f, 120.667f, 146.228f, 122.631f, - 147.537f, 123.285f, 147.537f, 124.594f, 148.192f, 125.904f, 147.537f, 128.522f, 147.537f, 129.176f, - 147.537f, 130.485f, 147.537f, 132.449f, 147.537f, 134.413f, 147.537f, 136.376f, 147.537f, 138.34f, - 147.537f, 138.994f, 145.574f, 138.994f, 142.956f, 138.252f - }; - RectangleF rectangle = new RectangleF(30, 580, 300, 400); - PdfInkAnnotation inkAnnotation = new PdfInkAnnotation(rectangle, linePoints); - inkAnnotation.Bounds = rectangle; - inkAnnotation.Color = new PdfColor(Color.Red); - page.Graphics.DrawString("Ink Annotation", font, brush, new PointF(30, 610)); - inkAnnotation.AnnotationFlags = PdfAnnotationFlags.Print; - page.Annotations.Add(inkAnnotation); - - PdfPage secondPage = document.Pages.Add(); - - //Creates a new TextMarkup annotation. - string s = "This is TextMarkup annotation!!!"; - secondPage.Graphics.DrawString(s, font, brush, new PointF(30, 70)); - PdfTextMarkupAnnotation textannot = - new PdfTextMarkupAnnotation("sample", "Strikeout", s, new PointF(30, 70), font); - textannot.Author = "Annotation"; - textannot.Opacity = 1.0f; - textannot.Subject = "pdftextmarkupannotation"; - textannot.ModifiedDate = new DateTime(2015, 1, 18); - textannot.TextMarkupAnnotationType = PdfTextMarkupAnnotationType.StrikeOut; - textannot.TextMarkupColor = new PdfColor(Color.Yellow); - textannot.InnerColor = new PdfColor(Color.Red); - textannot.Color = new PdfColor(Color.Yellow); - if (checkboxFlatten == "Flatten") - { - textannot.Flatten = true; - } - - secondPage.Graphics.DrawString("TextMarkup Annotation", font, brush, new PointF(30, 40)); - textannot.AnnotationFlags = PdfAnnotationFlags.Print; - secondPage.Annotations.Add(textannot); - - //Creates a new popup annotation. - RectangleF popupRect = new RectangleF(430, 70, 30, 30); - PdfPopupAnnotation popupAnnotation = new PdfPopupAnnotation(); - popupAnnotation.Border.Width = 4; - popupAnnotation.Border.HorizontalRadius = 20; - popupAnnotation.Border.VerticalRadius = 30; - popupAnnotation.Opacity = 1; - popupAnnotation.Open = true; - popupAnnotation.Text = "Popup Annotation"; - popupAnnotation.Color = Color.Green; - popupAnnotation.InnerColor = Color.Blue; - popupAnnotation.Bounds = popupRect; - if (checkboxFlatten == "Flatten") - { - popupAnnotation.FlattenPopUps = true; - popupAnnotation.Flatten = true; - } - popupAnnotation.SetAppearance(true); - secondPage.Graphics.DrawString("Popup Annotation", font, brush, new PointF(400, 40)); - popupAnnotation.AnnotationFlags = PdfAnnotationFlags.Print; - secondPage.Annotations.Add(popupAnnotation); - - //Creates a new Line measurement annotation. - points = new int[] { 400, 630, 550, 630 }; - PdfLineMeasurementAnnotation lineMeasureAnnot = new PdfLineMeasurementAnnotation(points); - lineMeasureAnnot.Author = "Syncfusion"; - lineMeasureAnnot.Subject = "LineAnnotation"; - lineMeasureAnnot.ModifiedDate = new DateTime(2015, 1, 18); - lineMeasureAnnot.Unit = PdfMeasurementUnit.Inch; - lineMeasureAnnot.lineBorder.BorderWidth = 2; - lineMeasureAnnot.Font = new PdfStandardFont(PdfFontFamily.Helvetica, 10f, PdfFontStyle.Regular); - lineMeasureAnnot.Color = new PdfColor(Color.Red); - if (checkboxFlatten == "Flatten") - { - lineMeasureAnnot.Flatten = true; - } - lineMeasureAnnot.SetAppearance(true); - secondPage.Graphics.DrawString("Line Measurement Annotation", font, brush, new PointF(370, 130)); - lineMeasureAnnot.AnnotationFlags = PdfAnnotationFlags.Print; - secondPage.Annotations.Add(lineMeasureAnnot); - - //Creates a new Freetext annotation. - RectangleF freetextrect0 = new RectangleF(80, 160, 100, 50); - PdfFreeTextAnnotation freeText0 = new PdfFreeTextAnnotation(freetextrect0); - freeText0.MarkupText = "Free Text with Callouts"; - freeText0.TextMarkupColor = new PdfColor(Color.Green); - freeText0.Font = new PdfStandardFont(PdfFontFamily.Helvetica, 7f); - freeText0.BorderColor = new PdfColor(Color.Blue); - freeText0.Border = new PdfAnnotationBorder(.5f); - freeText0.AnnotationFlags = PdfAnnotationFlags.Default; - freeText0.Text = "Free Text"; - freeText0.Rotate = PdfAnnotationRotateAngle.RotateAngle90; - freeText0.Color = new PdfColor(Color.Yellow); - PointF[] Freetextpoints0 = { new PointF(45, 220), new PointF(60, 175), new PointF(80, 175) }; - freeText0.CalloutLines = Freetextpoints0; - freeText0.SetAppearance(true); - secondPage.Graphics.DrawString("Rotated FreeText Annotation", font, brush, new PointF(40, 130)); - if (checkboxFlatten == "Flatten") - { - freeText0.Flatten = true; - } - - freeText0.AnnotationFlags = PdfAnnotationFlags.Print; - secondPage.Annotations.Add(freeText0); - - PdfRectangleAnnotation cloudannotation = - new PdfRectangleAnnotation(new RectangleF(30, 300, 100, 50), "Rectangle Cloud Annoatation"); - cloudannotation.Border.BorderWidth = 1; - cloudannotation.Color = Color.Red; - cloudannotation.InnerColor = Color.Blue; - PdfBorderEffect bordereffect = new PdfBorderEffect(); - bordereffect.Intensity = 2; - bordereffect.Style = PdfBorderEffectStyle.Cloudy; - cloudannotation.BorderEffect = bordereffect; - cloudannotation.SetAppearance(true); - secondPage.Graphics.DrawString("Rectangle Cloud Annotation", font, brush, new PointF(40, 260)); - cloudannotation.AnnotationFlags = PdfAnnotationFlags.Print; - secondPage.Annotations.Add(cloudannotation); - - //Creates a Ellipse Annotation with Cloud Border - PdfEllipseAnnotation ellipseCloud = new PdfEllipseAnnotation(new RectangleF(355, 310, 70, 30), "Ellipse Cloud Annoatation"); - ellipseCloud.Border.BorderWidth = 1; - ellipseCloud.Color = Color.Red; - ellipseCloud.InnerColor = Color.Blue; - ellipseCloud.AnnotationFlags = PdfAnnotationFlags.Print; - bordereffect.Intensity = 2; - bordereffect.Style = PdfBorderEffectStyle.Cloudy; - ellipseCloud.BorderEffect = bordereffect; - ellipseCloud.SetAppearance(true); - secondPage.Graphics.DrawString("Ellipse Cloud Annotation", font, brush, new PointF(350, 260)); - secondPage.Annotations.Add(ellipseCloud); - - //Creates a Circle Annotation with Cloud Border - PdfCircleAnnotation circleCloud = new PdfCircleAnnotation(new RectangleF(40, 430, 90, 90), "Circle Cloud Annoatation"); - circleCloud.Border.BorderWidth = 1; - circleCloud.Color = Color.Red; - circleCloud.InnerColor = Color.Blue; - circleCloud.AnnotationFlags = PdfAnnotationFlags.Print; - bordereffect.Intensity = 2; - bordereffect.Style = PdfBorderEffectStyle.Cloudy; - circleCloud.BorderEffect = bordereffect; - circleCloud.SetAppearance(true); - secondPage.Graphics.DrawString("Circle Cloud Annotation", font, brush, new PointF(40, 390)); - secondPage.Annotations.Add(circleCloud); - - //Creates a Polygon Annotation with Cloud Border - int[] cloudpolypoints = new int[] { 436, 254, 491, 324, 461, 374, 411, 344, 391, 294, 431, 264, 436, 254 }; - PdfPolygonAnnotation polygonCloud = new PdfPolygonAnnotation(cloudpolypoints, "Polygon Cloud Annoatation"); - polygonCloud.Border.BorderWidth = 1; - polygonCloud.Color = Color.Red; - polygonCloud.InnerColor = Color.Blue; - polygonCloud.AnnotationFlags = PdfAnnotationFlags.Print; - bordereffect.Intensity = 2; - bordereffect.Style = PdfBorderEffectStyle.Cloudy; - polygonCloud.BorderEffect = bordereffect; - polygonCloud.SetAppearance(true); - secondPage.Graphics.DrawString("Polygon Cloud Annotation", font, brush, new PointF(350, 390)); - secondPage.Annotations.Add(polygonCloud); - - PdfPage thirdPage = document.Pages.Add(); - - PdfRedactionAnnotation redactionAnnotation = new PdfRedactionAnnotation(); - redactionAnnotation.Bounds = new RectangleF(40, 610, 100, 50); - redactionAnnotation.Text = "Redaction Annotation"; - redactionAnnotation.InnerColor = Color.Orange; - redactionAnnotation.BorderColor = Color.Red; - redactionAnnotation.Font = new PdfStandardFont(PdfFontFamily.Helvetica, 13); - redactionAnnotation.TextColor = Color.Green; - redactionAnnotation.OverlayText = "REDACTED"; - redactionAnnotation.RepeatText = true; - redactionAnnotation.TextAlignment = PdfTextAlignment.Left; - redactionAnnotation.SetAppearance(true); - secondPage.Graphics.DrawString("Redaction Annotation", font, brush, new PointF(40, 580)); - redactionAnnotation.AnnotationFlags = PdfAnnotationFlags.Print; - secondPage.Annotations.Add(redactionAnnotation); - - //Creates a new RubberStamp annotation - PdfRubberStampAnnotation rubberStampAnnotation = - new PdfRubberStampAnnotation(new RectangleF(30, 70, 100, 50)); - rubberStampAnnotation.Text = "Rubber Stamp Annotation"; - rubberStampAnnotation.Author = "Syncfusion"; - rubberStampAnnotation.ModifiedDate = new DateTime(2015, 1, 18); - rubberStampAnnotation.Color = new PdfColor(Color.Red); - rubberStampAnnotation.AnnotationFlags = PdfAnnotationFlags.Print; - thirdPage.Graphics.DrawString("Rubber Stamp Annotation", font, brush, new PointF(30, 40)); - thirdPage.Annotations.Add(rubberStampAnnotation); - - thirdPage.Graphics.DrawString("Rich Media Annotation (Video)", font, brush, new PointF(350, 40)); - - //Create rich media annotation - PdfRichMediaAnnotation richMediaAnnotation = new PdfRichMediaAnnotation(new RectangleF(350, 70, 160, 100)); - //Set activation mode - richMediaAnnotation.ActivationMode = PdfRichMediaActivationMode.Click; - //Set presentation style - richMediaAnnotation.PresentationStyle = PdfRichMediaPresentationStyle.Embedded; - richMediaAnnotation.AnnotationFlags = PdfAnnotationFlags.Print; - - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Create rich media content with video file - Stream filestream = - new FileStream(dataPath + "Video.mp4", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - PdfRichMediaContent content = new PdfRichMediaContent("video", filestream, "mp4"); - //Set the content type - content.ContentType = PdfRichMediaContentType.Video; - //Add content to the rich media - richMediaAnnotation.Content = content; - - Stream imageStream = new FileStream(dataPath + "richmedia.jpg", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - PdfBitmap image = new PdfBitmap(imageStream); - //Draw image to the appearance - richMediaAnnotation.Appearance.Normal.Graphics.DrawImage(image, - new RectangleF(0, 0, richMediaAnnotation.Bounds.Width, richMediaAnnotation.Bounds.Height)); - //Add annotation to the page - thirdPage.Annotations.Add(richMediaAnnotation); - - secondPage.Graphics.DrawString("Rich Media Annotation (Sound)", font, brush, new PointF(340, 580)); - - //Create rich media annotation - PdfRichMediaAnnotation richMediaAnnotationSound = - new PdfRichMediaAnnotation(new RectangleF(340, 610, 160, 100)); - //Set activation mode - richMediaAnnotationSound.ActivationMode = PdfRichMediaActivationMode.Click; - //Set presentation style - richMediaAnnotationSound.PresentationStyle = PdfRichMediaPresentationStyle.Embedded; - richMediaAnnotationSound.AnnotationFlags = PdfAnnotationFlags.Print; - - //Create rich media content with video file - filestream = new FileStream(dataPath + "Sound.mp3", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - PdfRichMediaContent soundContent = new PdfRichMediaContent("Sound", filestream, "mp3"); - //Set the content type - soundContent.ContentType = PdfRichMediaContentType.Sound; - //Add content to the rich media - richMediaAnnotationSound.Content = soundContent; - - Stream soundImageStream = new FileStream(dataPath + "richmedia_sound.jpg", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - PdfBitmap soundImage = new PdfBitmap(soundImageStream); - - //Draw image to the appearance - richMediaAnnotationSound.Appearance.Normal.Graphics.DrawImage(soundImage, - new RectangleF(0, 0, richMediaAnnotationSound.Bounds.Width, richMediaAnnotationSound.Bounds.Height)); - //Add annotation to the page - secondPage.Annotations.Add(richMediaAnnotationSound); - - AddWatermarkAnnotation(document, dataPath); - - //close the document - MemoryStream SourceStream = new MemoryStream(); - document.Save(SourceStream); - SourceStream.Position = 0; - document.Close(true); - - - if (checkboxFlatten == "Flatten") - { - //Creates a new Loaded document. - PdfLoadedDocument lDoc = new PdfLoadedDocument(SourceStream); - - //Flatten the redaction annotation - lDoc.Redact(); - - //Flatten all the annotations. - lDoc.FlattenAnnotations(); - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - - lDoc.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - lDoc.Close(true); - - SourceStream.Dispose(); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "AnnotationFaltten.pdf"; - return fileStreamResult; - } - else - { - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(SourceStream, "application/pdf"); - fileStreamResult.FileDownloadName = "Annotation.pdf"; - return fileStreamResult; - } - } - else - { - PdfLoadedDocument ldoc = new PdfLoadedDocument(file.OpenReadStream()); - - //Flatten the redaction annotation - ldoc.Redact(); - - //Flatten all the annotations. - ldoc.FlattenAnnotations(); - - //Save the document in memory stream - MemoryStream ms = new MemoryStream(); - ldoc.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - ldoc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "AnnotationFaltten.pdf"; - return fileStreamResult; - } - } - - private void AddWatermarkAnnotation(PdfDocument document, string dataPath) - { - PdfPage page = document.Pages[2]; - SizeF pageClientSize = page.GetClientSize(); - FileStream imageStream = new FileStream(dataPath + "AdventureCycle.jpg", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - //Load the image from the disk. - PdfImage img = PdfImage.FromStream(imageStream); - //Draw the image in the specified location and size. - page.Graphics.DrawImage(img, new RectangleF(150, 220, 250, 150)); - - PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 15); - - page.Graphics.DrawString("Watermark Annotation", font, PdfBrushes.Black, new PointF(30, 200)); - - PdfTextElement textElement = new PdfTextElement( - "Adventure Works Cycles, the fictitious company on which the AdventureWorks sample databases are based," + - " is a large, multinational manufacturing company. The company manufactures and sells metal and composite bicycles to North American, " + - "European and Asian commercial markets. While its base operation is located in Bothell, Washington with 290 employees, several regional" + - " sales teams are located throughout their market base.") - { - Font = font - }; - PdfLayoutResult layoutResult = - textElement.Draw(page, new RectangleF(0, 390, pageClientSize.Width, pageClientSize.Height)); - - textElement = new PdfTextElement( - "In 2000, Adventure Works Cycles bought a small manufacturing plant, Importadores Neptuno, located in Mexico." + - " Importadores Neptuno manufactures several critical subcomponents for the Adventure Works Cycles product line." + - " These subcomponents are shipped to the Bothell location for final product assembly. In 2001, Importadores Neptuno," + - " became the sole manufacturer and distributor of the touring bicycle product group.") - { - Font = font - }; - layoutResult = textElement.Draw(page, - new RectangleF(0, layoutResult.Bounds.Bottom + 20, pageClientSize.Width, pageClientSize.Height)); - - //Create watermark annotation. - PdfWatermarkAnnotation watermarkAnnotation = - new PdfWatermarkAnnotation(new RectangleF(0, 0, pageClientSize.Width, pageClientSize.Height)); - //Set opacity. - watermarkAnnotation.Opacity = 0.25F; - watermarkAnnotation.AnnotationFlags = PdfAnnotationFlags.Print; - //Get the appearance graphics. - PdfGraphics graphics = watermarkAnnotation.Appearance.Normal.Graphics; - string watermarkText = "Confidential"; - PdfFont watermarkFont = new PdfStandardFont(PdfFontFamily.Helvetica, 40); - SizeF textSize = watermarkFont.MeasureString(watermarkText); - //Find the center position. - float x = pageClientSize.Width / 2 - textSize.Width / 2; - float y = pageClientSize.Height / 2; - graphics.Save(); - graphics.TranslateTransform(x, y); - graphics.RotateTransform(-45); - //Draw the watermark content. - graphics.DrawString(watermarkText, watermarkFont, PdfBrushes.Red, PointF.Empty); - graphics.Restore(); - //Add the watermark annotation to the PDF page. - page.Annotations.Add(watermarkAnnotation); - } -} diff --git a/Pages/Pdf/Attachments.cshtml b/Pages/Pdf/Attachments.cshtml deleted file mode 100644 index 777c0c53..00000000 --- a/Pages/Pdf/Attachments.cshtml +++ /dev/null @@ -1,80 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.Attachments - -@section ControlsSection{ -
- @{Html.BeginForm("attachments", "pdf", FormMethod.Post); - { -
-
-
- - - - - - - - - - - - - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
- -
-
-
- -
-
-
- -
-
-
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to attach files in the PDF document. The attachment files can be of any file format type with information.It is also possible to extract and remove attachments from the PDF document. -
-} -@section Meta{ - - } -@section Description{ -
- More information about the attachments can be found in this documentation section. -
-} - -@section Title{ - ASP.NET Core PDF library - File Attachments Example - Syncfusion Demos - } -@section Header{ -

Example of File Attachments in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/Attachments.cshtml.cs b/Pages/Pdf/Attachments.cshtml.cs deleted file mode 100644 index 7e1e46b1..00000000 --- a/Pages/Pdf/Attachments.cshtml.cs +++ /dev/null @@ -1,168 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Pdf.Interactive; -using Syncfusion.Pdf.Security; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class Attachments : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public Attachments(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string encrypt, string password) - { - //Creates a new PDF document. - PdfDocument doc = new PdfDocument(); - - //Add a page - PdfPage page = doc.Pages.Add(); - - //Set the font - PdfStandardFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 18f, PdfFontStyle.Bold); - - //Create new PDF color - PdfColor orangeColor = new PdfColor(255, 255, 167, 73); - - //Draw the text - page.Graphics.DrawString("Attachments", font, PdfBrushes.Black, - new RectangleF(0, 0, page.GetClientSize().Width, page.GetClientSize().Height), - new PdfStringFormat(PdfTextAlignment.Center)); - - //Create font - font = new PdfStandardFont(PdfFontFamily.Helvetica, 10f, PdfFontStyle.Regular); - - page.Graphics.DrawString("This PDF document contains image and text file as attachment.", font, - PdfBrushes.Black, new PointF(0, 30)); - - font = new PdfStandardFont(PdfFontFamily.Helvetica, 8f, PdfFontStyle.Regular); - - page.Graphics.DrawString("Click to open the attachment:", font, PdfBrushes.Black, new PointF(0, 50)); - - page.Graphics.DrawString("Click to open the attachment:", font, PdfBrushes.Black, new PointF(0, 70)); - - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Read the file - FileStream file = new FileStream(dataPath + "Text1.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - //Creates an attachment - PdfAttachment attachment = new PdfAttachment("Text1.txt", file); - - attachment.ModificationDate = DateTime.Now; - - attachment.Description = "About Syncfusion"; - - attachment.MimeType = "application/txt"; - - //Adds the attachment to the document - doc.Attachments.Add(attachment); - - file = new FileStream(dataPath + "Autumn Leaves.jpg", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - //Creates an attachment - attachment = new PdfAttachment("Autumn Leaves.jpg", file); - - attachment.ModificationDate = DateTime.Now; - - attachment.Description = "Autumn Leaves Image"; - - attachment.MimeType = "application/jpg"; - - doc.Attachments.Add(attachment); - - file = new FileStream(dataPath + "Text2.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - //Creates an attachment - attachment = new PdfAttachment("Text2.txt", file); - - attachment.ModificationDate = DateTime.Now; - - attachment.Description = "List of Syncfusion Control"; - - attachment.MimeType = "application/txt"; - - doc.Attachments.Add(attachment); - - //Set Encryption password - if (!string.IsNullOrEmpty(encrypt) && !string.IsNullOrEmpty(password)) - { - PdfSecurity security = doc.Security; - security.UserPassword = password; - security.Algorithm = PdfEncryptionAlgorithm.AES; - security.EncryptionOptions = PdfEncryptionOptions.EncryptOnlyAttachments; - } - - //Set document viewerpreference. - doc.ViewerPreferences.HideWindowUI = false; - doc.ViewerPreferences.HideMenubar = false; - doc.ViewerPreferences.HideToolbar = false; - doc.ViewerPreferences.FitWindow = false; - doc.ViewerPreferences.DisplayTitle = false; - doc.ViewerPreferences.PageMode = PdfPageMode.UseAttachments; - - //Disable the default appearance. - doc.Form.SetDefaultAppearance(false); - - //Create pdfbuttonfield. - PdfButtonField openSpecificationButton = new PdfButtonField(page, "openSpecification"); - openSpecificationButton.Bounds = new RectangleF(105, 50, 62, 10); - openSpecificationButton.TextAlignment = PdfTextAlignment.Left; - openSpecificationButton.Font = new PdfStandardFont(PdfFontFamily.Helvetica, 7); - openSpecificationButton.BorderStyle = PdfBorderStyle.Underline; - openSpecificationButton.BorderColor = orangeColor; - openSpecificationButton.BackColor = new PdfColor(255, 255, 255); - openSpecificationButton.ForeColor = orangeColor; - openSpecificationButton.Text = "Autumn Leaves.jpg"; - openSpecificationButton.Actions.MouseUp = - new PdfJavaScriptAction("this.exportDataObject({ cName: 'Autumn Leaves.jpg', nLaunch: 2 });"); - doc.Form.Fields.Add(openSpecificationButton); - - openSpecificationButton = new PdfButtonField(page, "openSpecification"); - openSpecificationButton.Bounds = new RectangleF(105, 70, 30, 10); - openSpecificationButton.TextAlignment = PdfTextAlignment.Left; - openSpecificationButton.Font = new PdfStandardFont(PdfFontFamily.Helvetica, 7); - openSpecificationButton.BorderStyle = PdfBorderStyle.Underline; - openSpecificationButton.BorderColor = orangeColor; - openSpecificationButton.BackColor = new PdfColor(255, 255, 255); - openSpecificationButton.ForeColor = orangeColor; - openSpecificationButton.Text = "Text1.txt"; - openSpecificationButton.Actions.MouseUp = - new PdfJavaScriptAction("this.exportDataObject({ cName: 'Text1.txt', nLaunch: 2 });"); - doc.Form.Fields.Add(openSpecificationButton); - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - doc.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the PDF document. - doc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "Attachments.pdf"; - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Pdf/Autotag.cshtml b/Pages/Pdf/Autotag.cshtml deleted file mode 100644 index e6cc36f9..00000000 --- a/Pages/Pdf/Autotag.cshtml +++ /dev/null @@ -1,81 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.Autotag - -@section ControlsSection{ - -
- @{Html.BeginForm("autotag", "pdf", FormMethod.Post); - { -
- Click the button to view a PDF document generated by Essential PDF. - Please note that Adobe Reader or its equivalent is required to view the resultant document. -
-
- - - - -
-
- - - -     - -     - - - -
-
-
- - - - -
- -
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to create tagged PDF or accessible PDF from the scratch using auto tag feature.The auto tag feature will tag the document based on PDF element created in the document. -
-} -@section Meta{ - - } -@section Description{ -
- This feature can be used for the people who require assistive technologies when the electronic content is ready.The Essential PDF supports creating tagged PDF with Section 508 compliant.More information about the tagged PDF can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - Autotag Example - Syncfusion Demos - } -@section Header{ -

Example of Autotag in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/Autotag.cshtml.cs b/Pages/Pdf/Autotag.cshtml.cs deleted file mode 100644 index 5a6d9f9d..00000000 --- a/Pages/Pdf/Autotag.cshtml.cs +++ /dev/null @@ -1,177 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Pdf.Interactive; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class Autotag : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public Autotag(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string Browser, string accessibilityLevel) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - #region content string - - string toc = - "\r\n What can I do with C#? ..................................................................................................................................... 3 \r\n \r\n What is .NET? .................................................................................................................................................... 3 \r\n \r\n Writing, Running, and Deploying a C# Program .............................................................................................. 3 \r\n \r\n Starting a New Program..................................................................................................................................... 3"; - string Csharp = - "Welcome to C# Succinctly. True to the Succinctly series concept, this book is very focused on a single topic: the C# programming language. I might briefly mention some technologies that you can write with C# or explain how a feature fits into those technologies, but the whole of this book is about helping you become familiar with C# syntax. \r\n \r\n In this chapter, Ill start with some introductory information and then jump straight into a simple C# program."; - string whatToD0 = - "C# is a general purpose, object-oriented, component-based programming language. As a general purpose language, you have a number of ways to apply C# to accomplish many different tasks. You can build web applications with ASP.NET, desktop applications with Windows Presentation Foundation (WPF), or build mobile applications for Windows Phone. Other applications include code that runs in the cloud via Windows Azure, and iOS, Android, and Windows Phone support with the Xamarin platform. There might be times when you need a different language, like C or C++, to communicate with hardware or real-time systems. However, from a general programming perspective, you can do a lot with C#."; - string dotnet = - "The runtime is more formally named the Common Language Runtime (CLR). Programming languages that target the CLR compile to an Intermediate Language (IL). The CLR itself is a virtual machine that runs IL and provides many services such as memory management, garbage collection, exception management, security, and more.\r\n \r\n The Framework Class Library (FCL) is a set of reusable code that provides both general services and technology-specific platforms. The general services include essential types such as collections, cryptography, networking, and more. In addition to general classes, the FCL includes technology-specific platforms like ASP.NET, WPF, web services, and more. The value the FCL offers is to have common components available for reuse, saving time and money without needing to write that code yourself. \r\n \r\n There is a huge ecosystem of open-source and commercial software that relies on and supports .NET. If you visit CodePlex, GitHub, or any other open-source code repository site, you will see a multitude of projects written in C#. Commercial offerings include tools and services that help you build code, manage systems, and offer applications. Syncfusion is part of this ecosystem, offering reusable components for many of the .NET technologies I have mentioned."; - string prog = - "The previous section described plenty of great things you can do with C#, but most of them are so detailed that they require their own book. To stay focused on the C# programming language, the code in this book will be for the console application. A console application runs on the command line, which you will learn about in this section. You can write your code with any editor, but this book uses Visual Studio."; - - #endregion - - //Create a new PDF document. - - PdfDocument document = new PdfDocument(); - if (accessibilityLevel == "WTPDF") - { - document = new PdfDocument(PdfConformanceLevel.Pdf_A4); - document.FileStructure.Version = PdfVersion.Version2_0; - - } - else if (accessibilityLevel == "PDF_UA_2") - { - document.FileStructure.Version = PdfVersion.Version2_0; - } - //Auto Tag the document - - document.AutoTag = true; - document.DocumentInformation.Title = "AutoTag"; - - #region page1 - - //Add a page to the document. - - PdfPage page1 = document.Pages.Add(); - - //Load the image from the disk. - FileStream fileStream1 = - new FileStream(dataPath + "AutoTag.jpg", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - PdfBitmap image = new PdfBitmap(fileStream1); - - //Draw the image - - page1.Graphics.DrawImage(image, 0, 0, page1.GetClientSize().Width, page1.GetClientSize().Height - 20); - - #endregion - - #region page2 - - PdfPage page2 = document.Pages.Add(); - - FileStream stream = new FileStream(dataPath + "arial.ttf", FileMode.Open, FileAccess.Read); - PdfFont fontnormal = new PdfTrueTypeFont(stream, 9); - PdfFont fontTitle = new PdfTrueTypeFont(stream, 22); - PdfFont fontHead = new PdfTrueTypeFont(stream, 10); - PdfFont fontHead2 = new PdfTrueTypeFont(stream, 16); - - page2.Graphics.DrawString("Table of Contents", fontTitle, PdfBrushes.Black, new PointF(300, 0)); - page2.Graphics.DrawLine(new PdfPen(PdfBrushes.Black, 0.5f), new PointF(0, 40), - new PointF(page2.GetClientSize().Width, 40)); - - page2.Graphics.DrawString( - "Chapter 1 Introducing C# and .NET .............................................................................................................. 3 \r\n ", - fontHead, PdfBrushes.Black, new PointF(0, 60)); - page2.Graphics.DrawString(toc, fontnormal, PdfBrushes.Black, new PointF(0, 80)); - - #endregion - - #region page3 - - PdfPage page3 = document.Pages.Add(); - - page3.Graphics.DrawString("C# Succinctly", new PdfTrueTypeFont(stream, 32), PdfBrushes.Black, - new PointF(160, 0)); - - page3.Graphics.DrawLine(PdfPens.Black, new PointF(0, 40), new PointF(page3.GetClientSize().Width, 40)); - - page3.Graphics.DrawString("Chapter 1 Introducing C# and .NET", fontTitle, PdfBrushes.Black, - new PointF(160, 60)); - - - PdfTextElement element1 = new PdfTextElement(Csharp, fontnormal); - element1.Brush = new PdfSolidBrush(Color.Black); - element1.Draw(page3, new RectangleF(0, 100, page3.GetClientSize().Width, 80)); - - page3.Graphics.DrawString("What can I do with C#?", fontHead2, PdfBrushes.Black, new PointF(0, 180)); - PdfTextElement element2 = new PdfTextElement(whatToD0, fontnormal); - element2.Brush = new PdfSolidBrush(Color.Black); - element2.Draw(page3, new RectangleF(0, 210, page3.GetClientSize().Width, 80)); - - - page3.Graphics.DrawString("What is .Net", fontHead2, PdfBrushes.Black, new PointF(0, 300)); - PdfTextElement element3 = new PdfTextElement(dotnet, fontnormal); - element3.Brush = new PdfSolidBrush(Color.Black); - element3.Draw(page3, new RectangleF(0, 330, page3.GetClientSize().Width, 180)); - - - page3.Graphics.DrawString("Writing, Running, and Deploying a C# Program", fontHead2, PdfBrushes.Black, - new PointF(0, 520)); - PdfTextElement element4 = new PdfTextElement(prog, fontnormal); - element4.Brush = new PdfSolidBrush(Color.Black); - element4.Draw(page3, new RectangleF(0, 550, page3.GetClientSize().Width, 60)); - - FileStream fileStream2 = new FileStream(dataPath + "autotagSmall.jpg", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - PdfBitmap img = new PdfBitmap(fileStream2); - page3.Graphics.DrawImage(img, new PointF(0, 630)); - page3.Graphics.DrawString("Note: The code samples in this book can be downloaded at", fontnormal, - PdfBrushes.DarkBlue, new PointF(20, 630)); - page3.Graphics.DrawString("https://bitbucket.org/syncfusiontech/c-succinctly", fontnormal, PdfBrushes.Blue, - new PointF(20, 640)); - SizeF linkSize = fontnormal.MeasureString("https://bitbucket.org/syncfusiontech/c-succinctly"); - RectangleF rectangle = new RectangleF(20, 640, linkSize.Width, linkSize.Height); - - //Creates a new Uri Annotation - - PdfUriAnnotation uriAnnotation = - new PdfUriAnnotation(rectangle, "https://bitbucket.org/syncfusiontech/c-succinctly"); - uriAnnotation.Color = new PdfColor(255, 255, 255); - //Adds alternative description for annotation - uriAnnotation.Text = "annotation"; - //Adds this annotation to a new page - page3.Annotations.Add(uriAnnotation); - - #endregion - - - - //Saving the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - document.Save(ms); - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = accessibilityLevel == "WTPDF" ? "WTPDF.pdf" : "Autotag.pdf"; - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Pdf/Barcode.cshtml b/Pages/Pdf/Barcode.cshtml deleted file mode 100644 index 9d5d56c1..00000000 --- a/Pages/Pdf/Barcode.cshtml +++ /dev/null @@ -1,53 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.Barcode - -@section ControlsSection -{ -
- @{Html.BeginForm("barcode", "pdf", FormMethod.Post); - { -
-
-
- - - - - - - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
- -
-
-
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates the creation of barcode in the PDF document and does not requires barcode font for creating barcode.It supports both 1D and 2D barcode with many customizing properties. -
-} -@section Meta{ - - } -@section Description{ -
- This feature can be used in invoice, super markets, health care systems and more. - More information about the barcode can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - Barcode Example - Syncfusion Demos - } -@section Header{ -

Example of Barcode in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/Barcode.cshtml.cs b/Pages/Pdf/Barcode.cshtml.cs deleted file mode 100644 index 3e00468c..00000000 --- a/Pages/Pdf/Barcode.cshtml.cs +++ /dev/null @@ -1,439 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Barcode; -using Syncfusion.Pdf.Graphics; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class Barcode : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public Barcode(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string InsideBrowser) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - //Create a new instance of PdfDocument class. - PdfDocument document = new PdfDocument(); - - //Add a new page to the document. - PdfPage page = document.Pages.Add(); - - //Create Pdf graphics for the page - PdfGraphics g = page.Graphics; - - //Create a solid brush - PdfBrush brush = PdfBrushes.Black; - - #region 2D Barcode - - //Set the font - PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 15f, PdfFontStyle.Bold); - PdfPen pen = new PdfPen(brush, 0.5f); - float width = page.GetClientSize().Width; - float xPos = page.GetClientSize().Width / 2; - PdfStringFormat format = new PdfStringFormat(); - format.Alignment = PdfTextAlignment.Center; - // Draw String - g.DrawString("2D Barcodes", font, brush, new PointF(xPos, 10), format); - - #region QR Barcode - - font = new PdfStandardFont(PdfFontFamily.Helvetica, 12f, PdfFontStyle.Bold); - g.DrawString("QR Barcode", font, brush, new PointF(10, 65)); - PdfQRBarcode qrBarcode = new PdfQRBarcode(); - // Sets the Input mode to Binary mode - qrBarcode.InputMode = InputMode.BinaryMode; - // Automatically select the Version - qrBarcode.Version = QRCodeVersion.Auto; - // Set the Error correction level to high - qrBarcode.ErrorCorrectionLevel = PdfErrorCorrectionLevel.High; - // Set dimension for each block - qrBarcode.XDimension = 2; - qrBarcode.Text = "Syncfusion Essential Studio Enterprise edition $995"; - // Draw the QR barcode - qrBarcode.Draw(page, new PointF(25, 95)); - font = new PdfStandardFont(PdfFontFamily.TimesRoman, 9, PdfFontStyle.Regular); - g.DrawString("Input Type :Eight Bit Binary", font, brush, new PointF(250, 130)); - g.DrawString("Encoded Data : Syncfusion Essential Studio Enterprise edition $995", font, brush, - new PointF(250, 145)); - g.DrawLine(pen, new PointF(0, 205), new PointF(width, 205)); - - #endregion - - #region QRCode with logo - - font = new PdfStandardFont(PdfFontFamily.Helvetica, 12f, PdfFontStyle.Bold); - g.DrawString("QR Barcode with logo", font, brush, new PointF(10, 220)); - PdfQRBarcode qrbarcodelogo = new PdfQRBarcode(); - // Sets the Input mode to Binary mode - qrbarcodelogo.InputMode = InputMode.BinaryMode; - // Automatically select the Version - qrbarcodelogo.Version = QRCodeVersion.Auto; - // Set the Error correction level to high - qrbarcodelogo.ErrorCorrectionLevel = PdfErrorCorrectionLevel.High; - // Set dimension for each block - qrbarcodelogo.XDimension = 2; - qrbarcodelogo.Text = "https://www.syncfusion.com"; - //Set the logo image to QR barcode. - FileStream imageStream = new FileStream(dataPath + "qrcodelogo.png", FileMode.Open, FileAccess.Read); - //Create QR Barcode logo. - QRCodeLogo qRCodeLogo = new QRCodeLogo(imageStream); - //Set the QR barcode logo. - qrbarcodelogo.Logo = qRCodeLogo; - // Draw the QR barcode - qrbarcodelogo.Draw(page, new PointF(25, 250)); - font = new PdfStandardFont(PdfFontFamily.TimesRoman, 9, PdfFontStyle.Regular); - g.DrawString("Encoded Data : https://www.syncfusion.com", font, brush, new PointF(250, 270)); - g.DrawLine(pen, new PointF(0, 340), new PointF(width, 340)); - - #endregion - - #region Datamatrix - - font = new PdfStandardFont(PdfFontFamily.Helvetica, 12f, PdfFontStyle.Bold); - g.DrawString("DataMatrix Barcode", font, brush, new PointF(10, 355)); - PdfDataMatrixBarcode dataMatrixBarcode = new PdfDataMatrixBarcode("5575235 Win7 4GB 64bit 7Jun2010"); - // Set dimension for each block - dataMatrixBarcode.XDimension = 4; - // Draw the barcode - dataMatrixBarcode.Draw(page, new PointF(25, 385)); - font = new PdfStandardFont(PdfFontFamily.TimesRoman, 9, PdfFontStyle.Regular); - g.DrawString("Symbol Type : Square", font, brush, new PointF(250, 405)); - g.DrawString("Encoded Data : 5575235 Win7 4GB 64bit 7Jun2010", font, brush, new PointF(250, 425)); - pen = new PdfPen(brush, 0.5f); - g.DrawLine(pen, new PointF(0, 500), new PointF(width, 500)); - string text = "TYPE 3523 - ETWS/N FE- SDFHW 06/08"; - dataMatrixBarcode = new PdfDataMatrixBarcode(text); - // rectangular matrix - dataMatrixBarcode.Size = PdfDataMatrixSize.Size16x48; - dataMatrixBarcode.XDimension = 4; - dataMatrixBarcode.Draw(page, new PointF(25, 520)); - g.DrawString("Symbol Type : Rectangle", font, brush, new PointF(250, 540)); - g.DrawString("Encoded Data : " + text, font, brush, new PointF(250, 560)); - pen = new PdfPen(brush, 0.5f); - g.DrawLine(pen, new PointF(0, 620), new PointF(width, 620)); - font = new PdfStandardFont(PdfFontFamily.Helvetica, 12f, PdfFontStyle.Bold); - g.DrawString("PDF417 Barcode", font, brush, new PointF(10, 650)); - Pdf417Barcode pdf417Barcode = new Pdf417Barcode(); - pdf417Barcode.Text = "https://www.syncfusion.com/"; - pdf417Barcode.ErrorCorrectionLevel = Pdf417ErrorCorrectionLevel.Auto; - pdf417Barcode.XDimension = 1f; - pdf417Barcode.Size = new SizeF(200, 50); - pdf417Barcode.Draw(page, new PointF(25, 680)); - font = new PdfStandardFont(PdfFontFamily.TimesRoman, 9, PdfFontStyle.Regular); - g.DrawString("Encoded Data : https://www.syncfusion.com/", font, brush, new PointF(250, 700)); - - #endregion - - #endregion - - #region 1D Barcode - - page = document.Pages.Add(); - g = page.Graphics; - - //Set the font - font = new PdfStandardFont(PdfFontFamily.Helvetica, 15f, PdfFontStyle.Bold); - - // Draw String - g.DrawString("1D/Linear Barcodes", font, brush, new PointF(150, 10)); - - // Set string format. - format = new PdfStringFormat(); - format.WordWrap = PdfWordWrapType.Word; - - #region Code39 - - // Drawing Code39 barcode - PdfCode39Barcode barcode = new PdfCode39Barcode(); - - // Setting height of the barcode - barcode.BarHeight = 45; - barcode.Text = "CODE39$"; - - //Printing barcode on to the Pdf. - barcode.Draw(page, new PointF(25, 70)); - - font = new PdfStandardFont(PdfFontFamily.TimesRoman, 9, PdfFontStyle.Regular); - - g.DrawString("Type : Code39", font, brush, new PointF(215, 80)); - g.DrawString("Allowed Characters : 0-9, A-Z,a dash(-),a dot(.),$,/,+,%, SPACE", font, brush, - new PointF(215, 100)); - - g.DrawLine(pen, new PointF(0, 150), new PointF(width, 150)); - - #endregion - - #region Code39Extended - - // Drawing Code39Extended barcode - PdfCode39ExtendedBarcode barcodeExt = new PdfCode39ExtendedBarcode(); - - // Setting height of the barcode - barcodeExt.BarHeight = 45; - barcodeExt.Text = "CODE39Ext"; - - //Printing barcode on to the Pdf. - barcodeExt.Draw(page, new PointF(25, 200)); - - font = new PdfStandardFont(PdfFontFamily.TimesRoman, 9, PdfFontStyle.Regular); - - g.DrawString("Type : Code39Ext", font, brush, new PointF(215, 210)); - g.DrawString("Allowed Characters : 0-9 A-Z a-z ", font, brush, new PointF(215, 230)); - - g.DrawLine(pen, new PointF(0, 270), new PointF(width, 270)); - - #endregion - - #region Code11Barcode - - // Drawing Code11 barcode - PdfCode11Barcode barcode11 = new PdfCode11Barcode(); - - // Setting height of the barcode - barcode11.BarHeight = 45; - barcode11.Text = "012345678"; - barcode11.EncodeStartStopSymbols = true; - - //Printing barcode on to the Pdf. - barcode11.Draw(page, new PointF(25, 300)); - - font = new PdfStandardFont(PdfFontFamily.TimesRoman, 9, PdfFontStyle.Regular); - - g.DrawString("Type : Code 11", font, brush, new PointF(215, 310)); - g.DrawString("Allowed Characters : 0-9, a dash(-) ", font, brush, new PointF(215, 330)); - - g.DrawLine(pen, new PointF(0, 370), new PointF(width, 370)); - - #endregion - - #region Codabar - - // Drawing CodaBarcode - PdfCodabarBarcode codabar = new PdfCodabarBarcode(); - - // Setting height of the barcode - codabar.BarHeight = 45; - codabar.Text = "0123"; - - //Printing barcode on to the Pdf. - codabar.Draw(page, new PointF(25, 400)); - - font = new PdfStandardFont(PdfFontFamily.TimesRoman, 9, PdfFontStyle.Regular); - - g.DrawString("Type : Codabar", font, brush, new PointF(215, 410)); - g.DrawString("Allowed Characters : A,B,C,D,0-9,-$,:,/,a dot(.),+ ", font, brush, new PointF(215, 430)); - - g.DrawLine(pen, new PointF(0, 470), new PointF(width, 470)); - - #endregion - - #region Code32 - - PdfCode32Barcode code32 = new PdfCode32Barcode(); - - code32.Font = font; - - // Setting height of the barcode - code32.BarHeight = 45; - code32.Text = "01234567"; - code32.TextDisplayLocation = TextLocation.Bottom; - code32.EnableCheckDigit = true; - code32.ShowCheckDigit = true; - - //Printing barcode on to the Pdf. - code32.Draw(page, new PointF(25, 500)); - - g.DrawString("Type : Code32", font, brush, new PointF(215, 500)); - g.DrawString("Allowed Characters : 1 2 3 4 5 6 7 8 9 0 ", font, brush, new PointF(215, 520)); - - g.DrawLine(pen, new PointF(0, 580), new PointF(width, 580)); - - #endregion - - #region Code93 - - PdfCode93Barcode code93 = new PdfCode93Barcode(); - - // Setting height of the barcode - code93.BarHeight = 45; - code93.Text = "ABC 123456"; - - //Printing barcode on to the Pdf. - code93.Draw(page, new PointF(25, 600)); - - g.DrawString("Type : Code93", font, brush, new PointF(215, 600)); - g.DrawString( - "Allowed Characters : 1 2 3 4 5 6 7 8 9 0 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z - . $ / + % SPACE ", - font, brush, new RectangleF(215, 620, 300, 200), format); - - g.DrawLine(pen, new PointF(0, 680), new PointF(width, 680)); - - #endregion - - #region Code93Extended - - PdfCode93ExtendedBarcode code93ext = new PdfCode93ExtendedBarcode(); - - //Setting height of the barcode - code93ext.BarHeight = 45; - code93ext.EncodeStartStopSymbols = true; - code93ext.Text = "(abc) 123456"; - - //Printing barcode on to the Pdf. - page = document.Pages.Add(); - code93ext.Draw(page, new PointF(25, 50)); - - g = page.Graphics; - g.DrawString("Type : Code93 Extended", font, brush, new PointF(200, 50)); - g.DrawString("Allowed Characters : All 128 ASCII characters ", font, brush, new PointF(200, 70)); - - g.DrawLine(pen, new PointF(0, 120), new PointF(width, 120)); - - #endregion - - #region Code128 - - PdfCode128ABarcode barcode128A = new PdfCode128ABarcode(); - - // Setting height of the barcode - barcode128A.BarHeight = 45; - barcode128A.Text = "ABCD 12345"; - barcode128A.EnableCheckDigit = true; - barcode128A.EncodeStartStopSymbols = true; - barcode128A.ShowCheckDigit = true; - - //Printing barcode on to the Pdf. - barcode128A.Draw(page, new PointF(25, 135)); - - g.DrawString("Type : Code128 A", font, brush, new PointF(200, 135)); - g.DrawString( - "Allowed Characters : NUL (0x00) SOH (0x01) STX (0x02) ETX (0x03) EOT (0x04) ENQ (0x05) ACK (0x06) BEL (0x07) BS (0x08) HT (0x09) LF (0x0A) VT (0x0B) FF (0x0C) CR (0x0D) SO (0x0E) SI (0x0F) DLE (0x10) DC1 (0x11) DC2 (0x12) DC3 (0x13) DC4 (0x14) NAK (0x15) SYN (0x16) ETB (0x17) CAN (0x18) EM (0x19) SUB (0x1A) ESC (0x1B) FS (0x1C) GS (0x1D) RS (0x1E) US (0x1F) SPACE (0x20) \" ! # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ / ]^ _ ", - font, brush, new RectangleF(200, 155, 300, 200), format); - - g.DrawLine(pen, new PointF(0, 250), new PointF(width, 250)); - - PdfCode128BBarcode barcode128B = new PdfCode128BBarcode(); - - // Setting height of the barcode - barcode128B.BarHeight = 45; - barcode128B.Text = "12345 abcd"; - barcode128B.EnableCheckDigit = true; - barcode128B.EncodeStartStopSymbols = true; - barcode128B.ShowCheckDigit = true; - - //Printing barcode on to the Pdf. - barcode128B.Draw(page, new PointF(25, 280)); - - g.DrawString("Type : Code128 B", font, brush, new PointF(200, 280)); - g.DrawString( - "Allowed Characters : SPACE (0x20) ! \" # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ / ]^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ DEL (\x7F) ", - font, brush, new RectangleF(200, 300, 300, 200), format); - - g.DrawLine(pen, new PointF(0, 350), new PointF(width, 350)); - - PdfCode128CBarcode barcode128C = new PdfCode128CBarcode(); - - // Setting height of the barcode - barcode128C.BarHeight = 45; - barcode128C.Text = "001122334455"; - barcode128C.EnableCheckDigit = true; - barcode128C.EncodeStartStopSymbols = true; - barcode128C.ShowCheckDigit = true; - - //Printing barcode on to the Pdf. - barcode128C.Draw(page, new PointF(25, 370)); - - g.DrawString("Type : Code128 C", font, brush, new PointF(200, 370)); - g.DrawString("Allowed Characters : 0 1 2 3 4 5 6 7 8 9 ", font, brush, new PointF(200, 390)); - - g.DrawLine(pen, new PointF(0, 440), new PointF(width, 440)); - - #endregion - - #region UPC-A - - // Drawing UPC-A barcode - PdfCodeUpcBarcode upcBarcode = new PdfCodeUpcBarcode(); - - // Setting height of the barcode - upcBarcode.BarHeight = 45; - upcBarcode.Text = "01234567890"; - - //Printing barcode on to the Pdf. - upcBarcode.Draw(page, new PointF(25, 460)); - - font = new PdfStandardFont(PdfFontFamily.TimesRoman, 9, PdfFontStyle.Regular); - - g.DrawString("Type : UPC-A", font, brush, new PointF(200, 460)); - g.DrawString("Allowed Characters : 0-9", font, brush, new PointF(200, 480)); - - g.DrawLine(pen, new PointF(0, 530), new PointF(width, 530)); - - #endregion - - #region EAN13 - - PdfEan13Barcode ean13barcode = new PdfEan13Barcode(); - ean13barcode.Text = "012345678910"; - ean13barcode.Draw(page, new RectangleF(15, 550, 150, 50)); - font = new PdfStandardFont(PdfFontFamily.TimesRoman, 9, PdfFontStyle.Regular); - - g.DrawString("Type : EAN-13", font, brush, new PointF(200, 550)); - g.DrawString("Allowed Characters : 0-9", font, brush, new PointF(200, 570)); - - g.DrawLine(pen, new PointF(0, 620), new PointF(width, 620)); - - #endregion - - #region EAN8 - - PdfEan8Barcode ean8barcode = new PdfEan8Barcode(); - ean8barcode.Text = "0123456"; - ean8barcode.Draw(page, new PointF(25, 640)); - font = new PdfStandardFont(PdfFontFamily.TimesRoman, 9, PdfFontStyle.Regular); - - g.DrawString("Type : EAN-8", font, brush, new PointF(200, 640)); - g.DrawString("Allowed Characters : 0-9", font, brush, new PointF(200, 660)); - - g.DrawLine(pen, new PointF(0, 720), new PointF(width, 720)); - - #endregion - - #endregion - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - - document.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - document.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "Barcode.pdf"; - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Pdf/Booklet.cshtml b/Pages/Pdf/Booklet.cshtml deleted file mode 100644 index 2a90aa2a..00000000 --- a/Pages/Pdf/Booklet.cshtml +++ /dev/null @@ -1,77 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.Booklet - -@section ControlsSection{ -
- @{Html.BeginForm("booklet", "pdf", FormMethod.Post); - { -
- - - - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-

- @Html.Label("", (string)ViewData["Error"]) -

- -
-
- - - - -
- - Double Side -
-
-
-
-
-
-
-
-
-
-
- - - - -
-
- -
-
-
-
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to create a booklet from the existing PDF document. -
-} -@section Meta{ - - } -@section Description{ -
- This feature can be used to print the PDF document in book format. -
-} -@section Title{ - ASP.NET Core PDF library - Booklet Example - Syncfusion Demos - } -@section Header{ -

Example of Booklet in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/Booklet.cshtml.cs b/Pages/Pdf/Booklet.cshtml.cs deleted file mode 100644 index f81b60df..00000000 --- a/Pages/Pdf/Booklet.cshtml.cs +++ /dev/null @@ -1,81 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Parsing; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class Booklet : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public Booklet(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string PageHeight, string PageWidth, string CheckBoxDoubleSide, string InsideBrowser) - { - try - { - if (String.IsNullOrEmpty(PageWidth) || String.IsNullOrEmpty(PageHeight)) - { - - ViewData["Error"] = "Please ensure the width and height for the page to be updated."; - } - else - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Read the file as stream - FileStream file = new FileStream(dataPath + "Essential_Pdf.pdf", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - - //Load a PDF document - PdfLoadedDocument ldoc = new PdfLoadedDocument(file); - - //Create booklet with two sides - PdfDocument pdf = PdfBookletCreator.CreateBooklet(ldoc, - new SizeF(float.Parse(PageWidth), float.Parse(PageHeight)), - (CheckBoxDoubleSide == "DoubleSide") ? true : false); - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - pdf.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the PDF document. - pdf.Close(true); - ldoc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "Booklet.pdf"; - return fileStreamResult; - - } - } - catch (Exception ex) - { - ViewData["Error"] = ex.ToString(); - } - - return null; - // return View(); - } -} \ No newline at end of file diff --git a/Pages/Pdf/Bookmarks.cshtml b/Pages/Pdf/Bookmarks.cshtml deleted file mode 100644 index f58a6500..00000000 --- a/Pages/Pdf/Bookmarks.cshtml +++ /dev/null @@ -1,52 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.Bookmarks - -@section ControlsSection{ - -
- @{Html.BeginForm("bookmarks", "pdf", FormMethod.Post); - { -
-
-
- - - - - - - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
- -
-
-
-
- Html.EndForm(); - }} -
-} -@section ActionDescription{ -
- This sample demonstrates how to add bookmark with the different style in the document.  - It is also possible to insert, remove, change text appearance, change destination and more from the PDF document. -
-} -@section Meta{ - - } -@section Description{ -
- More information about the bookmarks can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - Bookmarks Example - Syncfusion Demos - } -@section Header{ -

Example of Bookmarks in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/Bookmarks.cshtml.cs b/Pages/Pdf/Bookmarks.cshtml.cs deleted file mode 100644 index ab7de259..00000000 --- a/Pages/Pdf/Bookmarks.cshtml.cs +++ /dev/null @@ -1,130 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Pdf.Interactive; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class Bookmarks : PageModel -{ - public void OnGet() - { - - } - - [HttpPost] - public ActionResult OnPost(string Browser) - { - //Creates a new PDF document. - PdfDocument document = new PdfDocument(); - - //Set the Font - PdfStandardFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 10f); - - //Set PdfBrush - PdfBrush brush = new PdfSolidBrush(Color.Black); - - for (int i = 1; i <= 3; i++) - { - PdfPage pages = document.Pages.Add(); - - //Add bookmark in PDF document - PdfBookmark bookmark = AddBookmark1(document, pages, "Chapter " + i, new PointF(10, 10), font); - - bookmark.Color = Color.Red; - - //Add sections to bookmark - PdfBookmark section1 = AddSection1(bookmark, pages, "Section " + i + ".1", new PointF(30, 30), false, font); - section1.Color = Color.Green; - PdfBookmark section2 = - AddSection1(bookmark, pages, "Section " + i + ".2", new PointF(30, 400), false, font); - section2.Color = Color.Green; - - //Add subsections to section - PdfBookmark subsection1 = - AddSection1(section1, pages, "Paragraph " + i + ".1.1", new PointF(50, 50), true, font); - subsection1.Color = Color.Blue; - PdfBookmark subsection2 = - AddSection1(section1, pages, "Paragraph " + i + ".1.2", new PointF(50, 150), true, font); - subsection2.Color = Color.Blue; - PdfBookmark subsection3 = - AddSection1(section1, pages, "Paragraph " + i + ".1.3", new PointF(50, 250), true, font); - subsection3.Color = Color.Blue; - PdfBookmark subsection4 = - AddSection1(section2, pages, "Paragraph " + i + ".2.1", new PointF(50, 420), true, font); - subsection4.Color = Color.Blue; - PdfBookmark subsection5 = - AddSection1(section2, pages, "Paragraph " + i + ".2.2", new PointF(50, 560), true, font); - subsection5.Color = Color.Blue; - PdfBookmark subsection6 = - AddSection1(section2, pages, "Paragraph " + i + ".2.3", new PointF(50, 680), true, font); - subsection6.Color = Color.Blue; - } - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - - document.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - document.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "Bookmarks.pdf"; - return fileStreamResult; - } - - # region Methods - public PdfBookmark AddBookmark1(PdfDocument document,PdfPage page, string title, PointF point, PdfFont font) - { - - PdfGraphics graphics = page.Graphics; - - //Add bookmark in PDF document - PdfBookmark bookmarks = document.Bookmarks.Add(title); - - PdfBrush brush = new PdfSolidBrush(Color.Red); - - //Draw the content in the PDF page - graphics.DrawString(title, font, brush, new PointF(point.X, point.Y)); - - bookmarks.Destination = new PdfDestination(page); - bookmarks.Destination.Location = point; - - return bookmarks; - } - public PdfBookmark AddSection1(PdfBookmark bookmark, PdfPage page, string title, PointF point, bool isSubSection, PdfFont font) - { - PdfGraphics graphics = page.Graphics; - //Add bookmark in PDF document - PdfBookmark bookmarks = bookmark.Add(title); - - PdfBrush brush = new PdfSolidBrush(Color.Green); - - if (bookmark.Title.StartsWith("Section")) - { - brush = new PdfSolidBrush(Color.Blue); - } - - //Draw the content in the PDF page - graphics.DrawString(title, font, brush, new PointF(point.X, point.Y)); - - bookmarks.Destination = new PdfDestination(page); - bookmarks.Destination.Location = point; - - return bookmarks; - } - #endregion -} \ No newline at end of file diff --git a/Pages/Pdf/BulletsandLists.cshtml b/Pages/Pdf/BulletsandLists.cshtml deleted file mode 100644 index ff3a2924..00000000 --- a/Pages/Pdf/BulletsandLists.cshtml +++ /dev/null @@ -1,57 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.BulletsandLists - -@section ControlsSection{ -
- @{Html.BeginForm("bulletsandlists", "pdf", FormMethod.Post); - { -
-
-
-
- - - - - - - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
- -
-
- - -
-
-
-
- - Html.EndForm(); - }} - -
-} -@section ActionDescription{ -
- This sample demonstrates how to list the content in ordered and unordered list. The ordered list can be number or alphabets and the unordered list can be bullets, circles, and images. -
-} -@section Meta{ - - } -@section Description{ -
- -
-} -@section Title{ - ASP.NET Core PDF library - Bullets and Lists Example - Syncfusion Demos - } -@section Header{ -

Example of Bullets and Lists in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/BulletsandLists.cshtml.cs b/Pages/Pdf/BulletsandLists.cshtml.cs deleted file mode 100644 index 6ff7b033..00000000 --- a/Pages/Pdf/BulletsandLists.cshtml.cs +++ /dev/null @@ -1,141 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Pdf.Lists; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class BulletsandLists : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public BulletsandLists(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string InsideBrowser) - { - //Create a new PDf document - PdfDocument document = new PdfDocument(); - - //Add a page - PdfPage page = document.Pages.Add(); - PdfGraphics graphics = page.Graphics; - - //Create a unordered list - PdfUnorderedList list = new PdfUnorderedList(); - - //Set the marker style - list.Marker.Style = PdfUnorderedMarkerStyle.Disk; - - //Create a font and write title - PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 14, PdfFontStyle.Bold); - graphics.DrawString("List Features", font, PdfBrushes.DarkBlue, new PointF(225, 10)); - - string[] products = - { "Tools", "Grid", "Chart", "Edit", "Diagram", "XlsIO", "Grouping", "Calculate", "PDF", "HTMLUI", "DocIO" }; - string[] IO = { "XlsIO", "PDF", "DocIO" }; - - font = new PdfStandardFont(PdfFontFamily.Helvetica, 12, PdfFontStyle.Regular); - graphics.DrawString( - "This sample demonstrates various features of bullets and lists. A list can be ordered and Unordered. Essential PDF provides support for creating and formatting ordered and unordered lists.", - font, PdfBrushes.Black, - new RectangleF(0, 50, page.Graphics.ClientSize.Width, page.Graphics.ClientSize.Height)); - - //Create string format - PdfStringFormat format = new PdfStringFormat(); - format.LineSpacing = 10f; - - font = new PdfStandardFont(PdfFontFamily.TimesRoman, 10, PdfFontStyle.Bold); - - //Apply formattings to list - list.Font = font; - list.StringFormat = format; - - //Set list indent - list.Indent = 10; - - //Add items to the list - list.Items.Add("List of Essential Studio products"); - list.Items.Add("IO products"); - - //Set text indent - list.TextIndent = 10; - - //Create Ordered list as sublist of parent list - PdfOrderedList subList = new PdfOrderedList(); - subList.Marker.Brush = PdfBrushes.Black; - subList.Indent = 20; - list.Items[0].SubList = subList; - - //Set format for sub list - font = new PdfStandardFont(PdfFontFamily.TimesRoman, 10, PdfFontStyle.Italic); - subList.Font = font; - subList.StringFormat = format; - foreach (string s in products) - { - //Add items - subList.Items.Add(string.Concat("Essential ", s)); - } - - //Create unorderd sublist for the second item of parent list - PdfUnorderedList SubsubList = new PdfUnorderedList(); - SubsubList.Marker.Brush = PdfBrushes.Black; - SubsubList.Indent = 20; - list.Items[1].SubList = SubsubList; - - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Read the file - FileStream file = new FileStream(dataPath + "logo.png", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - PdfImage image = PdfImage.FromStream(file); - font = new PdfStandardFont(PdfFontFamily.TimesRoman, 10, PdfFontStyle.Regular); - SubsubList.Font = font; - SubsubList.StringFormat = format; - - //Add subitems - SubsubList.Items.Add( - "Essential PDF: It is a .NET library with the capability to produce Adobe PDF files. It features a full-fledged object model for the easy creation of PDF files from any .NET language. It does not use any external libraries and is built from scratch in C#. It can be used on the server side (ASP.NET or any other environment) or with Windows Forms applications. Essential PDF supports many features for creating a PDF document. Drawing Text, Images, Shapes, etc can be drawn easily in the PDF document."); - SubsubList.Items.Add( - "Essential DocIO: It is a .NET library that can read and write Microsoft Word files. It features a full-fledged object model similar to the Microsoft Office COM libraries. It does not use COM interop and is built from scratch in C#. It can be used on systems that do not have Microsoft Word installed. Here are some of the most common questions that arise regarding the usage and functionality of Essential DocIO."); - SubsubList.Items.Add( - "Essential XlsIO: It is a .NET library that can read and write Microsoft Excel files (BIFF 8 format). It features a full-fledged object model similar to the Microsoft Office COM libraries. It does not use COM interop and is built from scratch in C#. It can be used on systems that do not have Microsoft Excel installed, making it an excellent reporting engine for tabular data. "); - - //Set image as marker - SubsubList.Marker.Image = image; - - //Draw list - list.Draw(page, new RectangleF(0, 130, page.Graphics.ClientSize.Width, page.Graphics.ClientSize.Height)); - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - document.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the PDF document. - document.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "BulletsAndLists.pdf"; - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Pdf/Conformance.cshtml b/Pages/Pdf/Conformance.cshtml deleted file mode 100644 index cf84526c..00000000 --- a/Pages/Pdf/Conformance.cshtml +++ /dev/null @@ -1,68 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.Conformance - -@using Syncfusion.EJ2 -@{ var Title = "Essential PDF :Conformance : Syncfusion"; } - -@section ControlsSection - { -
- @{Html.BeginForm("conformance", "pdf", FormMethod.Post); - { -
- Click the button to view a PDF/A conformance document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
-
-
- - - -
- - - - - - - -
- - - -
 
-
- -
-
-
-
- - Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates various PDF conformance support in Essential PDF. -
-} -@section Meta{ - -} -@section Description{ -
- This feature can be used for long term archiving and standardization. More information about conformance can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - PDF Conformance Example - Syncfusion Demos -} -@section Header{ -

Example of PDF Conformance in ASP.NET Core PDF Library

-} \ No newline at end of file diff --git a/Pages/Pdf/Conformance.cshtml.cs b/Pages/Pdf/Conformance.cshtml.cs deleted file mode 100644 index 003c7acb..00000000 --- a/Pages/Pdf/Conformance.cshtml.cs +++ /dev/null @@ -1,155 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf.Interactive; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class Conformance : PageModel -{ - public string[] data; - public void OnGet() - { - data = new string[] - { - "PDF/A-1a", "PDF/A-1b", "PDF/A-2a", "PDF/A-2b", "PDF/A-2u", "PDF/A-3a", "PDF/A-3b", "PDF/A-3u", "PDF/A-4", - "PDF/A-4e", "PDF/A-4f" - }; - } - private readonly IWebHostEnvironment _hostingEnvironment; - public Conformance(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - [HttpPost] - public ActionResult OnPost(string InsideBrowser, string conformance) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - PdfDocument document = null; - - if (conformance == "PDF/A-1a") - { - //Create a new document with PDF/A standard. - document = new PdfDocument(PdfConformanceLevel.Pdf_A1A); - } - else if (conformance == "PDF/A-1b") - { - //Create a new document with PDF/A standard. - document = new PdfDocument(PdfConformanceLevel.Pdf_A1B); - } - else if (conformance == "PDF/A-2a") - { - //Create a new document with PDF/A standard. - document = new PdfDocument(PdfConformanceLevel.Pdf_A2A); - } - else if (conformance == "PDF/A-2b") - { - //Create a new document with PDF/A standard. - document = new PdfDocument(PdfConformanceLevel.Pdf_A2B); - } - else if (conformance == "PDF/A-2u") - { - //Create a new document with PDF/A standard. - document = new PdfDocument(PdfConformanceLevel.Pdf_A2U); - } - else if (conformance == "PDF/A-4") - { - //Create a new document with PDF/A standard. - document = new PdfDocument(PdfConformanceLevel.Pdf_A4); - } - else if (conformance == "PDF/A-4e") - { - //Create a new document with PDF/A standard. - document = new PdfDocument(PdfConformanceLevel.Pdf_A4E); - } - else - { - if (conformance == "PDF/A-3a") - { - document = new PdfDocument(PdfConformanceLevel.Pdf_A3A); - } - else if (conformance == "PDF/A-3b") - { - document = new PdfDocument(PdfConformanceLevel.Pdf_A3B); - } - else if (conformance == "PDF/A-3u") - { - document = new PdfDocument(PdfConformanceLevel.Pdf_A3U); - } - else if (conformance == "PDF/A-4f") - { - //Create PDF/A-4F conformance. - document = new PdfDocument(PdfConformanceLevel.Pdf_A4F); - } - - //Read the file - FileStream file = new FileStream(dataPath + "Text1.txt", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - - //Creates an attachment - PdfAttachment attachment = new PdfAttachment("Text1.txt", file); - - attachment.Relationship = PdfAttachmentRelationship.Alternative; - attachment.ModificationDate = DateTime.Now; - - attachment.Description = "PDF_A"; - - attachment.MimeType = "application/xml"; - - document.Attachments.Add(attachment); - } - - - //Add a page to the document. - PdfPage page = document.Pages.Add(); - //Create PDF graphics for the page. - PdfGraphics graphics = page.Graphics; - - FileStream imageStream = new FileStream(dataPath + "AdventureCycle.jpg", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - //Load the image from the disk. - PdfImage img = PdfImage.FromStream(imageStream); - //Draw the image in the specified location and size. - graphics.DrawImage(img, new RectangleF(150, 30, 200, 100)); - - - //Create font - FileStream fontFileStream = - new FileStream(dataPath + "arial.ttf", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - PdfFont font = new PdfTrueTypeFont(fontFileStream, 14); - - - PdfTextElement textElement = new PdfTextElement( - "Adventure Works Cycles, the fictitious company on which the AdventureWorks sample databases are based," + - " is a large, multinational manufacturing company. The company manufactures and sells metal and composite bicycles to North American, " + - "European and Asian commercial markets. While its base operation is located in Bothell, Washington with 290 employees, several regional" + - " sales teams are located throughout their market base.") - { - Font = font - }; - PdfLayoutResult layoutResult = textElement.Draw(page, - new RectangleF(0, 150, page.GetClientSize().Width, page.GetClientSize().Height)); - - MemoryStream stream = new MemoryStream(); - document.Save(stream); - document.Close(true); - stream.Position = 0; - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/pdf"); - fileStreamResult.FileDownloadName = "PDF_A.pdf"; - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Pdf/Customtag.cshtml b/Pages/Pdf/Customtag.cshtml deleted file mode 100644 index 583ec8bd..00000000 --- a/Pages/Pdf/Customtag.cshtml +++ /dev/null @@ -1,52 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.Customtag - -@section ControlsSection{ - -
- @{Html.BeginForm("customtag", "pdf", FormMethod.Post); - { -
-
-
- - - - - - - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
- -
-
-
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to create tagged PDF or accessible PDF from the scratch with custom tags. -
-} -@section Meta{ - - } -@section Description{ -
- This feature can be used for the people who require assistive technologies when the electronic content is ready.The Essential PDF supports creating tagged PDF with Section 508 compliant.More information about the tagged PDF can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - Customtag Example - Syncfusion Demos - } -@section Header{ -

Example of Customtag in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/Customtag.cshtml.cs b/Pages/Pdf/Customtag.cshtml.cs deleted file mode 100644 index e0aa1bc9..00000000 --- a/Pages/Pdf/Customtag.cshtml.cs +++ /dev/null @@ -1,335 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Pdf.Grid; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class Customtag : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public Customtag(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string Browser) - { - - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - FileStream stream = new FileStream(dataPath + "arial.ttf", FileMode.Open, FileAccess.Read); - PdfFont fontnormal = new PdfTrueTypeFont(stream, 9); - PdfFont fontTitle = new PdfTrueTypeFont(stream, 22); - PdfFont fontHead = new PdfTrueTypeFont(stream, 10); - PdfFont fontHead2 = new PdfTrueTypeFont(stream, 16); - - #region content string - - string pdfChapter = - "We�ll begin with a conceptual overview of a simple PDF document. This chapter is designed to be a brief orientation before diving in and creating a real document from scratch \r\n \r\n A PDF file can be divided into four parts: a header, body, cross-reference table, and trailer. The header marks the file as a PDF, the body defines the visible document, the cross-reference table lists the location of everything in the file, and the trailer provides instructions for how to start reading the file."; - string header = - "The header is simply a PDF version number and an arbitrary sequence of binary data.The binary data prevents na�ve applications from processing the PDF as a text file. This would result in a corrupted file, since a PDF typically consists of both plain text and binary data (e.g., a binary font file can be directly embedded in a PDF)."; - string body = - "The page tree serves as the root of the document. In the simplest case, it is just a list of the pages in the document. Each page is defined as an independent entity with metadata (e.g., page dimensions) and a reference to its resources and content, which are defined separately. Together, the page tree and page objects create the �paper� that composes the document.\r\n \r\n Resources are objects that are required to render a page. For example, a single font is typically used across several pages, so storing the font information in an external resource is much more efficient. A content object defines the text and graphics that actually show up on the page. Together, content objects and resources define theappearance of an individual page. \r\n \r\n Finally, the document�s catalog tells applications where to start reading the document. Often, this is just a pointer to the root page tree."; - string resource = - "The third object is a resource defining a font configuration. \r\n \r\n The /Font key contains a whole dictionary, opposed to the name/value pairs we�ve seen previously (e.g., /Type /Page). The font we configured is called /F0, and the font face we selected is /Times-Roman. The /Subtype is the format of the font file, and /Type1 refers to the PostScript type 1 file format. The specification defines 14 �standard� fonts that all PDF applications should support."; - string crossRef = - "After the header and the body comes the cross-reference table. It records the byte location of each object in the body of the file. This enables random-access of the document, so when rendering a page, only the objects required for that page are read from the file. This makes PDFs much faster than their PostScript predecessors, which had to read in the entire file before processing it."; - string trailer = - "Finally, we come to the last component of a PDF document. The trailer tells applications how to start reading the file. At minimum, it contains three things: \r\n 1. A reference to the catalog which links to the root of the document. \r\n 2. The location of the cross-reference table. \r\n 3. The size of the cross-reference table. \r\n \r\n Since a trailer is all you need to begin processing a document, PDFs are typically read back-to-front: first, the end of the file is found, and then you read backwards until you arrive at the beginning of the trailer. After that, you should have all the information you need to load any page in the PDF."; - - #endregion - - //Create a new PDF document. - - PdfDocument document = new PdfDocument(); - - document.DocumentInformation.Title = "CustomTag"; - - #region page1 - - //Add a page to the document. - - PdfPage page1 = document.Pages.Add(); - - //Load the image from the disk. - FileStream fileStream1 = - new FileStream(dataPath + "CustomTag.jpg", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - PdfBitmap image = new PdfBitmap(fileStream1); - - PdfStructureElement imageElement = new PdfStructureElement(PdfTagType.Figure); - imageElement.AlternateText = "PDF Succintly image"; - //adding tag to the PDF image - image.PdfTag = imageElement; - //Draw the image - page1.Graphics.DrawImage(image, 0, 0, page1.GetClientSize().Width, page1.GetClientSize().Height - 20); - - #endregion - - - #region page2 - - PdfPage page2 = document.Pages.Add(); - - PdfStructureElement hTextElement1 = new PdfStructureElement(PdfTagType.HeadingLevel1); - PdfStructureElement headingFirstLevel = new PdfStructureElement(PdfTagType.HeadingLevel2); - PdfStructureElement hTextElementLevel3 = new PdfStructureElement(PdfTagType.HeadingLevel3); - headingFirstLevel.Parent = hTextElement1; - hTextElementLevel3.Parent = hTextElement1; - - PdfTextElement headerElement1 = - new PdfTextElement("Chapter 1 Conceptual Overview", fontTitle, PdfBrushes.Black); - - headerElement1.PdfTag = headingFirstLevel; - headerElement1.Draw(page2, new PointF(100, 0)); - - //Initialize the structure element with tag type paragraph. - - PdfStructureElement textElement1 = new PdfStructureElement(PdfTagType.Paragraph); - textElement1.Parent = headingFirstLevel; - textElement1.ActualText = pdfChapter; - - PdfTextElement element1 = new PdfTextElement(pdfChapter, fontnormal); - element1.PdfTag = textElement1; - element1.Brush = new PdfSolidBrush(Color.Black); - element1.Draw(page2, new RectangleF(0, 40, page2.GetClientSize().Width, 70)); - - PdfStructureElement hTextElement2 = new PdfStructureElement(PdfTagType.HeadingLevel2); - hTextElement2.Parent = hTextElement1; - hTextElement2.ActualText = "Header"; - - PdfTextElement headerElement2 = new PdfTextElement("Header", fontHead2, PdfBrushes.Black); - headerElement2.PdfTag = hTextElement2; - headerElement2.Draw(page2, new PointF(0, 140)); - - PdfStructureElement textElement2 = new PdfStructureElement(PdfTagType.Paragraph); - textElement2.Parent = hTextElementLevel3; - textElement2.ActualText = header; - - PdfTextElement element2 = new PdfTextElement(header, fontnormal); - element2.PdfTag = textElement2; - element2.Brush = new PdfSolidBrush(Color.Black); - element2.Draw(page2, new RectangleF(0, 170, page2.GetClientSize().Width, 40)); - - - PdfStructureElement hTextElement3 = new PdfStructureElement(PdfTagType.HeadingLevel2); - hTextElement3.Parent = hTextElement1; - hTextElement3.ActualText = "Body"; - - PdfTextElement headerElement3 = new PdfTextElement("Body", fontHead2, PdfBrushes.Black); - headerElement3.PdfTag = hTextElement3; - headerElement3.Draw(page2, new PointF(0, 210)); - - PdfStructureElement textElement3 = new PdfStructureElement(PdfTagType.Paragraph); - textElement3.Parent = hTextElementLevel3; - textElement3.ActualText = body; - - PdfTextElement element3 = new PdfTextElement(body, fontnormal); - element3.PdfTag = textElement3; - element3.Brush = new PdfSolidBrush(Color.Black); - element3.Draw(page2, new RectangleF(0, 240, page2.GetClientSize().Width, 120)); - - PdfStructureElement hTextElement6 = new PdfStructureElement(PdfTagType.HeadingLevel2); - hTextElement6.Parent = hTextElement1; - hTextElement6.ActualText = "Cross-Reference Table"; - - PdfTextElement headerElement5 = new PdfTextElement("Cross-Reference Table", fontHead2, PdfBrushes.Black); - headerElement5.PdfTag = hTextElement6; - headerElement5.Draw(page2, new PointF(0, 380)); - - PdfStructureElement textElement6 = new PdfStructureElement(PdfTagType.Paragraph); - textElement6.Parent = hTextElementLevel3; - textElement6.ActualText = crossRef; - - PdfTextElement element6 = new PdfTextElement(crossRef, fontnormal); - element6.PdfTag = textElement6; - element6.Brush = new PdfSolidBrush(Color.Black); - element6.Draw(page2, new RectangleF(0, 410, page2.GetClientSize().Width, 50)); - - PdfStructureElement hTextElement7 = new PdfStructureElement(PdfTagType.HeadingLevel2); - hTextElement7.Parent = hTextElement1; - hTextElement7.ActualText = "Trailer"; - - PdfTextElement headerElement6 = new PdfTextElement("Trailer", fontHead2, PdfBrushes.Black); - headerElement6.PdfTag = hTextElement7; - headerElement6.Draw(page2, new PointF(0, 470)); - - PdfStructureElement textElement7 = new PdfStructureElement(PdfTagType.Paragraph); - textElement7.Parent = hTextElementLevel3; - textElement7.ActualText = trailer; - - PdfTextElement element7 = new PdfTextElement(trailer, fontnormal); - element7.PdfTag = textElement7; - element7.Brush = new PdfSolidBrush(Color.Black); - element7.Draw(page2, new RectangleF(0, 500, page2.GetClientSize().Width, 110)); - - - - #endregion - - #region page3 - - PdfPage page3 = document.Pages.Add(); - - PdfStructureElement hTextElement4 = new PdfStructureElement(PdfTagType.HeadingLevel2); - hTextElement4.Parent = hTextElement1; - hTextElement4.ActualText = "Resource"; - - PdfTextElement headerElement4 = new PdfTextElement("Resource", fontHead2, PdfBrushes.Black); - headerElement4.PdfTag = hTextElement4; - headerElement4.Draw(page3, new PointF(0, 0)); - - PdfStructureElement textElement4 = new PdfStructureElement(PdfTagType.Paragraph); - textElement4.Parent = hTextElementLevel3; - textElement4.ActualText = resource; - - PdfTextElement element4 = new PdfTextElement(resource, fontnormal); - element4.PdfTag = textElement4; - element4.Brush = new PdfSolidBrush(Color.Black); - element4.Draw(page3, new RectangleF(0, 40, page2.GetClientSize().Width, 70)); - - //Create a new PdfGrid. - PdfGrid pdfGrid = new PdfGrid(); - - PdfStructureElement element = new PdfStructureElement(PdfTagType.Table); - - //Adding tag to PDF grid. - pdfGrid.PdfTag = element; - - //Add three columns. - pdfGrid.Columns.Add(3); - PdfGridRow[] headerRow = pdfGrid.Headers.Add(3); - PdfGridRow pdfGridHeader = pdfGrid.Headers[0]; - pdfGridHeader.PdfTag = new PdfStructureElement(PdfTagType.TableRow); - - PdfGridCellStyle headerStyle = new PdfGridCellStyle(); - headerStyle.Font = new PdfStandardFont(PdfFontFamily.TimesRoman, 13); - pdfGridHeader.ApplyStyle(headerStyle); - - pdfGridHeader.Cells[0].Value = "Times Roman Family"; - pdfGridHeader.Cells[0].PdfTag = new PdfStructureElement(PdfTagType.TableHeader) { Scope = ScopeType.Column }; - - pdfGridHeader.Cells[1].Value = "Helvetica Family"; - pdfGridHeader.Cells[1].PdfTag = new PdfStructureElement(PdfTagType.TableHeader) { Scope = ScopeType.Column }; - pdfGridHeader.Cells[2].Value = "Courier Family"; - pdfGridHeader.Cells[2].PdfTag = new PdfStructureElement(PdfTagType.TableHeader) { Scope = ScopeType.Column }; - - PdfGridRow pdfGridRow1 = pdfGrid.Rows.Add(); - pdfGridRow1.PdfTag = new PdfStructureElement(PdfTagType.TableRow); - - pdfGridRow1.Cells[0].Value = "Times roman"; - - pdfGridRow1.Cells[1].Value = "Helvetica"; - - pdfGridRow1.Cells[2].Value = "Courier"; - - pdfGridRow1.Cells[0].PdfTag = new PdfStructureElement(PdfTagType.TableDataCell); - pdfGridRow1.Cells[1].PdfTag = new PdfStructureElement(PdfTagType.TableDataCell); - pdfGridRow1.Cells[2].PdfTag = new PdfStructureElement(PdfTagType.TableDataCell); - - - PdfGridRow pdfGridRow2 = pdfGrid.Rows.Add(); - pdfGridRow2.PdfTag = new PdfStructureElement(PdfTagType.TableRow); - - pdfGridRow2.Cells[0].Value = "Times-Bold"; - - pdfGridRow2.Cells[1].Value = "Helvetica-Bold"; - - pdfGridRow2.Cells[2].Value = "Courier-Bold"; - - pdfGridRow2.Cells[0].PdfTag = new PdfStructureElement(PdfTagType.TableDataCell); - pdfGridRow2.Cells[1].PdfTag = new PdfStructureElement(PdfTagType.TableDataCell); - pdfGridRow2.Cells[2].PdfTag = new PdfStructureElement(PdfTagType.TableDataCell); - - PdfGridRow pdfGridRow3 = pdfGrid.Rows.Add(); - - pdfGridRow3.PdfTag = new PdfStructureElement(PdfTagType.TableRow); - - pdfGridRow3.Cells[0].Value = "Times-Italic"; - - pdfGridRow3.Cells[1].Value = "Helvetica-Oblique"; - - pdfGridRow3.Cells[2].Value = "Courier-Oblique"; - - pdfGridRow3.Cells[0].PdfTag = new PdfStructureElement(PdfTagType.TableDataCell); - pdfGridRow3.Cells[1].PdfTag = new PdfStructureElement(PdfTagType.TableDataCell); - pdfGridRow3.Cells[2].PdfTag = new PdfStructureElement(PdfTagType.TableDataCell); - - PdfGridRow pdfGridRow4 = pdfGrid.Rows.Add(); - - pdfGridRow4.PdfTag = new PdfStructureElement(PdfTagType.TableRow); - - pdfGridRow4.Cells[0].Value = "Times-BoldItalic"; - - pdfGridRow4.Cells[1].Value = "Helvetica-BoldOblique"; - - pdfGridRow4.Cells[2].Value = "Courier-BoldOblique"; - - pdfGridRow4.Cells[0].PdfTag = new PdfStructureElement(PdfTagType.TableDataCell); - pdfGridRow4.Cells[1].PdfTag = new PdfStructureElement(PdfTagType.TableDataCell); - pdfGridRow4.Cells[2].PdfTag = new PdfStructureElement(PdfTagType.TableDataCell); - - - - pdfGrid.BeginCellLayout += PdfGrid_BeginCellLayout; - pdfGrid.Draw(page3, new PointF(20, 130)); - - PdfStructureElement element8 = new PdfStructureElement(PdfTagType.Figure); - element8.AlternateText = "Rectangle Sample"; - PdfRectangle rect = new PdfRectangle(20, 120, 490, 90); - rect.PdfTag = element8; - rect.Draw(page3.Graphics); - - - - #endregion - - - - - //Saving the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - document.Save(ms); - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "Customtag.pdf"; - return fileStreamResult; - } - private void PdfGrid_BeginCellLayout(object sender, PdfGridBeginCellLayoutEventArgs args) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - // setting transparent color pen as table BorderPen. - PdfPen transparentPen = new PdfPen(new PdfColor(Color.FromArgb(Color.Transparent.A, Color.Transparent.R, Color.Transparent.G, Color.Transparent.B)), .3f); - - PdfGridCellStyle pdfGridCellStyle = new PdfGridCellStyle(); - pdfGridCellStyle.Borders.All = transparentPen; - - args.Style = pdfGridCellStyle; - FileStream stream = new FileStream(dataPath + "arial.ttf", FileMode.Open, FileAccess.Read); - args.Style.Font = new PdfTrueTypeFont(stream, 8); - args.Style.StringFormat = new PdfStringFormat(PdfTextAlignment.Center); - - } -} diff --git a/Pages/Pdf/Default.cshtml b/Pages/Pdf/Default.cshtml deleted file mode 100644 index 91cfca83..00000000 --- a/Pages/Pdf/Default.cshtml +++ /dev/null @@ -1,53 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.Default - -@section ControlsSection{ -
- @{Html.BeginForm("default", "pdf", FormMethod.Post); - { -
-
-
- - - - - - - - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
- -
-
- -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to create a simple PDF document with text and images. -
-} -@section Meta{ - - } -@section Description{ -
- Likewise, we can create, conference registration form, feedback forms and more. -
-} -@section Title{ - ASP.NET Core PDF library - Default Example - Syncfusion Demos - } -@section Header{ -

Example of Default in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/Default.cshtml.cs b/Pages/Pdf/Default.cshtml.cs deleted file mode 100644 index c4cd4f38..00000000 --- a/Pages/Pdf/Default.cshtml.cs +++ /dev/null @@ -1,205 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Pdf.Interactive; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class Default : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public Default(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - //Declaring necessary objects. - Color gray = Color.FromArgb(255, 77, 77, 77); - Color black = Color.FromArgb(255, 0, 0, 0); - Color white = Color.FromArgb(255, 255, 255, 255); - Color violet = Color.FromArgb(255, 151, 108, 174); - - public ActionResult OnPost(string Browser) - { - //Creating new PDF document instance - PdfDocument document = new PdfDocument(); - //Setting margin - document.PageSettings.Margins.All = 0; - //Adding a new page - PdfPage page = document.Pages.Add(); - PdfGraphics g = page.Graphics; - - //Creating font instances - PdfFont headerFont = new PdfStandardFont(PdfFontFamily.TimesRoman, 35); - PdfFont subHeadingFont = new PdfStandardFont(PdfFontFamily.TimesRoman, 16); - - //Drawing content onto the PDF - g.DrawRectangle(new PdfSolidBrush(gray), - new Syncfusion.Drawing.RectangleF(0, 0, page.Graphics.ClientSize.Width, page.Graphics.ClientSize.Height)); - g.DrawRectangle(new PdfSolidBrush(black), - new Syncfusion.Drawing.RectangleF(0, 0, page.Graphics.ClientSize.Width, 130)); - g.DrawRectangle(new PdfSolidBrush(white), - new Syncfusion.Drawing.RectangleF(0, 400, page.Graphics.ClientSize.Width, - page.Graphics.ClientSize.Height - 450)); - g.DrawString("Enterprise", headerFont, new PdfSolidBrush(violet), new Syncfusion.Drawing.PointF(10, 20)); - g.DrawRectangle(new PdfSolidBrush(violet), new Syncfusion.Drawing.RectangleF(10, 63, 140, 35)); - g.DrawString("Reporting Solutions", subHeadingFont, new PdfSolidBrush(black), - new Syncfusion.Drawing.PointF(15, 70)); - - PdfLayoutResult result = - HeaderPoints("Develop cloud-ready reporting applications in as little as 20% of the time.", 15, page); - result = HeaderPoints("Proven, reliable platform thousands of users over the past 10 years.", - result.Bounds.Bottom + 15, page); - result = HeaderPoints("Microsoft Excel, Word, Adobe PDF, RDL display and editing.", result.Bounds.Bottom + 15, - page); - result = HeaderPoints("Why start from scratch? Rely on our dependable solution frameworks", - result.Bounds.Bottom + 15, page); - - result = BodyContent("Deployment-ready framework tailored to your needs.", result.Bounds.Bottom + 45, page); - result = BodyContent("Our architects and developers have years of reporting experience.", - result.Bounds.Bottom + 25, page); - result = BodyContent("Solutions available for web, desktop, and mobile applications.", - result.Bounds.Bottom + 25, page); - result = BodyContent("Backed by our end-to-end product maintenance infrastructure.", result.Bounds.Bottom + 25, - page); - result = BodyContent("The quickest path from concept to delivery.", result.Bounds.Bottom + 25, page); - - PdfPen redPen = new PdfPen(PdfBrushes.Red, 2); - g.DrawLine(redPen, new Syncfusion.Drawing.PointF(40, result.Bounds.Bottom + 92), - new Syncfusion.Drawing.PointF(40, result.Bounds.Bottom + 145)); - float headerBulletsXposition = 40; - PdfTextElement txtElement = new PdfTextElement("The Experts"); - txtElement.Font = new PdfStandardFont(PdfFontFamily.TimesRoman, 20); - txtElement.Draw(page, - new Syncfusion.Drawing.RectangleF(headerBulletsXposition + 5, result.Bounds.Bottom + 90, 450, 200)); - - PdfPen violetPen = new PdfPen(PdfBrushes.Violet, 2); - g.DrawLine(violetPen, new Syncfusion.Drawing.PointF(headerBulletsXposition + 280, result.Bounds.Bottom + 92), - new Syncfusion.Drawing.PointF(headerBulletsXposition + 280, result.Bounds.Bottom + 145)); - txtElement = new PdfTextElement("Accurate Estimates"); - txtElement.Font = new PdfStandardFont(PdfFontFamily.TimesRoman, 20); - result = txtElement.Draw(page, - new Syncfusion.Drawing.RectangleF(headerBulletsXposition + 290, result.Bounds.Bottom + 90, 450, 200)); - - txtElement = new PdfTextElement("A substantial number of .NET reporting applications use our frameworks"); - txtElement.Font = new PdfStandardFont(PdfFontFamily.TimesRoman, 11, PdfFontStyle.Regular); - result = txtElement.Draw(page, - new Syncfusion.Drawing.RectangleF(headerBulletsXposition + 5, result.Bounds.Bottom + 5, 250, 200)); - - - txtElement = new PdfTextElement("Given our expertise, you can expect estimates to be accurate."); - txtElement.Font = new PdfStandardFont(PdfFontFamily.TimesRoman, 11, PdfFontStyle.Regular); - result = txtElement.Draw(page, - new Syncfusion.Drawing.RectangleF(headerBulletsXposition + 290, result.Bounds.Y, 250, 200)); - - - PdfPen greenPen = new PdfPen(PdfBrushes.Green, 2); - g.DrawLine(greenPen, new Syncfusion.Drawing.PointF(40, result.Bounds.Bottom + 32), - new Syncfusion.Drawing.PointF(40, result.Bounds.Bottom + 85)); - - txtElement = new PdfTextElement("Product Licensing"); - txtElement.Font = new PdfStandardFont(PdfFontFamily.TimesRoman, 20); - txtElement.Draw(page, - new Syncfusion.Drawing.RectangleF(headerBulletsXposition + 5, result.Bounds.Bottom + 30, 450, 200)); - - PdfPen bluePen = new PdfPen(PdfBrushes.Blue, 2); - g.DrawLine(bluePen, new Syncfusion.Drawing.PointF(headerBulletsXposition + 280, result.Bounds.Bottom + 32), - new Syncfusion.Drawing.PointF(headerBulletsXposition + 280, result.Bounds.Bottom + 85)); - txtElement = new PdfTextElement("About Syncfusion"); - txtElement.Font = new PdfStandardFont(PdfFontFamily.TimesRoman, 20); - result = txtElement.Draw(page, - new Syncfusion.Drawing.RectangleF(headerBulletsXposition + 290, result.Bounds.Bottom + 30, 450, 200)); - - txtElement = - new PdfTextElement("Solution packages can be combined with product licensing for great cost savings."); - txtElement.Font = new PdfStandardFont(PdfFontFamily.TimesRoman, 11, PdfFontStyle.Regular); - result = txtElement.Draw(page, - new Syncfusion.Drawing.RectangleF(headerBulletsXposition + 5, result.Bounds.Bottom + 5, 250, 200)); - - - txtElement = - new PdfTextElement( - "Syncfusion has more than 7,000 customers including large financial institutions and Fortune 100 companies."); - txtElement.Font = new PdfStandardFont(PdfFontFamily.TimesRoman, 11, PdfFontStyle.Regular); - result = txtElement.Draw(page, - new Syncfusion.Drawing.RectangleF(headerBulletsXposition + 290, result.Bounds.Y, 250, 200)); - - g.DrawString("All trademarks mentioned belong to their owners.", - new PdfStandardFont(PdfFontFamily.TimesRoman, 8, PdfFontStyle.Italic), PdfBrushes.White, - new Syncfusion.Drawing.PointF(10, g.ClientSize.Height - 30)); - PdfTextWebLink linkAnnot = new PdfTextWebLink(); - linkAnnot.Url = "//www.syncfusion.com"; - linkAnnot.Text = "www.syncfusion.com"; - linkAnnot.Font = new PdfStandardFont(PdfFontFamily.TimesRoman, 8, PdfFontStyle.Italic); - linkAnnot.Brush = PdfBrushes.White; - linkAnnot.DrawTextWebLink(page, - new Syncfusion.Drawing.PointF(g.ClientSize.Width - 100, g.ClientSize.Height - 30)); - - //Saving the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - document.Save(ms); - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "Sample.pdf"; - return fileStreamResult; - } - - private PdfLayoutResult BodyContent(string text, float yPosition, PdfPage page) - { - float headerBulletsXposition = 35; - PdfTextElement txtElement = new PdfTextElement("3"); - txtElement.Font = new PdfStandardFont(PdfFontFamily.ZapfDingbats, 16); - txtElement.Brush = new PdfSolidBrush(violet); - txtElement.StringFormat = new PdfStringFormat(); - txtElement.StringFormat.WordWrap = PdfWordWrapType.Word; - txtElement.StringFormat.LineLimit = true; - txtElement.Draw(page, new Syncfusion.Drawing.RectangleF(headerBulletsXposition, yPosition, 320, 100)); - - txtElement = new PdfTextElement(text); - txtElement.Font = new PdfStandardFont(PdfFontFamily.TimesRoman, 17); - txtElement.Brush = new PdfSolidBrush(white); - txtElement.StringFormat = new PdfStringFormat(); - txtElement.StringFormat.WordWrap = PdfWordWrapType.Word; - txtElement.StringFormat.LineLimit = true; - PdfLayoutResult result = txtElement.Draw(page, - new Syncfusion.Drawing.RectangleF(headerBulletsXposition + 25, yPosition, 450, 130)); - return result; - } - - private PdfLayoutResult HeaderPoints(string text, float yPosition, PdfPage page) - { - float headerBulletsXposition = 220; - PdfTextElement txtElement = new PdfTextElement("l"); - txtElement.Font = new PdfStandardFont(PdfFontFamily.ZapfDingbats, 10); - txtElement.Brush = new PdfSolidBrush(violet); - txtElement.StringFormat = new PdfStringFormat(); - txtElement.StringFormat.WordWrap = PdfWordWrapType.Word; - txtElement.StringFormat.LineLimit = true; - txtElement.Draw(page, new Syncfusion.Drawing.RectangleF(headerBulletsXposition, yPosition, 300, 100)); - - txtElement = new PdfTextElement(text); - txtElement.Font = new PdfStandardFont(PdfFontFamily.TimesRoman, 11); - txtElement.Brush = new PdfSolidBrush(white); - txtElement.StringFormat = new PdfStringFormat(); - txtElement.StringFormat.WordWrap = PdfWordWrapType.Word; - txtElement.StringFormat.LineLimit = true; - PdfLayoutResult result = txtElement.Draw(page, - new Syncfusion.Drawing.RectangleF(headerBulletsXposition + 20, yPosition, 320, 100)); - return result; - } -} \ No newline at end of file diff --git a/Pages/Pdf/DigitalSignature.cshtml b/Pages/Pdf/DigitalSignature.cshtml deleted file mode 100644 index 42497ebc..00000000 --- a/Pages/Pdf/DigitalSignature.cshtml +++ /dev/null @@ -1,233 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.DigitalSignature - -@section ControlsSection{ - -
- @{Html.BeginForm("digitalsignature", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- - - - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
-

- @Html.Label("", (string)Model.lab) -

-
-
-
- - - - - - -
- Signature Settings -
- - - - - - - - - - - -
- - -   - -
-
- - -   - -   - -   - -   - -   -
-
-
- -
-
-
-
-
- - - - - - -
- Sign new PDF document
-
- - - - - - - - - - -
- - -   - -
-
- -
-
-
- -
-
-
-
-
- - - - - - -
- Sign existing PDF document
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- Source - -
-
-
- Certificate - - -
-
-
- Password - -
-
-
- Reason - -
- -
-
- Contact - -
-
-
- Location - -
-
- -
-
-
-
-
-
- - Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to digitally sign the PDF document with the PFX certificate file. It is possible to digitally sign with X509 certificates such as .pfx files with private keys and support for Hardware Security Module (HSM), Online Certificate Status Protocol (OCSP), Certificate Revocation List (CRL), and Windows Certificate Store to offer authenticity and integrity. -
-} -@section Meta{ - - } -@section Description{ -
- It is also possible to digitally sign with timestamp. - More information about the digital signature and timestamp can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - Digital Signature Example - Syncfusion Demos - } -@section Header{ -

Example of Digital Signature in ASP.NET Core PDF Library

- } diff --git a/Pages/Pdf/DigitalSignature.cshtml.cs b/Pages/Pdf/DigitalSignature.cshtml.cs deleted file mode 100644 index cd39c27a..00000000 --- a/Pages/Pdf/DigitalSignature.cshtml.cs +++ /dev/null @@ -1,165 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Pdf.Parsing; -using Syncfusion.Pdf.Security; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class DigitalSignature : PageModel -{ - public void OnGet() - { - - } - - public string lab; - private readonly IWebHostEnvironment _hostingEnvironment; - public DigitalSignature(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Browser, string password, string Reason, string Location, - string Contact, string RadioButtonList2, string NewPDF, string submit, string Cryptographic, - string Digest_Algorithm, IFormFile pdfdocument, IFormFile certificate) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - if (submit == "Sign PDF") - { - if (pdfdocument != null && pdfdocument.Length > 0 && certificate != null && certificate.Length > 0 && - certificate.FileName.Contains(".pfx") && password != null && Location != null && Reason != null && - Contact != null) - { - PdfLoadedDocument ldoc = new PdfLoadedDocument(pdfdocument.OpenReadStream()); - PdfCertificate pdfCert = new PdfCertificate(certificate.OpenReadStream(), password); - FileStream jpgFile = new FileStream(dataPath + "logo.png", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - PdfBitmap bmp = new PdfBitmap(jpgFile); - PdfPageBase page = ldoc.Pages[0]; - PdfSignature signature = new PdfSignature(ldoc, page, pdfCert, "Signature"); - signature.Bounds = new RectangleF(new PointF(20, 20), new SizeF(240, 70)); - signature.ContactInfo = Contact; - signature.LocationInfo = Location; - signature.Reason = Reason; - SetCryptographicStandard(Cryptographic, signature); - SetDigest_Algorithm(Digest_Algorithm, signature); - PdfGraphics graphics = signature.Appearance.Normal.Graphics; - graphics.DrawImage(bmp, 0, 0); - MemoryStream stream = new MemoryStream(); - ldoc.Save(stream); - stream.Position = 0; - ldoc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/pdf"); - fileStreamResult.FileDownloadName = "SignedPDF.pdf"; - return fileStreamResult; - } - else - { - lab = "NOTE: Fill all fields and then create PDF"; - // return View(); - return null; - } - } - else - { - //Read the PFX file - FileStream pfxFile = - new FileStream(dataPath + "PDF.pfx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - PdfDocument doc = new PdfDocument(); - PdfPage page = doc.Pages.Add(); - PdfSolidBrush brush = new PdfSolidBrush(Color.Black); - PdfPen pen = new PdfPen(brush, 0.2f); - PdfFont font = new PdfStandardFont(PdfFontFamily.Courier, 12, PdfFontStyle.Regular); - PdfCertificate pdfCert = new PdfCertificate(pfxFile, "password123"); - PdfSignature signature = new PdfSignature(page, pdfCert, "Signature"); - FileStream jpgFile = - new FileStream(dataPath + "logo.png", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - PdfBitmap bmp = new PdfBitmap(jpgFile); - signature.Bounds = new RectangleF(new PointF(20, 20), new SizeF(240, 110)); - signature.ContactInfo = "johndoe@owned.us"; - signature.LocationInfo = "Honolulu, Hawaii"; - signature.Reason = "I am author of this document."; - SetCryptographicStandard(Cryptographic, signature); - SetDigest_Algorithm(Digest_Algorithm, signature); - if (RadioButtonList2 == "Standard") - signature.Certificated = false; - else - signature.Certificated = true; - PdfGraphics graphics = signature.Appearance.Normal.Graphics; - - string validto = " Valid To: " + signature.Certificate.ValidTo.ToString(); - string validfrom = " Valid From: " + signature.Certificate.ValidFrom.ToString(); - - graphics.DrawImage(bmp, 0, 0); - - doc.Pages[0].Graphics.DrawString(validfrom, font, pen, brush, 20, 90); - doc.Pages[0].Graphics.DrawString(validto, font, pen, brush, 20, 110); - - // Save the pdf document to the Stream. - MemoryStream stream = new MemoryStream(); - - doc.Save(stream); - - //Close document - doc.Close(true); - - stream.Position = 0; - - // Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/pdf"); - fileStreamResult.FileDownloadName = "SignedPDF.pdf"; - return fileStreamResult; - } - } - private void SetCryptographicStandard(string cryptographic, PdfSignature signature) - { - if (cryptographic != null) - { - if (cryptographic == "CAdES") - signature.Settings.CryptographicStandard = CryptographicStandard.CADES; - else - signature.Settings.CryptographicStandard = CryptographicStandard.CMS; - } - - } - private void SetDigest_Algorithm(string digest_Algorithm, PdfSignature signature) - { - if (digest_Algorithm != null) - { - switch (digest_Algorithm) - { - case "SHA1": - signature.Settings.DigestAlgorithm = DigestAlgorithm.SHA1; - break; - case "SHA384": - signature.Settings.DigestAlgorithm = DigestAlgorithm.SHA384; - break; - case "SHA512": - signature.Settings.DigestAlgorithm = DigestAlgorithm.SHA512; - break; - case "RIPEMD160": - signature.Settings.DigestAlgorithm = DigestAlgorithm.RIPEMD160; - break; - default: - signature.Settings.DigestAlgorithm = DigestAlgorithm.SHA256; - break; - } - } - } -} \ No newline at end of file diff --git a/Pages/Pdf/DocumentSettings.cshtml b/Pages/Pdf/DocumentSettings.cshtml deleted file mode 100644 index 6b74953a..00000000 --- a/Pages/Pdf/DocumentSettings.cshtml +++ /dev/null @@ -1,52 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.DocumentSettings - -@section ControlsSection{ -
- @{Html.BeginForm("documentsettings", "pdf", FormMethod.Post); - { -
-
-
- - - - - - - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
- -
-
- -
-
- Html.EndForm(); - }} -
-} -@section ActionDescription{ -
- This sample demonstrates adding PDF document properties such as title, author, keyword, subject, and producer etc. -
-} -@section Meta{ - - } -@section Description{ -
- It is also possible to add advance XMP metadata properties such as basic schema, custom schema, Dublin core schema, rights management schema, basic job schema and more. - More information about the document settings can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - Document Settings Example - Syncfusion Demos - } -@section Header{ -

Example of Document Settings in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/DocumentSettings.cshtml.cs b/Pages/Pdf/DocumentSettings.cshtml.cs deleted file mode 100644 index 2bab9678..00000000 --- a/Pages/Pdf/DocumentSettings.cshtml.cs +++ /dev/null @@ -1,89 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Pdf.Xmp; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class DocumentSettings : PageModel -{ - public void OnGet() - { - - } - - public ActionResult OnPost(string InsideBrowser) - { - //Create a new PDF Document. The pdfDoc object represents the PDF document. - //This document has one page by default and additional pages have to be added. - PdfDocument pdfDoc = new PdfDocument(); - PdfPage page = pdfDoc.Pages.Add(); - - // Get xmp object. - XmpMetadata xmp = pdfDoc.DocumentInformation.XmpMetadata; - - // XMP Basic Schema. - BasicSchema basic = xmp.BasicSchema; - basic.Advisory.Add("advisory"); - basic.BaseURL = new Uri("http://google.com"); - basic.CreateDate = DateTime.Now; - basic.CreatorTool = "creator tool"; - basic.Identifier.Add("identifier"); - basic.Label = "label"; - basic.MetadataDate = DateTime.Now; - basic.ModifyDate = DateTime.Now; - basic.Nickname = "nickname"; - basic.Rating.Add(-25); - - //Setting various Document properties. - pdfDoc.DocumentInformation.Title = "Document Properties Information"; - pdfDoc.DocumentInformation.Author = "Syncfusion"; - pdfDoc.DocumentInformation.Keywords = "PDF"; - pdfDoc.DocumentInformation.Subject = "PDF demo"; - pdfDoc.DocumentInformation.Producer = "Syncfusion Software"; - pdfDoc.DocumentInformation.CreationDate = DateTime.Now; - - PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 10f); - PdfFont boldFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12f, PdfFontStyle.Bold); - PdfBrush brush = PdfBrushes.Black; - - PdfGraphics g = page.Graphics; - PdfStringFormat format = new PdfStringFormat(); - format.LineSpacing = 10f; - - g.DrawString("Press Ctrl+D to see Document Properties", boldFont, brush, 10, 10); - g.DrawString("Basic Schema Xml:", boldFont, brush, 10, 50); - g.DrawString(basic.XmlData.ToString(), font, brush, new RectangleF(10, 70, 500, 600), format); - - //Defines and set values for Custom metadata and add them to the Pdf document - CustomSchema custom = new CustomSchema(xmp, "custom", "http://www.syncfusion.com/"); - custom["Company"] = "Syncfusion"; - custom["Website"] = "http://www.syncfusion.com/"; - custom["Product"] = "Essential PDF"; - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - - pdfDoc.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the PDF document. - pdfDoc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "DocumentSettings.pdf"; - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Pdf/DrawingShapes.cshtml b/Pages/Pdf/DrawingShapes.cshtml deleted file mode 100644 index 1463af0f..00000000 --- a/Pages/Pdf/DrawingShapes.cshtml +++ /dev/null @@ -1,55 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.DrawingShapes - -@section ControlsSection{ - -
- @{ - Html.BeginForm("drawingshapes", "pdf", FormMethod.Post); - { -
-
-
- - - - - - - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
- -
-
-
-
- - Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates drawing of shapes - such as Ellipse, Arcs, Polygon, Pie, and Rectangle in the PDF document with gradient and color spaces. -
-} -@section Meta{ - - } -@section Description{ -
- -
-} -@section Title{ - ASP.NET Core PDF library - Drawing Shapes Example - Syncfusion Demos - } -@section Header{ -

Example of Drawing Shapes in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/DrawingShapes.cshtml.cs b/Pages/Pdf/DrawingShapes.cshtml.cs deleted file mode 100644 index f2b06670..00000000 --- a/Pages/Pdf/DrawingShapes.cshtml.cs +++ /dev/null @@ -1,277 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class DrawingShapes : PageModel -{ - public void OnGet() - { - - } - - public ActionResult OnPost(string InsideBrowser) - { - // Create a new PDF document. - PdfDocument doc = new PdfDocument(); - int i; - // Create a new page. - PdfPage page = doc.Pages.Add(); - // Obtain PdfGraphics object. - PdfGraphics g = page.Graphics; - PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 14, PdfFontStyle.Bold); - - #region Polygon - - PdfPen pen = new PdfPen(Color.Black); - pen.Width = 3; - PointF p1 = new PointF(05, 10); - PointF p2 = new PointF(05, 10); - PointF p3 = new PointF(60, 70); - PointF p4 = new PointF(40, 70); - - PointF[] points = { p1, p2, p3, p4 }; - - int pointNum = 16; - points = new PointF[pointNum]; - double f = 360.0 / pointNum * Math.PI / 180.0; - const double r = 100; - PointF center = new PointF(140, 140); - - for (i = 0; i < pointNum; ++i) - { - PointF p = new PointF(); - double theta = i * f; - - p.Y = (float)(Math.Sin(theta) * r + center.Y); - p.X = (float)(Math.Cos(theta) * r + center.X); - - points[i] = p; - } - - PdfSolidBrush brush = new PdfSolidBrush(Color.Green); - pen.Color = Color.Brown; - pen.Width = 10; - pen.LineJoin = PdfLineJoin.Round; - g.DrawString("Polygon", font, PdfBrushes.DarkBlue, new PointF(50, 0)); - g.DrawPolygon(pen, brush, points); - - #endregion - - #region Pie - - RectangleF rect = new RectangleF(200, 50, 200, 200); - brush.Color = Color.Green; - pen.Color = Color.Brown; - pen.Width = 10; - - rect.Location = new PointF(20, 280); - pen.LineJoin = PdfLineJoin.Round; - g.DrawString("Pie shape", font, PdfBrushes.DarkBlue, new PointF(50, 250)); - g.DrawPie(pen, brush, rect, 180, 60); - g.DrawPie(pen, brush, rect, 360 - 60, 60); - g.DrawPie(pen, brush, rect, 60, 60); - - #endregion - - #region Arc - - g.DrawString("Arcs", font, PdfBrushes.DarkBlue, new PointF(330, 0)); - pen = new PdfPen(Color.Black); - pen.Width = 11; - pen.LineCap = PdfLineCap.Round; - pen.Color = Color.Brown; - rect = new RectangleF(310, 40, 200, 200); - g.DrawArc(pen, rect, 0, 90); - - pen.Color = Color.DarkGreen; - rect.X -= 10; - g.DrawArc(pen, rect, 90, 90); - - pen.Color = Color.Brown; - rect.Y -= 10; - g.DrawArc(pen, rect, 180, 90); - - pen.Color = Color.DarkGreen; - rect.X += 10; - g.DrawArc(pen, rect, 270, 90); - - #endregion - - #region Rectangle - - rect = new RectangleF(310, 280, 200, 100); - brush.Color = Color.Green; - pen.Color = Color.Brown; - g.DrawString("Simple Rectangle", font, PdfBrushes.DarkBlue, new PointF(310, 255)); - g.DrawRectangle(pen, brush, rect); - - #endregion - - #region ellipse - - pen = new PdfPen(Color.Black); - rect = new RectangleF(270, 400, 160, 1000); - g.DrawString("Shape with pagination", font, PdfBrushes.DarkBlue, new PointF(300, 390)); - PdfEllipse ellipse = new PdfEllipse(rect); - PdfLayoutFormat format = new PdfLayoutFormat(); - format.Break = PdfLayoutBreakType.FitPage; - format.Layout = PdfLayoutType.Paginate; - ellipse.Brush = PdfBrushes.Brown; - ellipse.Draw(page, 20, 20, format); - - brush = new PdfSolidBrush(Color.Black); - ellipse.Brush = PdfBrushes.DarkGreen; - ellipse.Draw(page, 40, 40, format); - - #endregion - - #region Transaparency - - page = doc.Pages[1]; - g = page.Graphics; - g.DrawString("Transparent Rectangles", font, PdfBrushes.DarkBlue, new PointF(50, 80)); - PdfBrush gBrush; - rect = new RectangleF(10, 150, 100, 100); - - pen = new PdfPen(Color.Black); - gBrush = new PdfSolidBrush(Color.DarkGreen); - - g.DrawRectangle(pen, gBrush, rect); - gBrush = new PdfSolidBrush(Color.Brown); - rect.X += 20; - rect.Y += 20; - pen = new PdfPen(Color.Brown); - g.SetTransparency(0.7f); - g.DrawRectangle(pen, gBrush, rect); - - rect.X += 20; - rect.Y += 20; - gBrush = new PdfLinearGradientBrush(rect, Color.DarkGreen, Color.Brown, PdfLinearGradientMode.BackwardDiagonal); - g.SetTransparency(0.5f); - g.DrawRectangle(pen, gBrush, rect); - - rect.X += 20; - rect.Y += 20; - pen = new PdfPen(Color.Blue); - gBrush = new PdfSolidBrush(Color.Gray); - g.SetTransparency(0.25f); - g.DrawRectangle(pen, gBrush, rect); - - rect.X += 20; - rect.Y += 20; - pen = new PdfPen(Color.Black); - gBrush = new PdfSolidBrush(Color.Green); - g.SetTransparency(0.1f); - g.DrawRectangle(pen, gBrush, rect); - - #endregion - - #region Rectangle with Color space - - - - PointF location = new PointF(10, 50); - page = doc.Pages.Add(); - g = page.Graphics; - - doc.ColorSpace = (PdfColorSpace)i; - - // SolidBrush - gBrush = new PdfSolidBrush(Color.Red); - DrawRectangles(location, g, font, gBrush, pen, doc); - - // LinearGradient - location = new PointF(180, 50); - - PointF point2 = location; - - point2.X += 180; - gBrush = new PdfLinearGradientBrush(location, point2, Color.Blue, Color.Red); - DrawRectangles(location, g, font, gBrush, pen, doc); - - // Raidal Gradient - location = new PointF(360, 50); - point2 = location; - - point2 = new PointF(location.X + 50, location.Y + 50); - //point2.Y += 250; - //point2.X = 150; - gBrush = new PdfRadialGradientBrush(point2, 0, point2, 100, Color.Blue, Color.Red); - (gBrush as PdfRadialGradientBrush).Extend = PdfExtend.Both; - DrawRectangles(location, g, font, gBrush, pen, doc); - - g.DrawString("Rectangle with color spaces", font, PdfBrushes.DarkBlue, new PointF(150, 0)); - - #endregion - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - - doc.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the PDF document. - doc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "Shapes.pdf"; - return fileStreamResult; - } - /// - /// Draws rectangle - /// - /// - /// - /// - /// - /// - private void DrawRectangles(PointF startPoint, PdfGraphics g, PdfFont font, PdfBrush brush, PdfPen pen, PdfDocument doc) - { - PdfBrush textBrush = new PdfSolidBrush(Color.Black); - RectangleF rect = new RectangleF(startPoint.X, startPoint.Y, 100, 100); - - g.Save(); - - g.DrawString("Default: " + doc.ColorSpace.ToString(), font, textBrush, rect.Location); - rect.Y += 20; - g.DrawRectangle(pen, brush, rect); - rect.Y += 106; - - doc.ColorSpace = PdfColorSpace.RGB; - - g.DrawString("RGB color space.", font, textBrush, rect.Location); - rect.Y += 20; - g.DrawRectangle(pen, brush, rect); - rect.Y += 106; - - doc.ColorSpace = PdfColorSpace.CMYK; - - g.DrawString("CMYK color space.", font, textBrush, rect.Location); - rect.Y += 20; - g.DrawRectangle(pen, brush, rect); - rect.Y += 106; - - doc.ColorSpace = PdfColorSpace.GrayScale; - - g.DrawString("Gray scale color space.", font, textBrush, rect.Location); - rect.Y += 20; - g.DrawRectangle(pen, brush, rect); - rect.Y += 106; - - g.Restore(); - } -} \ No newline at end of file diff --git a/Pages/Pdf/Encryption.cshtml b/Pages/Pdf/Encryption.cshtml deleted file mode 100644 index 3cf416ad..00000000 --- a/Pages/Pdf/Encryption.cshtml +++ /dev/null @@ -1,162 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.Encryption - -@using Syncfusion.EJ2 - -@{ var Title = "Essential PDF : Encryption : Syncfusion"; } - - - -@section ControlsSection{ -
- @{Html.BeginForm("encryption", "pdf", FormMethod.Post); - { -
- Click the button below to view a PDF created with Essential PDF. - Please note that Adobe Reader or its equivalent is required to view the resultant document. However, AES-GCM encryption is not supported by Adobe Reader to view such documents, use Foxit Reader or another compatible PDF viewer. -
-
-
-
-
-
- -    -    -    -    -    - - -
- -
- -
-
- - - - - - - - - - - - - - -
-
- - - - - - - - - - - - - - - -
-
-
-
-
-
-
-
-
- -
-
-
-
-
- Html.EndForm(); - }} -
-} -@section ActionDescription{ -

- This sample demonstrates how to encrypt the PDF document with encryption standards like 40-bit RC4, 128-bit RC4, 128-bit AES, 256-bit AES, advanced encryption standard 256-bit AES Revision 6 (PDF 2.0) and 256-bit AES-GCM (PDF 2.0) to protect documents against unauthorized access. -

-} -@section Meta{ - -} -@section Description{ -

- It is possible to protect with user password or owner password or both passwords and also possible to change or remove password and permission. - More information about encryption or decryption can be found in this documentation section. -

-} - -@section Title{ - ASP.NET Core PDF library - Encryption Example - Syncfusion Demos -} -@section Header{ -

Example of Encryption in ASP.NET Core PDF Library

-} \ No newline at end of file diff --git a/Pages/Pdf/Encryption.cshtml.cs b/Pages/Pdf/Encryption.cshtml.cs deleted file mode 100644 index 63f1bbe1..00000000 --- a/Pages/Pdf/Encryption.cshtml.cs +++ /dev/null @@ -1,144 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Pdf.Interactive; -using Syncfusion.Pdf.Security; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class Encryption : PageModel -{ - public string[] data; - public void OnGet() - { - List styleList = new List(); - data = new string[] { "Encrypt all contents", "Encrypt all contents except metadata", "Encrypt only attachments [For AES and AES-GCM only]" }; - } - private readonly IWebHostEnvironment _hostingEnvironment; - public Encryption(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string InsideBrowser, string encryptionType, string encryptOption) - { - PdfDocument document = new PdfDocument(); - PdfPage page = document.Pages.Add(); - PdfGraphics graphics = page.Graphics; - - PdfStandardFont font = new PdfStandardFont(PdfFontFamily.TimesRoman, 14f, PdfFontStyle.Bold); - PdfBrush brush = PdfBrushes.Black; - PdfForm form = document.Form; - - //Document security - PdfSecurity security = document.Security; - - //Specify key size and encryption algorithm - if (encryptionType == "40_RC4") - { - //use 40 bits key in RC4 mode - security.KeySize = PdfEncryptionKeySize.Key40Bit; - } - else if (encryptionType == "128_RC4") - { - //use 128 bits key in RC4 mode - security.KeySize = PdfEncryptionKeySize.Key128Bit; - security.Algorithm = PdfEncryptionAlgorithm.RC4; - } - else if (encryptionType == "128_AES") - { - //use 128 bits key in AES mode - security.KeySize = PdfEncryptionKeySize.Key128Bit; - security.Algorithm = PdfEncryptionAlgorithm.AES; - } - else if (encryptionType == "256_AES") - { - //use 256 bits key in AES mode - security.KeySize = PdfEncryptionKeySize.Key256Bit; - security.Algorithm = PdfEncryptionAlgorithm.AES; - } - else if (encryptionType == "256_AES_Revision_6") - { - security.KeySize = PdfEncryptionKeySize.Key256BitRevision6; - security.Algorithm = PdfEncryptionAlgorithm.AES; - } - else if (encryptionType == "256_AES_GCM") - { - security.KeySize = PdfEncryptionKeySize.Key256Bit; - security.Algorithm = PdfEncryptionAlgorithm.AESGCM; - document.FileStructure.Version = PdfVersion.Version2_0; - } - - //set Encryption options - if (encryptOption == "Encrypt only attachments [For AES and AES-GCM only]") - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/PDF/"; - - //Read the file - FileStream xmlStream = new FileStream(dataPath + "Products.xml", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - - //Creates an attachment - PdfAttachment attachment = new PdfAttachment("Products.xml", xmlStream); - - attachment.ModificationDate = DateTime.Now; - - attachment.Description = "About Syncfusion"; - - attachment.MimeType = "application/txt"; - - //Adds the attachment to the document - document.Attachments.Add(attachment); - - security.EncryptionOptions = PdfEncryptionOptions.EncryptOnlyAttachments; - } - else if (encryptOption == "Encrypt all contents except metadata") - security.EncryptionOptions = PdfEncryptionOptions.EncryptAllContentsExceptMetadata; - else - security.EncryptionOptions = PdfEncryptionOptions.EncryptAllContents; - - security.OwnerPassword = "syncfusion"; - security.Permissions = PdfPermissionsFlags.Print | PdfPermissionsFlags.FullQualityPrint; - security.UserPassword = "password"; - - string text = "Security options:\n\n" + String.Format( - "KeySize: {0}\n\nEncryption Algorithm: {4}\n\nOwner Password: {1}\n\nPermissions: {2}\n\n" + - "User Password: {3}", security.KeySize, security.OwnerPassword, security.Permissions, security.UserPassword, - security.Algorithm); - if (encryptionType == "256_AES_Revision_6") - { - text += String.Format("\n\nRevision: {0}", "Revision 6"); - } - else if (encryptionType == "256_AES") - { - text += String.Format("\n\nRevision: {0}", "Revision 5"); - } - else if (encryptionType == "256_AES_GCM") - { - text += String.Format("\n\nRevision: {0}", "Revision 7"); - } - graphics.DrawString("Document is Encrypted with following settings", font, brush, PointF.Empty); - font = new PdfStandardFont(PdfFontFamily.TimesRoman, 11f, PdfFontStyle.Bold); - graphics.DrawString(text, font, brush, new PointF(0, 40)); - - //Saving the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - document.Save(ms); - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "Secure.pdf"; - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Pdf/ExtractText.cshtml b/Pages/Pdf/ExtractText.cshtml deleted file mode 100644 index ae494856..00000000 --- a/Pages/Pdf/ExtractText.cshtml +++ /dev/null @@ -1,93 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.ExtractText - -@section ControlsSection{ -
- @{ - Html.BeginForm("extracttext", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" } ); - { -
-
- - Click the button to extract the text from the PDF document using Essential PDF. Please note - that Microsoft Word or its equivalent is required to view the resultant document. - -
-
-
-
-
- - - - -
- - -
-
-
-
-
-
-
-
-
- - - - - - - - - - - - -
- Select a PDF file to extract text from specified page. -
- -
-
- Page number to extract text    : - -
-
- -
-
-
-

- @Html.Label("", (string)Model.Message) -

-
- -
- - Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to extract the text from the PDF document. -
-} -@section Meta{ - - } -@section Description{ -
- This feature can be used to extract information such as user data, billing information from invoice, address, and so on from the PDF document for indexing and archiving. - More information about the text extraction can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - Text Extraction Example - Syncfusion Demos - } -@section Header{ -

Example of Text Extraction in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/ExtractText.cshtml.cs b/Pages/Pdf/ExtractText.cshtml.cs deleted file mode 100644 index efc048bf..00000000 --- a/Pages/Pdf/ExtractText.cshtml.cs +++ /dev/null @@ -1,99 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Pdf.Parsing; -using Syncfusion.Pdf; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class ExtractText : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public ExtractText(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public string Message { get; set; } - public IActionResult OnPost(string ViewTemplate, string extractText, string extractTextFromFile, - int pageNumber, IFormFile inputPdfFile) - { - string basePath = _hostingEnvironment.WebRootPath; - if (!string.IsNullOrEmpty(ViewTemplate)) - { - FileStream fileStreamInput = - new FileStream(basePath + @"/PDF/HTTP Succinctly.pdf", FileMode.Open, FileAccess.Read); - FileStreamResult fileStreamResult = new FileStreamResult(fileStreamInput, "application/pdf"); - fileStreamResult.FileDownloadName = "HTTP Succinctly.pdf"; - return fileStreamResult; - } - else if (!string.IsNullOrEmpty(extractText)) - { - FileStream fileStreamInput = - new FileStream(basePath + @"/PDF/HTTP Succinctly.pdf", FileMode.Open, FileAccess.Read); - PdfLoadedDocument loadedDocument = new PdfLoadedDocument(fileStreamInput); - string extractedText = string.Empty; - for (var i = 0; i < loadedDocument.Pages.Count; i++) - { - extractedText += loadedDocument.Pages[i].ExtractText(true); - } - - byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(extractedText); - MemoryStream stream = new MemoryStream(byteArray); - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/txt"); - fileStreamResult.FileDownloadName = "Sample.txt"; - return fileStreamResult; - } - else if (!string.IsNullOrEmpty(extractTextFromFile)) - { - if (inputPdfFile != null) - { - //Load the PDF document. - PdfLoadedDocument loadedDocument = new PdfLoadedDocument(inputPdfFile.OpenReadStream()); - - if (pageNumber <= loadedDocument.Pages.Count && pageNumber != 0) - { - //Get the page from the PDF document. - PdfPageBase page = loadedDocument.Pages[pageNumber - 1]; - - //Extract text. - string extractedText = page.ExtractText(true); - byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(extractedText); - MemoryStream stream = new MemoryStream(byteArray); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/txt"); - fileStreamResult.FileDownloadName = "Sample.txt"; - return fileStreamResult; - } - else - { - Message = - "Please enter a valid page number. The page number must be within the range 1 to " + - loadedDocument.Pages.Count; - loadedDocument.Close(true); - return null; - // return View(); - } - } - else - { - Message = "Please select a PDF document to extract text."; - return null; - // return View(); - } - } - - return null; - // return View(); - } -} \ No newline at end of file diff --git a/Pages/Pdf/GraphicBrushes.cshtml b/Pages/Pdf/GraphicBrushes.cshtml deleted file mode 100644 index 48372c86..00000000 --- a/Pages/Pdf/GraphicBrushes.cshtml +++ /dev/null @@ -1,47 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.GraphicBrushes - -@section ControlsSection{ -
- @{Html.BeginForm("graphicbrushes", "pdf", FormMethod.Post); - { - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
-
-
-
- -
-
-
-
- - Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates drawing of shapes with different brushes such as solid, tiling, hatch, Linear gradient, Radial gradient, and with different color spaces. such as Cal RGB, ICC, Exponential interpolation, pantone, and indexed color space. -
-} -@section Meta{ - -} -@section Description{ -
- -
-} -@section Title{ - ASP.NET Core PDF library - Graphic Brushes Example - Syncfusion Demos -} -@section Header{ -

Example of Graphic Brushes in ASP.NET Core PDF Library

-} \ No newline at end of file diff --git a/Pages/Pdf/GraphicBrushes.cshtml.cs b/Pages/Pdf/GraphicBrushes.cshtml.cs deleted file mode 100644 index 38a36084..00000000 --- a/Pages/Pdf/GraphicBrushes.cshtml.cs +++ /dev/null @@ -1,374 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf; -using Syncfusion.Pdf.ColorSpace; -using Syncfusion.Pdf.Functions; -using Syncfusion.Pdf.Graphics; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class GraphicBrushes : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public GraphicBrushes(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string InsideBrowser) - { - //Create a new PDF document - PdfDocument document = new PdfDocument(); - document.PageSettings = new PdfPageSettings(new SizeF(300, 400)); - - #region Graphic Brushes - - PdfPage page = document.Pages.Add(); - PdfGraphics graphics = page.Graphics; - - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Read the file - FileStream file = new FileStream(dataPath + "simple.jpg", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - PdfImage image = PdfImage.FromStream(file); - - PdfFont font = new PdfStandardFont(PdfFontFamily.TimesRoman, 8f, PdfFontStyle.Bold); - PdfBrush textBrush = PdfBrushes.Black; - - graphics.DrawString("PDF Graphic Brushes", font, textBrush, new PointF(75, 20)); - #region SolidBrush - graphics.DrawString("Solid Brush", font, textBrush, new PointF(85, 33)); - // Draw ellipse with solid brush. - RectangleF rectangle = new RectangleF(20, 46, 50, 50); - PdfSolidBrush brush = new PdfSolidBrush(Color.Black); - - graphics.DrawEllipse(brush, rectangle); - - graphics.TranslateTransform(60, 0); - brush = new PdfSolidBrush(Color.Green); - graphics.DrawEllipse(brush, rectangle); - - graphics.TranslateTransform(60, 0); - brush.Color = Color.Red; - graphics.DrawEllipse(brush, rectangle); - #endregion - - #region TilingBrush - - // Draw ellipse with tiling brush. - graphics.TranslateTransform(-120, 65); - graphics.DrawString("Tiling Brush", font, textBrush, new PointF(85, 33)); - - PdfTilingBrush tilingBrush = new PdfTilingBrush(new SizeF(10, 10)); - RectangleF rect = new RectangleF(0, 0, 10, 10); - - // Draw image on to the tiling brush. - tilingBrush.Graphics.DrawImage(image, rect); - - // Draw ellipse using tiling brush. - graphics.DrawEllipse(tilingBrush, rectangle); - - graphics.TranslateTransform(60, 0); - tilingBrush = new PdfTilingBrush(rect); - // Draw shapes inside tiling brush. - tilingBrush.Graphics.DrawEllipse(PdfPens.Yellow, rect); - tilingBrush.Graphics.DrawLine(PdfPens.Green, 0, 0, 10, 10); - tilingBrush.Graphics.DrawLine(PdfPens.Red, 0, 10, 10, 0); - graphics.DrawEllipse(tilingBrush, rectangle); - - graphics.TranslateTransform(60, 0); - rect = new RectangleF(0, 0, 20, 20); - PdfTilingBrush tilingBrushNew = new PdfTilingBrush(rect); - tilingBrushNew.Graphics.DrawEllipse(tilingBrush, rect); - graphics.DrawEllipse(tilingBrushNew, rectangle); - #endregion - - #region HatchBrush - // Draw ellipse with hatch brush. - graphics.TranslateTransform(-120, 65); - graphics.DrawString("Hatch Brush", font, textBrush, new PointF(85, 33)); - Color systemForeColor = Color.FromArgb(255, 255, 255, 0); - Color systemBackColor = Color.FromArgb(255, 78, 167, 46); - PdfHatchBrush hatchBrush = new PdfHatchBrush(PdfHatchStyle.Cross, new PdfColor(systemForeColor), new PdfColor(systemBackColor)); - - graphics.DrawEllipse(PdfPens.Black, hatchBrush, rectangle); - - graphics.TranslateTransform(60, 0); - systemForeColor = Color.FromArgb(255, 255, 0, 0); - systemBackColor = Color.FromArgb(255, 78, 0, 46); - hatchBrush = new PdfHatchBrush(PdfHatchStyle.DarkDownwardDiagonal, new PdfColor(systemForeColor), new PdfColor(systemBackColor)); graphics.DrawEllipse(brush, rectangle); - graphics.DrawEllipse(PdfPens.Black, hatchBrush, rectangle); - - graphics.TranslateTransform(60, 0); - systemForeColor = Color.FromArgb(255, 255, 0, 255); - systemBackColor = Color.FromArgb(255, 78, 100, 46); - hatchBrush = new PdfHatchBrush(PdfHatchStyle.SolidDiamond, new PdfColor(systemForeColor), new PdfColor(systemBackColor)); - graphics.DrawEllipse(PdfPens.Black, hatchBrush, rectangle); - #endregion - - - #region LinearGradientBrush - // Draw ellipse with linear gradient brush. - graphics.TranslateTransform(-120, 65); - graphics.DrawString("Linear Gradient Brush", font, textBrush, new PointF(70, 33)); - PdfColor color1 = Color.Red; - PdfColor color2 = Color.Yellow; - - // Create a new linear gradient brush. - PdfGradientBrush gradientBrush = new PdfLinearGradientBrush(rectangle.Location, (PointF)rectangle.Size, color1, color2); - - // Format before draw. - gradientBrush.AntiAlias = false; - gradientBrush.Background = Color.Green; - graphics.DrawEllipse(gradientBrush, rectangle); - - graphics.TranslateTransform(60, 0); - color2 = Color.Green; - gradientBrush = new PdfLinearGradientBrush(rectangle, color1, color2, 30f); - gradientBrush.AntiAlias = true; - graphics.DrawEllipse(gradientBrush, rectangle); - - graphics.TranslateTransform(60, 0); - color1 = Color.Yellow; - gradientBrush = new PdfLinearGradientBrush(rectangle, color1, color2, PdfLinearGradientMode.ForwardDiagonal); - graphics.DrawEllipse(gradientBrush, rectangle); - - #endregion - - #region RadialGradientBrush - // Draw ellipse with radial gradient brush. - graphics.TranslateTransform(-120, 65); - graphics.DrawString("Radial Gradient Brush", font, textBrush, new PointF(70, 33)); - color1 = Color.Red; - color2 = Color.Yellow; - - PointF point = new PointF(25, 25); - - // Create a new radial gradient brush. - gradientBrush = new PdfRadialGradientBrush(point, 50f, point, 5f, color1, color2); - - // Format before draw. - gradientBrush.AntiAlias = false; - gradientBrush.Background = Color.Green; - graphics.DrawEllipse(gradientBrush, rectangle); - #endregion - graphics.TranslateTransform(0, -250f); - PdfBrush onlyBrush = new PdfSolidBrush(Color.Black); - graphics.DrawString("PDF Brushes", font, onlyBrush, new PointF(200, 23)); - - Type type = typeof(PdfBrushes); - object[] parameters = null; - System.Reflection.PropertyInfo[] properties = type.GetProperties(); - - for (int i = 0; i < properties.Length; i++) - { - onlyBrush = (PdfSolidBrush)properties[i].GetValue(null, parameters); - graphics.DrawRectangle(onlyBrush, new RectangleF(200, 38, 50, 2)); - graphics.TranslateTransform(0, 2); - } - #endregion - - - #region PdfColorSpace - // Add a new page to the document. - page = document.Pages.Add(); - PdfGraphics g = page.Graphics; - g.DrawString("Color Spaces", font, textBrush, new PointF(100, 15)); - - //Set DeviceRGB Colorspace. - document.ColorSpace = PdfColorSpace.RGB; - page.Graphics.DrawString("Device RGB", font, textBrush, new PointF(20, 30)); - PdfBrush brush1 = PdfBrushes.Green; - g.DrawRectangle(brush1, new RectangleF(30, 45, 30, 30)); - - //Set DeviceCMYK Colorspace. - document.ColorSpace = PdfColorSpace.CMYK; - page.Graphics.DrawString("Device CMYK", font, textBrush, new PointF(100, 30)); - g.DrawEllipse(brush1, new RectangleF(110, 45, 30, 30)); - - //Set DeviceGray Colorspace. - document.ColorSpace = PdfColorSpace.GrayScale; - page.Graphics.DrawString("Device Gray", font, textBrush, new PointF(180, 30)); - g.DrawPie(brush1, new RectangleF(190, 45, 30, 30), 0, 45); - #endregion - - #region CIE Based Color Space - - #region CalRGB Color - document.ColorSpace = PdfColorSpace.RGB; - - g.DrawString("CalRGB Color", font, textBrush, new PointF(20, 82)); - - rect = new RectangleF(30, 97, 30, 30); - - // Create a new instance of PdfCalRGBColorSpace class. - PdfCalRGBColorSpace calRgbCS = new PdfCalRGBColorSpace(); - calRgbCS.Gamma = new double[] { 1.6, 1.1, 2.5 }; - calRgbCS.Matrix = new double[] { 1, 0, 0, 0, 1, 0, 0, 0, 1 }; - calRgbCS.WhitePoint = new double[] { 0.2, 1, 0.8 }; - - // Create a new instance of PdfCalRGBColor class. - PdfCalRGBColor calRGBColor = new PdfCalRGBColor(calRgbCS); - calRGBColor.Red = 0; - calRGBColor.Green = 1; - calRGBColor.Blue = 0; - - // Create brush from CalRGBColor. - PdfBrush colorSpaceBrush = new PdfSolidBrush(calRGBColor); - - // Draw using CalRGBColor brush. - g.DrawRectangle(colorSpaceBrush, rect); - #endregion - - #region CalGray Color - g.DrawString("CalGray Color", font, textBrush, new PointF(100, 82)); - rect = new RectangleF(110, 97, 30, 30); - - // Create a new instance of PdfCalGrayColorSpace class. - PdfCalGrayColorSpace calGrayCS = new PdfCalGrayColorSpace(); - calGrayCS.Gamma = 0.7; - calGrayCS.WhitePoint = new double[] { 0.2, 1, 0.8 }; - - // Create a new instance of PdfCalGrayColor class. - PdfCalGrayColor calGrayColor = new PdfCalGrayColor(calGrayCS); - calGrayColor.Gray = 0.1; - - // Create brush from PdfCalGrayColor. - colorSpaceBrush = new PdfSolidBrush(calGrayColor); - - // Draw using PdfCalGrayColor brush. - g.DrawRectangle(colorSpaceBrush, rect); - #endregion - - #region Lab Color - g.DrawString("Lab Color", font, textBrush, new PointF(180, 82)); - - rect = new RectangleF(190, 97, 30, 30); - - // Create a new instance of PdfLabColorSpace class. - PdfLabColorSpace labCS = new PdfLabColorSpace(); - labCS.Range = new double[] { 0.2, 1, 0.8, 23.5 }; - labCS.WhitePoint = new double[] { 0.2, 1, 0.8 }; - - // Create a new instance of PdfLabColor class. - PdfLabColor labColor = new PdfLabColor(labCS); - labColor.L = 90; - labColor.A = 0.5; - labColor.B = 20; - - // Create brush using PdfLabColor. - colorSpaceBrush = new PdfSolidBrush(labColor); - - // Draw using PdfLabColor brush. - g.DrawRectangle(colorSpaceBrush, rect); - #endregion - - #region ICC Color - - g.DrawString("ICC Color", font, textBrush, new PointF(20, 134)); - rect = new RectangleF(30, 149, 30, 30); - - PdfCalRGBColorSpace calRgbCS3 = new PdfCalRGBColorSpace(); - calRgbCS3.Gamma = new double[] { 7.6, 5.1, 8.5 }; - calRgbCS3.Matrix = new double[] { 1, 0, 0, 0, 1, 0, 0, 0, 1 }; - calRgbCS3.WhitePoint = new double[] { 0.7, 1, 0.8 }; - - // Read the ICC profile. - FileStream fs = new FileStream(dataPath + "rgb.icc", FileMode.Open, FileAccess.Read); - byte[] profileData = new byte[fs.Length]; - fs.Read(profileData, 0, profileData.Length); - fs.Dispose(); - - PdfICCColorSpace IccBasedCS4 = new PdfICCColorSpace(); - IccBasedCS4.ProfileData = profileData; - IccBasedCS4.AlternateColorSpace = calRgbCS3; - IccBasedCS4.ColorComponents = 3; - IccBasedCS4.Range = new double[] { 0.0, 1.0, 0.0, 1.0, 0.0, 1.0 }; - PdfICCColor red4 = new PdfICCColor(IccBasedCS4); - red4.ColorComponents = new double[] { 1, 0, 1 }; - colorSpaceBrush = new PdfSolidBrush(red4); - - g.DrawRectangle(colorSpaceBrush, rect); - - #endregion - - #region Separation Color - - g.DrawString("Separation Color", font, textBrush, new PointF(100, 134)); - rect = new RectangleF(110, 149, 30, 30); - - PdfExponentialInterpolationFunction function = new PdfExponentialInterpolationFunction(true); - float[] numArray = new float[3]; - numArray[0] = 90f; - numArray[1] = 0.5f; - numArray[2] = 20f; - function.C1 = numArray; - - PdfLabColorSpace calLabCS8 = new PdfLabColorSpace(); - calLabCS8.Range = new double[] { 0.2, 1, 0.8, 23.5 }; - calLabCS8.WhitePoint = new double[] { 0.2, 1, 0.8 }; - - PdfSeparationColorSpace colorspace8 = new PdfSeparationColorSpace(); - colorspace8.AlternateColorSpaces = calLabCS8; - colorspace8.TintTransform = function; - colorspace8.Colorant = "PANTONE Orange 021 C"; - PdfSeparationColor color8 = new PdfSeparationColor(colorspace8); - color8.Tint = 0.7; - - colorSpaceBrush = new PdfSolidBrush(color8); - g.DrawRectangle(colorSpaceBrush, rect); - - #endregion - - #region Indexed Color - - g.DrawString("Indexed Color", font, textBrush, new PointF(180, 134)); - rect = new RectangleF(190, 149, 30, 30); - - PdfIndexedColorSpace colorspace7 = new PdfIndexedColorSpace(); - colorspace7.BaseColorSpace = new PdfDeviceColorSpace(PdfColorSpace.RGB); - colorspace7.MaxColorIndex = 3; - colorspace7.IndexedColorTable = new byte[] { 150, 0, 222, 255, 0, 0, 0, 255, 0, 0, 0, 255 }; - - PdfIndexedColor color7 = new PdfIndexedColor(colorspace7); - color7.SelectColorIndex = 3; - - colorSpaceBrush = new PdfSolidBrush(color7); - g.DrawRectangle(colorSpaceBrush, rect); - - #endregion - - #endregion - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - - document.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the PDF document. - document.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "GraphicBrushes.pdf"; - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Pdf/HeadersandFooters.cshtml b/Pages/Pdf/HeadersandFooters.cshtml deleted file mode 100644 index 1333b2c4..00000000 --- a/Pages/Pdf/HeadersandFooters.cshtml +++ /dev/null @@ -1,47 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.HeadersandFooters - -@section ControlsSection{ -
- @{Html.BeginForm("headersandfooters", "pdf", FormMethod.Post); - { -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
-
-
-
- -
-
-
-
- - Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates adding headers and footers with images, text, and shapes in all pages of the document. -
-} -@section Meta{ - - } -@section Description{ -
- The Essential PDF also supports composite fields for adding page number, total pages and more. - More information about the document settings can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - Headers and Footers Example - Syncfusion Demos - } -@section Header{ -

Example of Headers and Footers in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/HeadersandFooters.cshtml.cs b/Pages/Pdf/HeadersandFooters.cshtml.cs deleted file mode 100644 index ab306720..00000000 --- a/Pages/Pdf/HeadersandFooters.cshtml.cs +++ /dev/null @@ -1,326 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using System.Text; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class HeadersandFooters : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public HeadersandFooters(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - # region Private Members - private bool m_paginateStart = true; - RectangleF bounds; - private RectangleF m_columnBounds; - # endregion - - public ActionResult OnPost(string InsideBrowser) - { - //Create a PDF document - PdfDocument doc = new PdfDocument(); - - //Add a page - PdfPage page = doc.Pages.Add(); - RectangleF rect = new RectangleF(0, 0, page.GetClientSize().Width, 50); - - PdfSolidBrush brush = new PdfSolidBrush(Color.Black); - PdfPen pen = new PdfPen(Color.Black, 1f); - - //Create font - PdfStandardFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 11.5f); - - PdfFont heading = new PdfStandardFont(PdfFontFamily.Courier, 14, PdfFontStyle.Bold); - - //Adding Header - this.AddDocumentHeader(doc, "Syncfusion Essential PDF", "Header and Footer Demo"); - - //Adding Footer - this.AddDocumentFooter(doc, "@Copyright 2015"); - - //Set formats - PdfStringFormat format = new PdfStringFormat(); - format.Alignment = PdfTextAlignment.Justify; - - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Read the file - FileStream file = new FileStream(dataPath + "Essential studio.txt", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - - StreamReader reader = new StreamReader(file, Encoding.ASCII); - - string text = reader.ReadToEnd(); - reader.Dispose(); - - RectangleF column = new RectangleF(0, 20, page.Graphics.ClientSize.Width / 2f - 10f, - page.Graphics.ClientSize.Height); - bounds = column; - m_columnBounds = column; - - //Create text element to control the text flow - PdfTextElement element = new PdfTextElement(text, font); - element.Brush = new PdfSolidBrush(Color.Black); - element.StringFormat = format; - PdfLayoutFormat layoutFormat = new PdfLayoutFormat(); - layoutFormat.Break = PdfLayoutBreakType.FitPage; - layoutFormat.Layout = PdfLayoutType.Paginate; - - //Get the remaining text that flows beyond the boundary. - PdfTextLayoutResult result = element.Draw(page, bounds, layoutFormat); - - file = new FileStream(dataPath + "Essential PDF.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - reader = new StreamReader(file, Encoding.ASCII); - text = reader.ReadToEnd(); - reader.Dispose(); - - element = new PdfTextElement(text, font); - element.Brush = new PdfSolidBrush(Color.Black); - element.StringFormat = format; - - // Next paragraph flow from last line of the previous paragraph. - bounds.Y = result.LastLineBounds.Y + 35f; - - //Raise the event when the text flows to next page. - element.BeginPageLayout += new BeginPageLayoutEventHandler(BeginPageLayout2); - - //Raise the event when the text reaches the end of the page. - element.EndPageLayout += new EndPageLayoutEventHandler(EndPageLayout2); - result.Page.Graphics.DrawString("Essential PDF", heading, PdfBrushes.DarkBlue, new PointF(bounds.X, bounds.Y)); - - bounds.Y = result.LastLineBounds.Y + 60f; - result = element.Draw(result.Page, new RectangleF(bounds.X, bounds.Y, bounds.Width, -1), layoutFormat); - - file = new FileStream(dataPath + "Essen PDF.jpg", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - PdfImage image = new PdfBitmap(file); - bounds.Y = result.LastLineBounds.Y + 20f; - bounds.X = bounds.Width + 20f; - - result.Page.Graphics.DrawImage(image, new PointF(bounds.X, bounds.Y)); - result.Page.Graphics.DrawString("Essential DocIO", heading, PdfBrushes.DarkBlue, - new PointF(bounds.X, bounds.Y + image.Height)); - file = new FileStream(dataPath + "Essential DocIO.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - reader = new StreamReader(file, Encoding.ASCII); - text = reader.ReadToEnd(); - reader.Dispose(); - - element = new PdfTextElement(text, font); - element.Brush = new PdfSolidBrush(Color.Black); - element.StringFormat = format; - - bounds.Y = result.LastLineBounds.Y + image.Height + 40; - bounds.X = bounds.Width + 20f; - - result = element.Draw(result.Page, new RectangleF(bounds.X, bounds.Y, bounds.Width, -1), layoutFormat); - file = new FileStream(dataPath + "Essen DocIO.jpg", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - image = new PdfBitmap(file); - bounds.Y = result.LastLineBounds.Y + 20f; - bounds.X = bounds.Width + 20f; - - result.Page.Graphics.DrawImage(image, new PointF(bounds.X, bounds.Y)); - - file = new FileStream(dataPath + "Essential XlsIO.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - reader = new StreamReader(file, Encoding.ASCII); - text = reader.ReadToEnd(); - reader.Dispose(); - - element = new PdfTextElement(text, font); - element.Brush = new PdfSolidBrush(Color.Black); - element.StringFormat = format; - - result.Page.Graphics.DrawString("Essential XlsIO", heading, PdfBrushes.DarkBlue, - new PointF(bounds.X, bounds.Y + image.Height)); - - bounds.Y = result.LastLineBounds.Y + image.Height + 40; - bounds.X = bounds.Width + 20f; - result = element.Draw(result.Page, new RectangleF(bounds.X, bounds.Y, bounds.Width, -1), layoutFormat); - file = new FileStream(dataPath + "Essen XlsIO.jpg", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - image = new PdfBitmap(file); - bounds.Y = result.LastLineBounds.Y + 20f; - bounds.X = bounds.Width + 20f; - - result.Page.Graphics.DrawImage(image, new PointF(bounds.X, bounds.Y)); - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - doc.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the PDF document. - doc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "HeadersAndFooters.pdf"; - return fileStreamResult; - } - private void EndPageLayout2(object sender, EndPageLayoutEventArgs e) - { - EndTextPageLayoutEventArgs args = (EndTextPageLayoutEventArgs)e; - PdfTextLayoutResult tlr = args.Result; - RectangleF bounds = tlr.Bounds; - args.NextPage = tlr.Page; - } - private void BeginPageLayout2(object sender, BeginPageLayoutEventArgs e) - { - RectangleF bounds = e.Bounds; - - // First column. - if (!m_paginateStart) - { - bounds.X = bounds.Width + 20f; - bounds.Y = 10f; - } - else - { - // Second column. - bounds.X = 0f; - m_paginateStart = false; - } - - e.Bounds = bounds; - m_columnBounds = bounds; - } - # region Helper Methods - - /// - /// Adds header to the document - /// - /// - /// - /// - private void AddDocumentHeader(PdfDocument doc, string title, string description) - { - RectangleF rect = new RectangleF(0, 0, doc.Pages[0].GetClientSize().Width, 50); - - //Create page template - PdfPageTemplateElement header = new PdfPageTemplateElement(rect); - PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 24); - float doubleHeight = font.Height * 2; - Color activeColor = Color.FromArgb(44, 71, 120); - SizeF imageSize = new SizeF(110f, 35f); - //Locating the logo on the right corner of the Drawing Surface - PointF imageLocation = new PointF(doc.Pages[0].GetClientSize().Width - imageSize.Width - 20, 5); - - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Read the file - FileStream file = new FileStream(dataPath + "logo.png", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - PdfImage img = new PdfBitmap(file); - - //Draw the image in the Header. - header.Graphics.DrawImage(img, imageLocation, imageSize); - - PdfSolidBrush brush = new PdfSolidBrush(activeColor); - - PdfPen pen = new PdfPen(Color.DarkBlue, 3f); - font = new PdfStandardFont(PdfFontFamily.Helvetica, 16, PdfFontStyle.Bold); - - //Set formattings for the text - PdfStringFormat format = new PdfStringFormat(); - format.Alignment = PdfTextAlignment.Center; - format.LineAlignment = PdfVerticalAlignment.Middle; - - //Draw title - header.Graphics.DrawString(title, font, brush, new RectangleF(0, 0, header.Width, header.Height), format); - brush = new PdfSolidBrush(Color.Gray); - font = new PdfStandardFont(PdfFontFamily.Helvetica, 6, PdfFontStyle.Bold); - - format = new PdfStringFormat(); - format.Alignment = PdfTextAlignment.Left; - format.LineAlignment = PdfVerticalAlignment.Bottom; - - //Draw description - header.Graphics.DrawString(description, font, brush, new RectangleF(0, 0, header.Width, header.Height - 8), - format); - - //Draw some lines in the header - pen = new PdfPen(Color.DarkBlue, 0.7f); - header.Graphics.DrawLine(pen, 0, 0, header.Width, 0); - pen = new PdfPen(Color.DarkBlue, 2f); - header.Graphics.DrawLine(pen, 0, 03, header.Width + 3, 03); - pen = new PdfPen(Color.DarkBlue, 2f); - header.Graphics.DrawLine(pen, 0, header.Height - 3, header.Width, header.Height - 3); - header.Graphics.DrawLine(pen, 0, header.Height, header.Width, header.Height); - - //Add header template at the top. - doc.Template.Top = header; - } - - /// - /// Adds footer to the document - /// - /// - /// - private void AddDocumentFooter(PdfDocument doc, string footerText) - { - RectangleF rect = new RectangleF(0, 0, doc.Pages[0].GetClientSize().Width, 50); - - //Create a page template - PdfPageTemplateElement footer = new PdfPageTemplateElement(rect); - PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 8); - - PdfSolidBrush brush = new PdfSolidBrush(Color.Gray); - - PdfPen pen = new PdfPen(Color.DarkBlue, 3f); - font = new PdfStandardFont(PdfFontFamily.Helvetica, 6, PdfFontStyle.Bold); - PdfStringFormat format = new PdfStringFormat(); - format.Alignment = PdfTextAlignment.Center; - format.LineAlignment = PdfVerticalAlignment.Middle; - footer.Graphics.DrawString(footerText, font, brush, new RectangleF(0, 18, footer.Width, footer.Height), format); - - format = new PdfStringFormat(); - format.Alignment = PdfTextAlignment.Right; - format.LineAlignment = PdfVerticalAlignment.Bottom; - - //Create page number field - PdfPageNumberField pageNumber = new PdfPageNumberField(font, brush); - - //Create page count field - PdfPageCountField count = new PdfPageCountField(font, brush); - - //Create author field - PdfDocumentAuthorField authorField = new PdfDocumentAuthorField(font, brush); - - footer.Graphics.DrawString("Page\tof", font, brush, new RectangleF(0, 0, footer.Width - 8, footer.Height - 8), - format); - //Draw current page number - pageNumber.Draw(footer.Graphics, new PointF(496, 35)); - - //Draw number of pages - count.Draw(footer.Graphics, new PointF(510, 35)); - - //Draw number of pages - authorField.Draw(footer.Graphics, new PointF(320, 35)); - - //Add the footer template at the bottom - doc.Template.Bottom = footer; - } - #endregion -} \ No newline at end of file diff --git a/Pages/Pdf/HelloWorld.cshtml b/Pages/Pdf/HelloWorld.cshtml deleted file mode 100644 index e1ce2f8a..00000000 --- a/Pages/Pdf/HelloWorld.cshtml +++ /dev/null @@ -1,55 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.HelloWorld - -@using Syncfusion.EJ2 - -@{ var Title = "Essential PDF : Hello World : Syncfusion"; } - -@section ControlsSection{ - -
- @{Html.BeginForm("helloworld", "pdf", FormMethod.Post); - { -
-
-
- - - - - - - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
- -
-
-
-
- Html.EndForm(); - }} -
-} -@section ActionDescription{ -

- This sample demonstrates the creation of simple PDF document. It draws the string “Hello world!” in the desired location using the PDF standard font. -

-} -@section Meta{ - - } -@section Description{ -

- It is also possible to draw different language of text with different fonts using TrueType fonts and CJK fonts. -

-} -@section Title{ - ASP.NET Core PDF library - Hello World Example - Syncfusion Demos - } -@section Header{ -

Example of Hello World in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/HelloWorld.cshtml.cs b/Pages/Pdf/HelloWorld.cshtml.cs deleted file mode 100644 index f25034c1..00000000 --- a/Pages/Pdf/HelloWorld.cshtml.cs +++ /dev/null @@ -1,52 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class HelloWorld : PageModel -{ - public void OnGet() - { - - } - PdfDocument document; - public ActionResult OnPost(string Browser) - { - document = new PdfDocument(); - //Add a page - PdfPage page = document.Pages.Add(); - - //Create Pdf graphics for the page - PdfGraphics g = page.Graphics; - - //Create a solid brush - PdfBrush brush = new PdfSolidBrush(new PdfColor(0, 0, 0)); - - //Set the font - PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 36); - - //Draw the text - g.DrawString("Hello world!", font, brush, new PointF(20, 20)); - - //Saving the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - document.Save(ms); - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "Sample.pdf"; - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Pdf/ImageExtraction.cshtml b/Pages/Pdf/ImageExtraction.cshtml deleted file mode 100644 index 804bcc9d..00000000 --- a/Pages/Pdf/ImageExtraction.cshtml +++ /dev/null @@ -1,54 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.ImageExtraction - -@section ControlsSection{ -
- @{Html.BeginForm("imageextraction", "pdf", FormMethod.Post); - { - -
- - Click the button to view an PDF document generated by Essential PDF. Please note - that Microsoft Word or its equivalent is required to view the resultant document. - -
-
-
-
- - - - -
-
- - -
-
-
-
- - Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to extract images from the PDF document. The extracted images can be saved into any raster image format. -
-} -@section Meta{ - - } -@section Description{ -
- This feature will be used to extract the images from the PDF document for further processing such as OCR (Optical Character Recognition) scanned images and enhance the photos for replacing the images and so on for indexing and archiving purpose. More information about the image extraction can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - Image Extraction Example - Syncfusion Demos - } -@section Header{ -

Example of Image Extraction in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/ImageExtraction.cshtml.cs b/Pages/Pdf/ImageExtraction.cshtml.cs deleted file mode 100644 index 8d82f121..00000000 --- a/Pages/Pdf/ImageExtraction.cshtml.cs +++ /dev/null @@ -1,50 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Pdf.Parsing; -using Syncfusion.Pdf.Exporting; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class ImageExtraction : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public ImageExtraction(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public IActionResult OnPost(string ViewTemplate, string Extract) - { - string basePath = _hostingEnvironment.WebRootPath; - FileStream fileStreamInput = new FileStream(basePath + @"/PDF/ImageTemplate.pdf", FileMode.Open, FileAccess.Read); - if (!string.IsNullOrEmpty(ViewTemplate)) - { - FileStreamResult fileStreamResult = new FileStreamResult(fileStreamInput, "application/pdf"); - fileStreamResult.FileDownloadName = "Template.pdf"; - return fileStreamResult; - } - else if (!string.IsNullOrEmpty(Extract)) - { - PdfLoadedDocument loadedDocument = new PdfLoadedDocument(fileStreamInput); - Stream[] extractedImages = loadedDocument.Pages[0].ExtractImages(); - MemoryStream imageStream = extractedImages[0] as MemoryStream; - imageStream.Position = 0; - FileStreamResult fileStreamResult = new FileStreamResult(imageStream, "image/jpeg"); - fileStreamResult.FileDownloadName = "Sample.jpg"; - return fileStreamResult; - } - - return null; - // return View(); - } -} \ No newline at end of file diff --git a/Pages/Pdf/ImageInsertion.cshtml b/Pages/Pdf/ImageInsertion.cshtml deleted file mode 100644 index 68adadfd..00000000 --- a/Pages/Pdf/ImageInsertion.cshtml +++ /dev/null @@ -1,48 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.ImageInsertion - -@section ControlsSection{ -
- @{Html.BeginForm("imageinsertion", "pdf", FormMethod.Post); - { -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
-
-
-
- -
-
-
-
- - Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates insertion of various raster and vector images (JPEG, PNG, TIFF, EMF, and GIF) in the PDF document. - This sample also demonstrates the image masking capability in the Essential PDF library. -
-} -@section Meta{ - - } -@section Description{ -
- It is also possible to rotate and paginate the images in the PDF document. - More information about the images can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - Image Insertion Example - Syncfusion Demos - } -@section Header{ -

Example of Image Insertion in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/ImageInsertion.cshtml.cs b/Pages/Pdf/ImageInsertion.cshtml.cs deleted file mode 100644 index 2166ebd4..00000000 --- a/Pages/Pdf/ImageInsertion.cshtml.cs +++ /dev/null @@ -1,77 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class ImageInsertion : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public ImageInsertion(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Browser) - { - string dataPath = _hostingEnvironment.WebRootPath + @"/PDF/"; - - // Create a new instance of PdfDocument class. - PdfDocument document = new PdfDocument(); - - // Add a new page to the newly created document. - PdfPage page = document.Pages.Add(); - - PdfStandardFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 12, PdfFontStyle.Bold); - - PdfGraphics g = page.Graphics; - - g.DrawString("JPEG Image", font, PdfBrushes.Blue, new Syncfusion.Drawing.PointF(0, 40)); - - //Load JPEG image to stream. - FileStream jpgImageStream = new FileStream(dataPath + "Xamarin_JPEG.jpg", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - //Load the JPEG image - PdfImage jpgImage = new PdfBitmap(jpgImageStream); - - //Draw the JPEG image - g.DrawImage(jpgImage,new Syncfusion.Drawing.RectangleF(0,70,515,215)); - - g.DrawString("PNG Image", font, PdfBrushes.Blue, new Syncfusion.Drawing.PointF(0, 355)); - - //Load PNG image to stream. - FileStream pngImageStream = new FileStream(dataPath + "Xamarin_PNG.png", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - //Load the PNG image - PdfImage pngImage = new PdfBitmap(pngImageStream); - - g.DrawImage(pngImage,new Syncfusion.Drawing.RectangleF(0,365,199,300)); - - MemoryStream stream = new MemoryStream(); - - //Save the PDF document - document.Save(stream); - - stream.Position = 0; - - //Close the PDF document - document.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/pdf"); - fileStreamResult.FileDownloadName = "ImageInsertion.pdf"; - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Pdf/ImageToPDF.cshtml b/Pages/Pdf/ImageToPDF.cshtml deleted file mode 100644 index 4324a35f..00000000 --- a/Pages/Pdf/ImageToPDF.cshtml +++ /dev/null @@ -1,98 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.ImageToPDF - -@section ControlsSection { -
- @{ - var pageSize = new string[] { "Fit", "A4", "Letter" }; - var pageMargin = new string[] { "No margin", "Small", "Large" }; - var pageOrientation = new string[] { "Default", "Portrait", "Landscape" }; - } - @{Html.BeginForm("imagetopdf", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" }); - { - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
- Select the image files to convert into PDF document -
-
-
- -
- -
-

- @Html.Label("", (string)Model.lab) -

-
- -
- - - - - - - - - - -
- Page Size  :               - - - -
- Page Orientation  :   - - - -
- Page Margin  :          - - - -
-
- -
-
-
-
-
- -
-
-
- -
- - - Html.EndForm(); - } - } -
-} -@section ActionDescription { -
- This sample demonstrates to converter various raster images (JPEG, PNG, TIFF, and GIF) to a PDF document. -
-} -@section Meta { - -} -@section Description { -
- It is also possible to add margins and customize the page size based on the images. - More information about the images can be found in this documentation section. -
-} -@section Title { - ASP.NET Core PDF library - Image to PDF Example - Syncfusion Demos -} -@section Header { -

Example of Image to PDF in ASP.NET Core PDF Library

-} \ No newline at end of file diff --git a/Pages/Pdf/ImageToPDF.cshtml.cs b/Pages/Pdf/ImageToPDF.cshtml.cs deleted file mode 100644 index 7947c970..00000000 --- a/Pages/Pdf/ImageToPDF.cshtml.cs +++ /dev/null @@ -1,117 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class ImageToPDF : PageModel -{ - public void OnGet() - { - - } - - public string lab { get; set; } - - public ActionResult OnPost(string Browser, string pageSize, string pageOrientation, string margin) - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - //Create a new PDF document - PdfDocument document = new PdfDocument(); - - for (int i = 0; i < Request.Form.Files.Count; i++) - { - if (Request.Form.Files[i].ContentType.Contains("image/")) - { - //Load the image from the file - Stream imageStream = Request.Form.Files[i].OpenReadStream(); - - PdfTiffImage image = new PdfTiffImage(imageStream); - - PdfSection section = document.Sections.Add(); - - SizeF pageSizeF = GetPdfPageSize(pageSize); - - //Set the page size - section.PageSettings.Size = pageSizeF == SizeF.Empty ? image.PhysicalDimension : pageSizeF; - - if (pageOrientation != "Default") - { - //Set the page orientation - section.PageSettings.Orientation = pageOrientation == "Portrait" - ? PdfPageOrientation.Portrait - : PdfPageOrientation.Landscape; - } - - //Set the page margins - section.PageSettings.Margins.All = GetPdfMargin(margin); - - //Create a new PDF page - PdfPage page = section.Pages.Add(); - - //Draw the image on the PDF page - page.Graphics.DrawImage(image, 0, 0, page.GetClientSize().Width, page.GetClientSize().Height); - - //Close the image stream - imageStream.Dispose(); - } - } - //Create a new memory stream - - MemoryStream stream = new MemoryStream(); - - //Save the PDF document - document.Save(stream); - - stream.Position = 0; - - //Close the PDF document - document.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/pdf"); - fileStreamResult.FileDownloadName = "ImageToPDF.pdf"; - return fileStreamResult; - } - else - { - lab = "Choose a valid image files to convert into PDF document."; - return null; - // return View(); - } - } - private SizeF GetPdfPageSize(string pageSize) - { - switch (pageSize) - { - case "A4": - return PdfPageSize.A4; - case "Letter": - return PdfPageSize.Letter; - default: - return SizeF.Empty; - } - } - private float GetPdfMargin(string margin) - { - switch (margin) - { - case "Small": - return 20; - case "Large": - return 40; - default: - return 0; - } - } -} \ No newline at end of file diff --git a/Pages/Pdf/InteractiveFeatures.cshtml b/Pages/Pdf/InteractiveFeatures.cshtml deleted file mode 100644 index b5be7168..00000000 --- a/Pages/Pdf/InteractiveFeatures.cshtml +++ /dev/null @@ -1,48 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.InteractiveFeatures - -@using Syncfusion.EJ2; - -@{ var Title = "Essential PDF : Interactive Features : Syncfusion"; } - -@section ControlsSection{ -
- @{Html.BeginForm("interactivefeatures", "pdf", FormMethod.Post); - { -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
-
-
-
- -
-
-
-
- Html.EndForm(); - }} -
-} -@section ActionDescription{ -

- This sample demonstrates the creation of interactive invoice with attachment, product total price calculation based on the quantity using PDF JavaScript -

-} -@section Meta{ - -} -@section Description{ -

- This example can be used in the real-time invoice generation with print, submit online, or mail the order functionalities. -

-} -@section Title{ - ASP.NET Core PDF library - Interactive Features Example - Syncfusion Demos -} -@section Header{ -

Example of Interactive Features in ASP.NET Core PDF Library

-} \ No newline at end of file diff --git a/Pages/Pdf/InteractiveFeatures.cshtml.cs b/Pages/Pdf/InteractiveFeatures.cshtml.cs deleted file mode 100644 index f4b0b8e6..00000000 --- a/Pages/Pdf/InteractiveFeatures.cshtml.cs +++ /dev/null @@ -1,351 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Pdf.Interactive; -using Syncfusion.Pdf.Tables; -using System.Xml.Linq; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class InteractiveFeatures : PageModel -{ - public void OnGet() - { - - } - PdfPage interactivePage; - PdfDocument document; - private readonly IWebHostEnvironment _hostingEnvironment; - public InteractiveFeatures(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - [HttpPost] - public ActionResult OnPost(string InsideBrowser) - { - #region Field Definitions - - document = new PdfDocument(); - document.PageSettings.Margins.All = 0; - document.PageSettings.Size = new SizeF(PdfPageSize.A4.Width, 600); - interactivePage = document.Pages.Add(); - PdfGraphics g = interactivePage.Graphics; - RectangleF rect = new RectangleF(0, 0, interactivePage.Graphics.ClientSize.Width, 100); - PdfColor white = new PdfColor(255, 255, 255); - PdfBrush whiteBrush = new PdfSolidBrush(white); - PdfPen whitePen = new PdfPen(white, 5); - PdfBrush purpleBrush = new PdfSolidBrush(new PdfColor(255, 158, 0, 160)); - PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 25); - Syncfusion.Drawing.Color maroonColor = Color.FromArgb(255, 188, 32, 60); - Syncfusion.Drawing.Color orangeColor = Color.FromArgb(255, 255, 167, 73); - - #endregion - - #region Header - - g.DrawRectangle(purpleBrush, rect); - g.DrawPie(whitePen, whiteBrush, new RectangleF(-20, 35, 700, 200), 20, -180); - g.DrawRectangle(whiteBrush, new RectangleF(0, 99.5f, 700, 200)); - g.DrawString("Invoice", new PdfStandardFont(PdfFontFamily.TimesRoman, 24), PdfBrushes.White, - new PointF(500, 10)); - - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Read the file - FileStream file = new FileStream(dataPath + "AdventureCycle.jpg", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - - g.DrawImage(PdfImage.FromStream(file), new RectangleF(100, 70, 390, 130)); - - #endregion - - #region Body - - //Invoice Number - Random invoiceNumber = new Random(); - g.DrawString("Invoice No: " + invoiceNumber.Next().ToString(), new PdfStandardFont(PdfFontFamily.Helvetica, 14), - new PdfSolidBrush(maroonColor), new PointF(50, 210)); - g.DrawString("Date: ", new PdfStandardFont(PdfFontFamily.Helvetica, 14), new PdfSolidBrush(maroonColor), - new PointF(350, 210)); - - //Current Date - PdfTextBoxField textBoxField = new PdfTextBoxField(interactivePage, "date"); - textBoxField.Font = new PdfStandardFont(PdfFontFamily.Helvetica, 12); - textBoxField.Bounds = new RectangleF(384, 204, 150, 30); - textBoxField.ForeColor = new PdfColor(maroonColor); - textBoxField.ReadOnly = true; - document.Actions.AfterOpen = new PdfJavaScriptAction(@"var newdate = new Date(); - var thisfieldis = this.getField('date'); - - var theday = util.printd('dddd',newdate); - var thedate = util.printd('d',newdate); - var themonth = util.printd('mmmm',newdate); - var theyear = util.printd('yyyy',newdate); - - thisfieldis.strokeColor=color.transparent; - thisfieldis.value = theday + ' ' + thedate + ', ' + themonth + ' ' + theyear ;"); - document.Form.Fields.Add(textBoxField); - - //invoice table - PdfLightTable table = new PdfLightTable(); - table.Style.ShowHeader = true; - g.DrawRectangle(new PdfSolidBrush(Syncfusion.Drawing.Color.FromArgb(238, 238, 238, 248)), - new RectangleF(50, 240, 500, 140)); - - //Header Style - PdfCellStyle headerStyle = new PdfCellStyle(); - headerStyle.Font = new PdfStandardFont(PdfFontFamily.Helvetica, 12, PdfFontStyle.Bold); - headerStyle.TextBrush = whiteBrush; - headerStyle.StringFormat = new PdfStringFormat(PdfTextAlignment.Center); - headerStyle.BackgroundBrush = new PdfSolidBrush(orangeColor); - headerStyle.BorderPen = new PdfPen(whiteBrush, 0); - table.Style.HeaderStyle = headerStyle; - - //Cell Style - PdfCellStyle bodyStyle = new PdfCellStyle(); - bodyStyle.Font = new PdfStandardFont(PdfFontFamily.Helvetica, 10); - bodyStyle.StringFormat = new PdfStringFormat(PdfTextAlignment.Left); - bodyStyle.BorderPen = new PdfPen(whiteBrush, 0); - table.Style.DefaultStyle = bodyStyle; - table.DataSource = GetProductReport(_hostingEnvironment.WebRootPath); - table.Columns[0].Width = 90; - table.Columns[1].Width = 160; - table.Columns[3].Width = 100; - table.Columns[4].Width = 65; - table.Style.CellPadding = 3; - table.BeginCellLayout += table_BeginCellLayout; - - PdfLightTableLayoutResult result = table.Draw(interactivePage, new RectangleF(50, 240, 500, 140)); - - g.DrawString("Grand Total:", new PdfStandardFont(PdfFontFamily.Helvetica, 12), - new PdfSolidBrush(Syncfusion.Drawing.Color.FromArgb(255, 255, 167, 73)), - new PointF(result.Bounds.Right - 150, result.Bounds.Bottom)); - CreateTextBox(interactivePage, "GrandTotal", "Grand Total", - new RectangleF(result.Bounds.Width - 15, result.Bounds.Bottom - 2, 66, 18), true, ""); - - - //Send to Server - PdfButtonField sendButton = new PdfButtonField(interactivePage, "OrderOnline"); - sendButton.Bounds = new RectangleF(200, result.Bounds.Bottom + 70, 80, 25); - sendButton.BorderColor = white; - sendButton.BackColor = maroonColor; - sendButton.ForeColor = white; - sendButton.Text = "Order Online"; - PdfSubmitAction submitAction = new PdfSubmitAction("http://stevex.net/dump.php"); - submitAction.DataFormat = SubmitDataFormat.Html; - sendButton.Actions.MouseUp = submitAction; - document.Form.Fields.Add(sendButton); - - //Order by Mail - PdfButtonField sendMail = new PdfButtonField(interactivePage, "sendMail"); - sendMail.Bounds = new RectangleF(300, result.Bounds.Bottom + 70, 80, 25); - sendMail.Text = "Order By Mail"; - sendMail.BorderColor = white; - sendMail.BackColor = maroonColor; - sendMail.ForeColor = white; - - // Create a javascript action. - PdfJavaScriptAction javaAction = new PdfJavaScriptAction( - "address = app.response(\"Enter an e-mail address.\",\"SEND E-MAIL\",\"\");" - + "var aSubmitFields = [];" - + "for( var i = 0 ; i < this.numFields; i++){" - + "aSubmitFields[i] = this.getNthFieldName(i);" - + "}" - + "if (address){ cmdLine = \"mailto:\" + address;this.submitForm(cmdLine,true,false,aSubmitFields);}"); - - sendMail.Actions.MouseUp = javaAction; - document.Form.Fields.Add(sendMail); - - //Print - PdfButtonField printButton = new PdfButtonField(interactivePage, "print"); - printButton.Bounds = new RectangleF(400, result.Bounds.Bottom + 70, 80, 25); - printButton.BorderColor = white; - printButton.BackColor = maroonColor; - printButton.ForeColor = white; - printButton.Text = "Print"; - printButton.Actions.MouseUp = new PdfJavaScriptAction("this.print (true); "); - document.Form.Fields.Add(printButton); - file = new FileStream(dataPath + "Product Catalog.pdf", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - PdfAttachment attachment = new PdfAttachment("Product Catalog.pdf", file); - attachment.ModificationDate = DateTime.Now; - attachment.Description = "Specification"; - document.Attachments.Add(attachment); - - //Open Specification - PdfButtonField openSpecificationButton = new PdfButtonField(interactivePage, "openSpecification"); - openSpecificationButton.Bounds = new RectangleF(50, result.Bounds.Bottom + 20, 87, 15); - openSpecificationButton.TextAlignment = PdfTextAlignment.Left; - openSpecificationButton.Font = new PdfStandardFont(PdfFontFamily.Helvetica, 10); - openSpecificationButton.BorderStyle = PdfBorderStyle.Underline; - openSpecificationButton.BorderColor = orangeColor; - openSpecificationButton.BackColor = new PdfColor(255, 255, 255); - openSpecificationButton.ForeColor = orangeColor; - openSpecificationButton.Text = "Open Specification"; - openSpecificationButton.Actions.MouseUp = - new PdfJavaScriptAction("this.exportDataObject({ cName: 'Product Catalog.pdf', nLaunch: 2 });"); - document.Form.Fields.Add(openSpecificationButton); - - RectangleF uriAnnotationRectangle = new RectangleF(interactivePage.Graphics.ClientSize.Width - 160, - interactivePage.Graphics.ClientSize.Height - 30, 80, 20); - PdfTextWebLink linkAnnot = new PdfTextWebLink(); - linkAnnot.Url = "http://www.adventure-works.com"; - linkAnnot.Text = "http://www.adventure-works.com"; - linkAnnot.Font = new PdfStandardFont(PdfFontFamily.Helvetica, 8); - linkAnnot.Brush = PdfBrushes.White; - linkAnnot.DrawTextWebLink(interactivePage, uriAnnotationRectangle.Location); - - #endregion - - #region Footer - - g.DrawRectangle(purpleBrush, - new RectangleF(0, interactivePage.Graphics.ClientSize.Height - 100, - interactivePage.Graphics.ClientSize.Width, 100)); - g.DrawPie(whitePen, whiteBrush, new RectangleF(-20, interactivePage.Graphics.ClientSize.Height - 250, 700, 200), - 0, 180); - - #endregion - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - - document.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the PDF document. - document.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "Interactive features.pdf"; - return fileStreamResult; - } - #region Helper Methods - - void table_BeginCellLayout(object sender, BeginCellLayoutEventArgs args) - { - if (args.CellIndex == 2 && args.RowIndex > -1) - { - CreateTextBox(interactivePage, "price" + args.RowIndex.ToString(), "Price", args.Bounds, true, args.Value); - args.Skip = true; - - } - else if (args.CellIndex == 3 && args.RowIndex == -1) - { - PdfPopupAnnotation popupAnnotation = new PdfPopupAnnotation( - new RectangleF(args.Bounds.Right - 18, args.Bounds.Top + 2, 1, 1), - "Please enter a validate interger between 1 to 50"); - popupAnnotation.Border.Width = 4; - popupAnnotation.Open = false; - popupAnnotation.Border.HorizontalRadius = 10; - popupAnnotation.Border.VerticalRadius = 10; - popupAnnotation.Icon = PdfPopupIcon.Comment; - interactivePage.Annotations.Add(popupAnnotation); - } - else if (args.CellIndex == 3 && args.RowIndex > -1) - { - PdfTextBoxField textBoxField = new PdfTextBoxField(interactivePage, "quantity" + args.RowIndex.ToString()); - - - //Set properties to the textbox. - textBoxField.Font = new PdfStandardFont(PdfFontFamily.Helvetica, 12); - ; - textBoxField.BorderColor = new PdfColor(255, 255, 255); - textBoxField.BackColor = Syncfusion.Drawing.Color.FromArgb(255, 238, 238, 248); - textBoxField.Bounds = args.Bounds; - textBoxField.Text = "0"; - PdfJavaScriptAction action = new PdfJavaScriptAction(@"event.rc = event.value > -1 && event.value < 51; - var f = this.getField('price" + args.RowIndex.ToString() + @"') - var f1 = this.getField('quantity" + args.RowIndex.ToString() + @"') - var f2 = this.getField('TotalPrice" + args.RowIndex.ToString() + @"') - var f3 = this.getField('GrandTotal'); - if(!event.rc) - { - - f1.fillColor=color.red; - app.beep(); - } - else - { - f1.fillColor = color.transparent; - f2.value = f1.value * f.value; - f3.value = this.getField('TotalPrice0').value + this.getField('TotalPrice1').value + this.getField('TotalPrice2').value + this.getField('TotalPrice3').value + this.getField('TotalPrice4').value +this.getField('TotalPrice5').value; - }"); - textBoxField.Actions.LostFocus = action; - document.Form.Fields.Add(textBoxField); - } - else if (args.CellIndex == 4 && args.RowIndex > -1) - { - CreateTextBox(interactivePage, "TotalPrice" + args.RowIndex.ToString(), "Total Price", args.Bounds, true, - "0"); - } - } - /// - /// Creates textbox and adds it in the form. - /// - /// - /// - /// - /// - /// - private void CreateTextBox(PdfPage page, string text, string tooltip, RectangleF bounds, bool readOnly, string value) - { - // Create a Text box field. - PdfTextBoxField textBoxField = new PdfTextBoxField(page, text); - PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 12); - //Set properties to the textbox. - textBoxField.Font = font; - textBoxField.BackColor = Syncfusion.Drawing.Color.FromArgb(255, 238, 238, 248); - textBoxField.BorderColor = new PdfColor(255,255,255); - textBoxField.Bounds = bounds; - textBoxField.ToolTip = tooltip; - textBoxField.ReadOnly = readOnly; - textBoxField.Text = value; - document.Form.Fields.Add(textBoxField); - } - public static IEnumerable GetProductReport(string webRootPath) - { - string dataPath = webRootPath + @"/PDF/"; - //Read the file - FileStream xmlStream = new FileStream(dataPath + "AdventureWorkCycle.xml", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - using (StreamReader reader = new StreamReader(xmlStream, true)) - { - return XElement.Parse(reader.ReadToEnd()) - .Elements("Report") - .Select(c => new CylceProducts - { - ProductID = c.Element("ProductID").Value, - Product = c.Element("Product").Value, - Price = c.Element("Price").Value, - Quantity = c.Element("Quantity").Value, - TotalPrice = c.Element("TotalPrice").Value - }); - } - } - #endregion -} -#region Products -public class CylceProducts -{ - public string ProductID { get; set; } - public string Product { get; set; } - public string Price { get; set; } - public string Quantity { get; set; } - public string TotalPrice { get; set; } -} -#endregion \ No newline at end of file diff --git a/Pages/Pdf/JobApplication.cshtml b/Pages/Pdf/JobApplication.cshtml deleted file mode 100644 index 05ba1e01..00000000 --- a/Pages/Pdf/JobApplication.cshtml +++ /dev/null @@ -1,47 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.JobApplication - -@section ControlsSection{ -
- @{Html.BeginForm("jobapplication", "pdf", FormMethod.Post); - { -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
-
-
-
- -
-
-
-
- - Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates the creation of job application form from the scratch using form fields. The user can fill the online job application, then download as a PDF document. - -
-} -@section Meta{ - - } -@section Description{ -
- This is a good example that illustrates how to use the Essential PDF in any requirements like invoice, job applications, pay slips, bank statements and more. -
-} -@section Title{ - ASP.NET Core PDF library - Job Application Example - Syncfusion Demos - } -@section Header{ -

Example of Job Application in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/JobApplication.cshtml.cs b/Pages/Pdf/JobApplication.cshtml.cs deleted file mode 100644 index cf45ba23..00000000 --- a/Pages/Pdf/JobApplication.cshtml.cs +++ /dev/null @@ -1,453 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Pdf.Interactive; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class JobApplication : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public JobApplication(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Browser) - { - PdfDocument pdfDoc = new PdfDocument(); - pdfDoc.ViewerPreferences.HideMenubar = true; - pdfDoc.ViewerPreferences.HideWindowUI = true; - pdfDoc.ViewerPreferences.HideToolbar = true; - pdfDoc.ViewerPreferences.FitWindow = true; - - pdfDoc.ViewerPreferences.PageLayout = PdfPageLayout.SinglePage; - pdfDoc.PageSettings.Orientation = PdfPageOrientation.Portrait; - pdfDoc.PageSettings.Margins.All = 0; - - //To set coordinates to draw form fields - RectangleF bounds = new RectangleF(180, 65, 156, 15); - PdfUnitConverter con = new PdfUnitConverter(); - - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Read the file - FileStream file = new FileStream(dataPath + "Careers.png", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - PdfImage img = new PdfBitmap(file); - - //Set the page size - SizeF pageSize = new SizeF(500, 310); - pdfDoc.PageSettings.Height = pageSize.Height; - pdfDoc.PageSettings.Width = pageSize.Width; - - PdfFont pdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12, PdfFontStyle.Bold); - - #region First Page - - pdfDoc.Pages.Add(); - - PdfPage firstPage = pdfDoc.Pages[0]; - pdfDoc.Pages[0].Graphics.DrawImage(img, 0, 0, pageSize.Width, pageSize.Height); - pdfDoc.Pages[0].Graphics.DrawString("General Information", pdfFont, - new PdfSolidBrush(new PdfColor(213, 123, 19)), 25, 40); - pdfDoc.Pages[0].Graphics.DrawString("Education Grade", pdfFont, new PdfSolidBrush(new PdfColor(213, 123, 19)), - 25, 190); - - pdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 10); - //Create fields in first page. - pdfDoc.Pages[0].Graphics - .DrawString("First Name:", pdfFont, new PdfSolidBrush(new PdfColor(124, 143, 166)), 25, 65); - - //Create text box for firstname. - PdfTextBoxField textBoxField1 = new PdfTextBoxField(pdfDoc.Pages[0], "FirstName"); - textBoxField1.ToolTip = "First Name"; - PdfStandardFont font1 = new PdfStandardFont(PdfFontFamily.Helvetica, 10); - textBoxField1.Font = font1; - textBoxField1.BorderColor = new PdfColor(Color.Gray); - textBoxField1.BorderStyle = PdfBorderStyle.Beveled; - textBoxField1.Bounds = bounds; - pdfDoc.Form.Fields.Add(textBoxField1); - - pdfDoc.Pages[0].Graphics - .DrawString("Last Name:", pdfFont, new PdfSolidBrush(new PdfColor(124, 143, 166)), 25, 83); - - //Set position to draw form fields - bounds.Y = bounds.Y + 18; - //Create text box for lastname. - PdfTextBoxField textBoxField2 = new PdfTextBoxField(pdfDoc.Pages[0], "LastName"); - textBoxField2.ToolTip = "Last Name"; - textBoxField2.Font = font1; - textBoxField2.BorderColor = new PdfColor(Color.Gray); - textBoxField2.BorderStyle = PdfBorderStyle.Beveled; - textBoxField2.Bounds = bounds; - pdfDoc.Form.Fields.Add(textBoxField2); - - pdfDoc.Pages[0].Graphics.DrawString("Email:", pdfFont, new PdfSolidBrush(new PdfColor(124, 143, 166)), 25, 103); - - //Set position to draw form fields - bounds.Y = bounds.Y + 18; - - //Create text box for Email. - PdfTextBoxField textBoxField3 = new PdfTextBoxField(pdfDoc.Pages[0], "Email"); - textBoxField3.ToolTip = "Email id"; - textBoxField3.Font = font1; - textBoxField3.BorderColor = new PdfColor(Color.Gray); - textBoxField3.BorderStyle = PdfBorderStyle.Beveled; - textBoxField3.Bounds = bounds; - pdfDoc.Form.Fields.Add(textBoxField3); - - pdfDoc.Pages[0].Graphics.DrawString("Business Phone:", pdfFont, new PdfSolidBrush(new PdfColor(124, 143, 166)), - 25, 123); - - //Set position to draw form fields - bounds.Y = bounds.Y + 18; - - //Create text box for Business phone. - PdfTextBoxField textBoxField4 = new PdfTextBoxField(pdfDoc.Pages[0], "Business"); - textBoxField4.ToolTip = "Business phone"; - textBoxField4.Font = font1; - textBoxField4.BorderColor = new PdfColor(Color.Gray); - textBoxField4.BorderStyle = PdfBorderStyle.Beveled; - textBoxField4.Bounds = bounds; - pdfDoc.Form.Fields.Add(textBoxField4); - - pdfDoc.Pages[0].Graphics.DrawString("Which position are\nyou applying for?", pdfFont, - new PdfSolidBrush(new PdfColor(124, 143, 166)), 25, 143); - - //Create combo box for Position. - - #region Create ComboBox - - //Set position to draw Combo Box - bounds.Y = bounds.Y + 24; - - PdfComboBoxField comboBox = new PdfComboBoxField(pdfDoc.Pages[0], "JobTitle"); - comboBox.Bounds = bounds; - comboBox.BorderWidth = 1; - comboBox.BorderColor = new PdfColor(Color.Gray); - comboBox.Font = pdfFont; - comboBox.ToolTip = "Job Title"; - - - comboBox.Items.Add(new PdfListFieldItem("Development", "accounts")); - comboBox.Items.Add(new PdfListFieldItem("Support", "advertise")); - comboBox.Items.Add(new PdfListFieldItem("Documentation", "agri")); - - pdfDoc.Form.Fields.Add(comboBox); - - #endregion - - pdfDoc.Pages[0].Graphics.DrawString("Highest qualification", pdfFont, - new PdfSolidBrush(new PdfColor(124, 143, 166)), 25, 217); - - //Create Checkbox box. - - #region Create CheckBox - - pdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 8); - //Set position to draw Checkbox - bounds.Y = 239; - bounds.X = 25; - bounds.Width = 10; - - bounds.Height = 10; - - // Create a Check Box - PdfCheckBoxField chb = new PdfCheckBoxField(pdfDoc.Pages[0], "Adegree"); - - chb.Font = pdfFont; - chb.ToolTip = "degree"; - chb.Bounds = bounds; - chb.BorderColor = new PdfColor(Color.Gray); - bounds.X += chb.Bounds.Height + 10; - - pdfDoc.Pages[0].Graphics.DrawString("Associate degree", pdfFont, new PdfSolidBrush(new PdfColor(124, 143, 166)), - bounds.X, bounds.Y); - bounds.X += 90; - pdfDoc.Form.Fields.Add(chb); - //Create a Checkbox - chb = new PdfCheckBoxField(pdfDoc.Pages[0], "Bdegree"); - chb.Font = pdfFont; - chb.Bounds = bounds; - chb.BorderColor = new PdfColor(Color.Gray); - bounds.X += chb.Bounds.Height + 10; - - pdfDoc.Pages[0].Graphics.DrawString("Bachelor degree", pdfFont, new PdfSolidBrush(new PdfColor(124, 143, 166)), - bounds.X, bounds.Y); - - bounds.X += 90; - pdfDoc.Form.Fields.Add(chb); - //Create a Checkbox - chb = new PdfCheckBoxField(pdfDoc.Pages[0], "college"); - - chb.Font = pdfFont; - chb.ToolTip = "college"; - chb.Bounds = bounds; - chb.BorderColor = new PdfColor(Color.Gray); - - bounds.X += chb.Bounds.Height + 10; - - pdfDoc.Pages[0].Graphics.DrawString("College", pdfFont, new PdfSolidBrush(new PdfColor(124, 143, 166)), - bounds.X, bounds.Y); - - bounds.Y += 20; - bounds.X = 25; - pdfDoc.Form.Fields.Add(chb); - //Create a Checkbox - chb = new PdfCheckBoxField(pdfDoc.Pages[0], "pg"); - - chb.Font = pdfFont; - chb.Bounds = bounds; - chb.BorderColor = new PdfColor(Color.Gray); - bounds.X += chb.Bounds.Height + 10; - - pdfDoc.Pages[0].Graphics.DrawString("Post Graduate", pdfFont, new PdfSolidBrush(new PdfColor(124, 143, 166)), - bounds.X, bounds.Y); - - bounds.X += 90; - pdfDoc.Form.Fields.Add(chb); - //Create a Checkbox - chb = new PdfCheckBoxField(pdfDoc.Pages[0], "mba"); - - chb.Font = pdfFont; - chb.Bounds = bounds; - chb.BorderColor = new PdfColor(Color.Gray); - - bounds.X += chb.Bounds.Height + 10; - - pdfDoc.Pages[0].Graphics.DrawString("MBA", pdfFont, new PdfSolidBrush(new PdfColor(124, 143, 166)), bounds.X, - bounds.Y); - - pdfDoc.Form.Fields.Add(chb); - - #endregion - - # region Create Button - - PdfButtonField submitButton = new PdfButtonField(pdfDoc.Pages[0], "Next"); - submitButton.Bounds = new RectangleF(pdfDoc.Pages[0].GetClientSize().Width - 20, - pdfDoc.Pages[0].GetClientSize().Height - 25, 20, 20); - submitButton.Font = pdfFont; - submitButton.ToolTip = "Next"; - - PdfPage page = pdfDoc.Pages.Add(); - PdfDestination dest = new PdfDestination(page, new PointF(0, 100)); - PdfGoToAction goToAction = new PdfGoToAction(page); - goToAction.Destination = dest; - submitButton.Actions.GotFocus = goToAction; - - # endregion - - # endregion - - # region Second Page - - //Create second page. - pdfDoc.Pages.Add(); - - //img = new PdfBitmap(file); - pdfDoc.Pages[1].Graphics.DrawImage(img, new PointF(0, 0), new SizeF(pageSize.Width, pageSize.Height)); - - pdfDoc.Pages[1].Graphics.DrawString("Current position", - new PdfStandardFont(PdfFontFamily.TimesRoman, 10, PdfFontStyle.Bold), - new PdfSolidBrush(new PdfColor(213, 123, 19)), 25, 40); - - bounds.X = 25; - bounds.Y = 65; - chb = new PdfCheckBoxField(pdfDoc.Pages[1], "Cemp"); - chb.Font = pdfFont; - chb.Bounds = bounds; - chb.BorderWidth = 1; - chb.BorderColor = new PdfColor(Color.Gray); - bounds.X += chb.Bounds.Height + 10; - - pdfDoc.Pages[1].Graphics.DrawString("I am not currently employed", pdfFont, - new PdfSolidBrush(new PdfColor(124, 143, 166)), bounds.X, bounds.Y); - - bounds.X += 90; - pdfDoc.Form.Fields.Add(chb); - - //Add fileds in second page - pdfDoc.Pages[1].Graphics - .DrawString("Job Title", pdfFont, new PdfSolidBrush(new PdfColor(124, 143, 166)), 25, 85); - - bounds.X = 175; - bounds.Y = 85; - bounds.Width = 150; - bounds.Height = 16; - - PdfTextBoxField textBoxField5 = new PdfTextBoxField(pdfDoc.Pages[1], "Jtitle"); - textBoxField5.ToolTip = "Job title"; - textBoxField5.Font = font1; - textBoxField5.BorderColor = new PdfColor(Color.Gray); - textBoxField5.BorderStyle = PdfBorderStyle.Beveled; - textBoxField5.Bounds = bounds; - pdfDoc.Form.Fields.Add(textBoxField5); - - pdfDoc.Pages[1].Graphics - .DrawString("Employer:", pdfFont, new PdfSolidBrush(new PdfColor(124, 143, 166)), 25, 103); - - //Set position to draw form fields - bounds.Y = bounds.Y + 18; - - PdfTextBoxField textBoxField6 = new PdfTextBoxField(pdfDoc.Pages[1], "Employer"); - textBoxField6.ToolTip = "Employer"; - textBoxField6.Font = font1; - textBoxField6.BorderColor = new PdfColor(Color.Gray); - textBoxField6.BorderStyle = PdfBorderStyle.Beveled; - textBoxField6.Bounds = bounds; - pdfDoc.Form.Fields.Add(textBoxField6); - - pdfDoc.Pages[1].Graphics.DrawString("Reason for leaving:", pdfFont, - new PdfSolidBrush(new PdfColor(124, 143, 166)), 25, 123); - - //Set position to draw form fields - bounds.Y = bounds.Y + 18; - PdfTextBoxField textBoxField7 = new PdfTextBoxField(pdfDoc.Pages[1], "Reason"); - textBoxField7.ToolTip = "Reason for leaving"; - textBoxField7.Font = font1; - textBoxField7.BorderColor = new PdfColor(Color.Gray); - textBoxField7.BorderStyle = PdfBorderStyle.Beveled; - textBoxField7.Bounds = bounds; - pdfDoc.Form.Fields.Add(textBoxField7); - - pdfDoc.Pages[1].Graphics.DrawString("Total Annual salary:", pdfFont, - new PdfSolidBrush(new PdfColor(124, 143, 166)), 25, 143); - - //Set position to draw form fields - bounds.Y = bounds.Y + 18; - PdfTextBoxField textBoxField8 = new PdfTextBoxField(pdfDoc.Pages[1], "Asalary"); - textBoxField8.ToolTip = "Annual salary"; - textBoxField8.Font = font1; - textBoxField8.BorderColor = new PdfColor(Color.Gray); - textBoxField8.BorderStyle = PdfBorderStyle.Beveled; - textBoxField8.Bounds = bounds; - pdfDoc.Form.Fields.Add(textBoxField8); - - pdfDoc.Pages[1].Graphics - .DrawString("Duties:", pdfFont, new PdfSolidBrush(new PdfColor(124, 143, 166)), 25, 168); - bounds.Y = bounds.Y + 50; - bounds.X = 25; - bounds.Height = bounds.Height * 4; - - PdfTextBoxField textBoxField9 = new PdfTextBoxField(pdfDoc.Pages[1], "Duties"); - //Set properties to the textbox - textBoxField9.ToolTip = "Duties"; - textBoxField9.Font = font1; - textBoxField9.BorderColor = new PdfColor(Color.Gray); - textBoxField9.BorderStyle = PdfBorderStyle.Beveled; - textBoxField9.Bounds = bounds; - pdfDoc.Form.Fields.Add(textBoxField9); - - pdfDoc.Pages[1].Graphics.DrawString("Employment type:", pdfFont, new PdfSolidBrush(new PdfColor(124, 143, 166)), - 25, 268); - - #region Create ComboBox - - //Set position to draw Combo Box - bounds.Y = bounds.Y + 74; - bounds.Height = 20; - bounds.X = 175; - - //Create a combo Box - comboBox = new PdfComboBoxField(pdfDoc.Pages[1], "EmpType"); - comboBox.Bounds = bounds; - - comboBox.BorderColor = new PdfColor(Color.Gray); - comboBox.Font = pdfFont; - comboBox.ToolTip = "Employment type"; - - comboBox.Items.Add(new PdfListFieldItem("Full time", "ft")); - comboBox.Items.Add(new PdfListFieldItem("Part time", "pt")); - - pdfDoc.Form.Fields.Add(comboBox); - - #endregion - - # endregion - - # region Third Page - - //Create submit button for next page navigation. - submitButton = new PdfButtonField(pdfDoc.Pages[1], "Apply"); - submitButton.Bounds = new RectangleF(pdfDoc.Pages[1].GetClientSize().Width - 20, - pdfDoc.Pages[1].GetClientSize().Height - 25, 20, 20); - submitButton.Font = pdfFont; - submitButton.BorderStyle = PdfBorderStyle.Beveled; - - page = pdfDoc.Pages[2]; - dest = new PdfDestination(page, new PointF(0, 100)); - goToAction = new PdfGoToAction(page); - goToAction.Destination = dest; - submitButton.Actions.GotFocus = goToAction; - - //img = new PdfBitmap(file); - pdfDoc.Pages[2].Graphics.DrawImage(img, 0, 0, pageSize.Width, pageSize.Height); - - pdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 12, PdfFontStyle.Bold); - pdfDoc.Pages[2].Graphics - .DrawString("Thank You", pdfFont, new PdfSolidBrush(new PdfColor(213, 123, 19)), 25, 80); - - pdfFont = new PdfStandardFont(PdfFontFamily.Helvetica, 10, PdfFontStyle.Regular); - pdfDoc.Pages[2].Graphics - .DrawString("Thanks for taking the time to complete this form.\nWe will be in contact with you shortly.", - pdfFont, new PdfSolidBrush(new PdfColor(124, 143, 166)), 25, 110); - - //Send email - PdfButtonField submitButton1 = new PdfButtonField(pdfDoc.Pages[2], "submitButton1"); - submitButton1.Bounds = new RectangleF(25, 160, 100, 20); - submitButton1.Font = pdfFont; - submitButton1.Text = "Apply"; - submitButton1.BorderStyle = PdfBorderStyle.Beveled; - submitButton1.BackColor = new PdfColor(181, 191, 203); - - PdfJavaScriptAction javaAction = new PdfJavaScriptAction( - "address = app.response(\"Enter an e-mail address.\",\"SEND E-MAIL\",\"\");" - + "if (address)" + - - "{ " + - "cmdLine = \"mailto:\" + address;" + - - "this.submitForm(cmdLine,true,false,\"Remarks\");" + - - "}"); - - submitButton1.Actions.GotFocus = javaAction; - pdfDoc.Form.Fields.Add(submitButton1); - pdfDoc.Form.SetDefaultAppearance(false); - - #endregion - - MemoryStream stream = new MemoryStream(); - - //Save the PDF document - pdfDoc.Save(stream); - - stream.Position = 0; - - //Close the PDF document - pdfDoc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/pdf"); - fileStreamResult.FileDownloadName = "JobApplication.pdf"; - return fileStreamResult; - - } -} \ No newline at end of file diff --git a/Pages/Pdf/Layers.cshtml b/Pages/Pdf/Layers.cshtml deleted file mode 100644 index 7e4556b3..00000000 --- a/Pages/Pdf/Layers.cshtml +++ /dev/null @@ -1,49 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.Layers - -@section ControlsSection{ -
- @{Html.BeginForm("layers", "pdf", FormMethod.Post); - { - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
-
-
-
- -
-
-
-
- - Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates adding layers (Optional Content Group) with different shapes in the PDF document. - The Essential PDF also supports to create, merge, and toggle the layers. -
-} -@section Meta{ - - } -@section Description{ -
- This feature can be used in CAD drawings, maps, layered artworks, and multi-language documents. - More information about the layers can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - Layers Example - Syncfusion Demos - } -@section Header{ -

Example of Layers in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/Layers.cshtml.cs b/Pages/Pdf/Layers.cshtml.cs deleted file mode 100644 index 9c7db97a..00000000 --- a/Pages/Pdf/Layers.cshtml.cs +++ /dev/null @@ -1,102 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class Layers : PageModel -{ - public void OnGet() - { - - } - - public ActionResult OnPost(string InsideBrowser) - { - //Create a new PDF document - PdfDocument doc = new PdfDocument(); - doc.PageSettings = new PdfPageSettings(new SizeF(350, 300)); - - PdfPage page = doc.Pages.Add(); - - PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 16); - - page.Graphics.DrawString("Layers", font, PdfBrushes.DarkBlue, new PointF(150, 10)); - - //Add the first layer - PdfPageLayer layer = page.Layers.Add("Layer1"); - - PdfGraphics graphics = layer.Graphics; - graphics.TranslateTransform(100, 60); - - //Draw Arc - PdfPen pen = new PdfPen(Color.Red, 50); - RectangleF rect = new RectangleF(0, 0, 50, 50); - graphics.DrawArc(pen, rect, 360, 360); - - pen = new PdfPen(Color.Blue, 30); - graphics.DrawArc(pen, 0, 0, 50, 50, 360, 360); - - pen = new PdfPen(Color.Yellow, 20); - graphics.DrawArc(pen, rect, 360, 360); - - pen = new PdfPen(Color.Green, 10); - graphics.DrawArc(pen, 0, 0, 50, 50, 360, 360); - - //Add another layer on the page - layer = page.Layers.Add("Layer2"); - - graphics = layer.Graphics; - graphics.TranslateTransform(100, 180); - //graphics.SkewTransform(0, 50); - - //Draw another set of elements - pen = new PdfPen(Color.Red, 50); - graphics.DrawArc(pen, rect, 360, 360); - pen = new PdfPen(Color.Blue, 30); - graphics.DrawArc(pen, 0, 0, 50, 50, 360, 360); - pen = new PdfPen(Color.Yellow, 20); - graphics.DrawArc(pen, rect, 360, 360); - pen = new PdfPen(Color.Green, 10); - graphics.DrawArc(pen, 0, 0, 50, 50, 360, 360); - - //Add another layer - layer = page.Layers.Add("Layer3"); - graphics = layer.Graphics; - graphics.TranslateTransform(160, 120); - - //Draw another set of elements. - pen = new PdfPen(Color.Red, 50); - graphics.DrawArc(pen, rect, -60, 60); - pen = new PdfPen(Color.Blue, 30); - graphics.DrawArc(pen, 0, 0, 50, 50, -60, 60); - pen = new PdfPen(Color.Yellow, 20); - graphics.DrawArc(pen, rect, -60, 60); - pen = new PdfPen(Color.Green, 10); - graphics.DrawArc(pen, 0, 0, 50, 50, -60, 60); - - MemoryStream stream = new MemoryStream(); - - //Save the PDF document - doc.Save(stream); - - stream.Position = 0; - - //Close the PDF document - doc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/pdf"); - fileStreamResult.FileDownloadName = "Layers.pdf"; - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Pdf/MergeDocuments.cshtml b/Pages/Pdf/MergeDocuments.cshtml deleted file mode 100644 index c67042cf..00000000 --- a/Pages/Pdf/MergeDocuments.cshtml +++ /dev/null @@ -1,65 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.MergeDocuments - -@section ControlsSection{ -
- @{Html.BeginForm("mergedocuments", "pdf", FormMethod.Post); - { - - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
-
-
-
- - Optimize PDF Resources - - - Merge Accessibility Tags -
-
-
-
-
-
-
-
- -
-
-
-
-
- - Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to merge two different PDF documents into single PDF document. It is also possible to import pages to the PDF document. -
-} -@section Meta{ - - } -@section Description{ -
- This feature can be used to assemble PDF documents for printing, electronic distribution, and bundle PDF for archiving. - More information about the merge and import pages can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - Merge Documents Example - Syncfusion Demos - } -@section Header{ -

Example of Merge Documents in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/MergeDocuments.cshtml.cs b/Pages/Pdf/MergeDocuments.cshtml.cs deleted file mode 100644 index 99ba346a..00000000 --- a/Pages/Pdf/MergeDocuments.cshtml.cs +++ /dev/null @@ -1,77 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Parsing; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class MergeDocuments : PageModel -{ - public void OnGet() - { - // ViewData["Error"] = ""; - } - private readonly IWebHostEnvironment _hostingEnvironment; - public MergeDocuments(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string InsideBrowser, string OptimizeResources, string MergeAccessibilityTags) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Read the file - FileStream file1 = new FileStream(dataPath + "HTTP Succinctly.pdf", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - FileStream file2 = new FileStream(dataPath + "HTTP Succinctly.pdf", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - - //Load the documents as streams - PdfLoadedDocument doc1 = new PdfLoadedDocument(file1); - PdfLoadedDocument doc2 = new PdfLoadedDocument(file2); - - object[] dobj = { doc1, doc2 }; - PdfDocument doc = new PdfDocument(); - - PdfMergeOptions mergeOption = new PdfMergeOptions(); - - - if (MergeAccessibilityTags == "MergeAccessibilityTags" || OptimizeResources == "OptimizeResources") - { - mergeOption.MergeAccessibilityTags = !string.IsNullOrEmpty(MergeAccessibilityTags) ? true : false; - mergeOption.OptimizeResources = !string.IsNullOrEmpty(OptimizeResources) ? true : false; - PdfDocument.Merge(doc, mergeOption, dobj); - } - else - { - PdfDocument.Merge(doc, dobj); - } - - MemoryStream stream = new MemoryStream(); - - //Save the PDF document - doc.Save(stream); - - stream.Position = 0; - - //Close the PDF document - doc.Close(true); - doc1.Close(true); - doc2.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/pdf"); - fileStreamResult.FileDownloadName = "MergedPDF.pdf"; - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Pdf/MultiColumnHtmlText.cshtml b/Pages/Pdf/MultiColumnHtmlText.cshtml deleted file mode 100644 index 914a91a8..00000000 --- a/Pages/Pdf/MultiColumnHtmlText.cshtml +++ /dev/null @@ -1,56 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.MultiColumnHtmlText - -@section ControlsSection{ - -
- @{ - Html.BeginForm("multicolumnhtmltext", "pdf", FormMethod.Post); - { -
-
-
- - - - - - - - -
- Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
- -
-
-
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates drawing multi column HTML text in the PDF document. It supports basic HTML tags, refer to this section for more details.This feature will be used to create newsletters and e-books. -
-} -@section Meta{ - - } -@section Description{ -
- Refer to this section for more details about converting complex HTML with advanced CSS to PDF. -
-} - - -@section Title{ - ASP.NET Core PDF library - Multi Column HTML Text Example - Syncfusion Demos - } -@section Header{ -

Example of Multi Column HTML Text in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/MultiColumnHtmlText.cshtml.cs b/Pages/Pdf/MultiColumnHtmlText.cshtml.cs deleted file mode 100644 index 05a0478e..00000000 --- a/Pages/Pdf/MultiColumnHtmlText.cshtml.cs +++ /dev/null @@ -1,329 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class MultiColumnHtmlText : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public MultiColumnHtmlText(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string InsideBrowser) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Create a PDF document - PdfDocument doc = new PdfDocument(); - - doc.PageSettings.Size = new SizeF(870, 732); - - //Add a page - PdfPage page = doc.Pages.Add(); - - - PdfSolidBrush brush = new PdfSolidBrush(Color.Black); - PdfPen pen = new PdfPen(Color.Black, 1f); - - //Create font - PdfStandardFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 11.5f); - FileStream fontstream = - new FileStream(dataPath + "Calibri.ttf", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - PdfTrueTypeFont heading = new PdfTrueTypeFont(fontstream, 14f, PdfFontStyle.Bold); - - font = new PdfStandardFont(PdfFontFamily.Helvetica, 8.5f); - - //Adding Header - this.AddMulticolumnHeader(doc, "Syncfusion Essential PDF", "MultiColumnText Demo"); - - //Adding Footer - this.AddFooter(doc, "@Copyright 2015"); - - #region htmlText - - string longtext = "PDF stands for \"Portable Document Format\"." + - " The key word is portable, intended to combine the qualities of authenticity," + - " reliability and ease of use together into a single packaged concept.

" + - "Adobe Systems invented PDF technology in the early 1990s to smooth the " + - "process of moving text and graphics from publishers to printing-presses." + - " PDF turned out to be the very essence of paper, brought to life in a computer." + - " In creating PDF, Adobe had almost unwittingly invented nothing less than a " + - "bridge between the paper and computer worlds.

To be truly portable, an authentic electronic " + - "document would have to appear exactly the same way on any computer at any time," + - " at no cost to the user. It will deliver the exact same results in print or on-screen " + - "with near-total reliability. "; - - #endregion - - - //Rendering HtmlText - PdfHTMLTextElement richTextElement = new PdfHTMLTextElement(longtext, font, brush); - - // Formatting Layout - PdfLayoutFormat format = new PdfLayoutFormat(); - format.Layout = PdfLayoutType.OnePage; - - //Drawing htmlString - richTextElement.Draw(page, new RectangleF(0, 15, 250, page.GetClientSize().Height), format); - - FileStream imageStream = - new FileStream(dataPath + "PDFImage.png", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - ////Drawing Image - PdfBitmap image = new PdfBitmap(imageStream); - page.Graphics.DrawImage(image, new RectangleF(50, 200, 130, 140)); - - #region HtmlText - - longtext = "PDF is used for representing two-dimensional documents in " + - "a manner independent of the application software, hardware, and operating system.[1]" + - "

Each PDF file encapsulates a complete description of a fixed-layout 2-D document " + - "(and, with Acrobat 3-D, embedded 3-D documents) that includes the text, fonts, images, " + - "and 2-D vector graphics which comprise the documents." + - "

PDF is an open standard that was officially published on July 1, 2008 by the ISO as" + - "ISO 32000-1:2008.[2]

" + - "The PDF combines the technologies such as A sub-set of the PostScript page description programming " + - "language, a font-embedding/replacement system to allow fonts to travel with the documents and a " + - "structured storage system to bundle these elements and any associated content into a single file," + - "with data compression where appropriate."; - - #endregion - - richTextElement = new PdfHTMLTextElement(longtext, font, brush); - - richTextElement.Draw(page, new RectangleF(0, 375, 250, page.GetClientSize().Height), format); - - #region HtmlText - - ////HtmlString - string longText = "Essential PDF is a .NET " + - "library with the capability to produce Adobe PDF files " + - "It features a full-fledged object model for the easy creation of PDF files from any .NET language. " + - " It does not use any external libraries and is built from scratch in C#. "; - - #endregion - - - ////Rendering HtmlText - richTextElement = new PdfHTMLTextElement(longText, font, brush); - - - //Drawing htmlString - richTextElement.Draw(page, new RectangleF(270, 15, 250, page.GetClientSize().Height), format); - FileStream gifStream = - new FileStream(dataPath + "Essen PDF.gif", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - ////Drawing Image - PdfImage image1 = new PdfTiffImage(gifStream); - page.Graphics.DrawImage(image1, new RectangleF(310, 80, 180, 110)); - - #region HtmlText - - string htmlText = "Essential PDF supports many features for creating a PDF document including " + - "drawing text, images, tables and other shapes. " + - "

The generated PDF document can also be protected using " + - "40 Bit and 128 Bit encryption.
" + - "

Essential PDF is compatible with Microsoft Visual Studio .NET 2005 and 2008. " + - "It is also compatible with the Express editions of Visual Studio.NET.

" + - "The Essential PDF library can be used in any .NET environment including C#, VB.NET and managed C++.

" + - "The PDF file that is created using Essential PDF can be viewed using Adobe Acrobat or the free " + - "version of Acrobat Viewer from Adobe only." + - "

Essential PDF
It can be used on the server " + - "side (ASP.NET or any other environment) or with Windows Forms applications. " + - "The library is 100% managed, being written in C#.

" + - "PdfDocument is a top-level object in Essential PDF which implies a " + - "representation of a PDF document.

" + - "The document contains a collection of sections that are represented by the PdfSection class, " + - "which is a logical entity containing a collection of pages and their settings.

Pages (which are represented by PdfPage class) " + - "are the main destinations of the graphics output.

" + - "A document can be saved through its Save() method. It can be saved either to a file or stream.

" + - "In order to use the Essential PDF library in your project, add the PdfConfig component found in the toolbox to a project to enable support for PDF. "; - - #endregion - - //Rendering HtmlText - PdfHTMLTextElement richTextElement1 = new PdfHTMLTextElement(htmlText, font, brush); - - - //Drawing htmlString - richTextElement1.Draw(page, new RectangleF(270, 225, 250, page.GetClientSize().Height), format); - - - #region HtmlText - - htmlText = - "

Every Syncfusion license includes a one-year subscription for unlimited technical support and new releases." + - "Syncfusion licenses each product on a simple per-developer basis and charges no royalties," + - "runtimes, or server deployment fees. A licensee can install his/her " + - "license on multiple personal machines at no extra charge.

" - + "

At Syncfusion we are very excited about the Microsoft .NET platform.

" + - "We believe that one of the key benefits of .NET is improved programmer productivity. " + - "Solutions that used to take a very long time with traditional tools can now be " + - "implemented in a much shorter time period with the .NET platform.

" + - "Essential Studio includes seven component libraries in one great package." + - "Essential Studio is available with full source code. It incorporates a " + - "unique debugging support system that allows switching between 'Debug' and " + - "\'Release\' versions of our library with a single click from inside the Visual" + - "Studio.NET IDE.

To ensure the highest quality of support possible," + - "we use a state of the art Customer Relationship Management software (CRM) " + - "based Developer Support System called Direct-Trac. Syncfusion Direc-Trac is a " + - "support system that is uniquely tailored for developer needs. Support incidents " + - "can be created and tracked to completion 24 hours a day, 7 days a week.



" + - "We have a simple, royalty-free licensing model. Components are licensed to a single user." + - " We recognize that you often work at home or on your laptop in addition to your work machine." + - "Therefore, our license permits our products to be installed in more than one location." + - " At Syncfusion, we stand behind our products 100%.

We have top notch management" + - ", architects, product managers, sales people, support personnel, and developers " + - "all working with you, the customer, as their focal point."; - - #endregion - - - richTextElement = new PdfHTMLTextElement(htmlText, font, brush); - - //Drawing htmlString - richTextElement.Draw(page, new RectangleF(540, 15, 250, page.GetClientSize().Height), format); - - #region HtmlText - - htmlText = - "Each licensed control would need to have an entry in the licx file. This would mean that if you were using 20 licensed controls, you would have 20 different entries complete with a full version number in your licx file." + - "

This posed major problems when upgrading to a newer version since these entries would need to have their version numbers changed. This also made trouble shooting licensing issues very difficult. "; - - #endregion - - - richTextElement = new PdfHTMLTextElement(htmlText, font, brush); - - //Drawing htmlString - richTextElement.Draw(page, new RectangleF(540, 465, 250, page.GetClientSize().Height), format); - MemoryStream stream = new MemoryStream(); - - //Save the PDF document - doc.Save(stream); - - stream.Position = 0; - - //Close the PDF document - doc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/pdf"); - fileStreamResult.FileDownloadName = "Multicolumnhtmltext.pdf"; - return fileStreamResult; - - } - - private void AddMulticolumnHeader(PdfDocument doc, string title, string description) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - RectangleF rect = new RectangleF(0, 0, doc.Pages[0].GetClientSize().Width, 50); - - //Create page template - PdfPageTemplateElement header = new PdfPageTemplateElement(rect); - PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 24); - float doubleHeight = font.Height * 2; - Color activeColor = Color.FromArgb(44, 71, 120); - SizeF imageSize = new SizeF(110f, 35f); - //Locating the logo on the right corner of the Drawing Surface - PointF imageLocation = new PointF(doc.Pages[0].GetClientSize().Width - imageSize.Width - 20, 5); - FileStream pngStream = - new FileStream(dataPath + "logo.png", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - PdfImage img = new PdfBitmap(pngStream); - - //Draw the image in the Header. - header.Graphics.DrawImage(img, imageLocation, imageSize); - - PdfSolidBrush brush = new PdfSolidBrush(activeColor); - - PdfPen pen = new PdfPen(Color.DarkBlue, 3f); - font = new PdfStandardFont(PdfFontFamily.Helvetica, 16, PdfFontStyle.Bold); - - //Set formattings for the text - PdfStringFormat format = new PdfStringFormat(); - format.Alignment = PdfTextAlignment.Center; - format.LineAlignment = PdfVerticalAlignment.Middle; - - //Draw title - header.Graphics.DrawString(title, font, brush, new RectangleF(0, 0, header.Width, header.Height), format); - brush = new PdfSolidBrush(Color.Gray); - font = new PdfStandardFont(PdfFontFamily.Helvetica, 6, PdfFontStyle.Bold); - - format = new PdfStringFormat(); - format.Alignment = PdfTextAlignment.Left; - format.LineAlignment = PdfVerticalAlignment.Bottom; - - //Draw description - header.Graphics.DrawString(description, font, brush, new RectangleF(0, 0, header.Width, header.Height - 8), - format); - - //Draw some lines in the header - pen = new PdfPen(Color.DarkBlue, 0.7f); - header.Graphics.DrawLine(pen, 0, 0, header.Width, 0); - pen = new PdfPen(Color.DarkBlue, 2f); - header.Graphics.DrawLine(pen, 0, 03, header.Width + 3, 03); - pen = new PdfPen(Color.DarkBlue, 2f); - header.Graphics.DrawLine(pen, 0, header.Height - 3, header.Width, header.Height - 3); - header.Graphics.DrawLine(pen, 0, header.Height, header.Width, header.Height); - - //Add header template at the top. - doc.Template.Top = header; - } - /// - /// Adds footer to the document - /// - /// - /// - private void AddFooter(PdfDocument doc, string footerText) - { - RectangleF rect = new RectangleF(0, 0, doc.Pages[0].GetClientSize().Width, 50); - - //Create a page template - PdfPageTemplateElement footer = new PdfPageTemplateElement(rect); - PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 8); - - PdfSolidBrush brush = new PdfSolidBrush(Color.Gray); - - PdfPen pen = new PdfPen(Color.DarkBlue, 3f); - font = new PdfStandardFont(PdfFontFamily.Helvetica, 6, PdfFontStyle.Bold); - PdfStringFormat format = new PdfStringFormat(); - format.Alignment = PdfTextAlignment.Center; - format.LineAlignment = PdfVerticalAlignment.Middle; - footer.Graphics.DrawString(footerText, font, brush, new RectangleF(0, 18, footer.Width, footer.Height), format); - - format = new PdfStringFormat(); - format.Alignment = PdfTextAlignment.Right; - format.LineAlignment = PdfVerticalAlignment.Bottom; - - //Create page number field - PdfPageNumberField pageNumber = new PdfPageNumberField(font, brush); - - //Create page count field - PdfPageCountField count = new PdfPageCountField(font, brush); - - PdfCompositeField compositeField = new PdfCompositeField(font, brush, "Page {0} of {1}", pageNumber, count); - compositeField.Bounds = footer.Bounds; - compositeField.Draw(footer.Graphics, new PointF(640, 40)); - - //Add the footer template at the bottom - doc.Template.Bottom = footer; - } -} \ No newline at end of file diff --git a/Pages/Pdf/NamedDestination.cshtml b/Pages/Pdf/NamedDestination.cshtml deleted file mode 100644 index 62e3d11c..00000000 --- a/Pages/Pdf/NamedDestination.cshtml +++ /dev/null @@ -1,48 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.NamedDestination - -@section ControlsSection{ -
- @{Html.BeginForm("nameddestination", "pdf", FormMethod.Post); - { - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
-
-
-
- -
-
-
-
- - Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to create a named destination in the PDF document. -
-} -@section Meta{ - - } -@section Description{ -
- Named destination is the process of linking pages or destination within PDF document and can be used to open the PDF with the desired location and magnification in a webpage. - More information about the named destination can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - Named Destination Example - Syncfusion Demos - } -@section Header{ -

Example of Named Destination in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/NamedDestination.cshtml.cs b/Pages/Pdf/NamedDestination.cshtml.cs deleted file mode 100644 index 60402ed7..00000000 --- a/Pages/Pdf/NamedDestination.cshtml.cs +++ /dev/null @@ -1,116 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Pdf.Interactive; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class NamedDestination : PageModel -{ - public void OnGet() - { - - } - # region Methods - public PdfBookmark AddBookmark(PdfDocument document,PdfPage page, string title, PointF point, PdfFont font, PdfBrush brush) - { - PdfGraphics graphics = page.Graphics; - //Add bookmark in PDF document - PdfBookmark bookmarks = document.Bookmarks.Add(title); - - //Draw the content in the PDF page - graphics.DrawString(title, font, brush, new PointF(point.X, point.Y)); - - //Adding bookmark with named destination - PdfNamedDestination namedDestination = new PdfNamedDestination(title); - namedDestination.Destination = new PdfDestination(page, new PointF(point.X, point.Y)); - namedDestination.Destination.Mode = PdfDestinationMode.FitToPage; - document.NamedDestinationCollection.Add(namedDestination); - bookmarks.NamedDestination = namedDestination; - - return bookmarks; - } - public PdfBookmark AddDocumentSection(PdfDocument document,PdfBookmark bookmark, PdfPage page, string title, PointF point, bool isSubSection, PdfFont font, PdfBrush brush) - { - PdfGraphics graphics = page.Graphics; - //Add bookmark in PDF document - PdfBookmark bookmarks = bookmark.Add(title); - - //Draw the content in the PDF page - graphics.DrawString(title, font, brush, new PointF(point.X, point.Y)); - - //Adding bookmark with named destination - PdfNamedDestination namedDestination = new PdfNamedDestination(title); - namedDestination.Destination = new PdfDestination(page, new PointF(point.X, point.Y)); - if (isSubSection == true) - { - namedDestination.Destination.Zoom = 2f; - } - else - { - namedDestination.Destination.Zoom = 1f; - } - document.NamedDestinationCollection.Add(namedDestination); - bookmarks.NamedDestination = namedDestination; - - return bookmarks; - } - #endregion - - [HttpPost] - public ActionResult OnPost(string InsideBrowser) - { - PdfDocument document = new PdfDocument(); - PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 10f); - PdfBrush brush = new PdfSolidBrush(Color.Black); - - for (int i = 1; i <= 6; i++) - { - PdfPage pages = document.Pages.Add(); - //Add bookmark in PDF document - PdfBookmark bookmark = AddBookmark(document, pages, "Chapter " + i, new PointF(10, 10), font, brush); - //Add sections to bookmark - PdfBookmark section1 = AddDocumentSection(document, bookmark, pages, "Section " + i + ".1", - new PointF(30, 30), false, font, brush); - PdfBookmark section2 = AddDocumentSection(document, bookmark, pages, "Section " + i + ".2", - new PointF(30, 400), false, font, brush); - //Add subsections to section - PdfBookmark subsection1 = AddDocumentSection(document, section1, pages, "Paragraph " + i + ".1.1", - new PointF(50, 50), true, font, brush); - PdfBookmark subsection2 = AddDocumentSection(document, section1, pages, "Paragraph " + i + ".1.2", - new PointF(50, 150), true, font, brush); - PdfBookmark subsection3 = AddDocumentSection(document, section1, pages, "Paragraph " + i + ".1.3", - new PointF(50, 250), true, font, brush); - PdfBookmark subsection4 = AddDocumentSection(document, section2, pages, "Paragraph " + i + ".2.1", - new PointF(50, 420), true, font, brush); - PdfBookmark subsection5 = AddDocumentSection(document, section2, pages, "Paragraph " + i + ".2.2", - new PointF(50, 560), true, font, brush); - PdfBookmark subsection6 = AddDocumentSection(document, section2, pages, "Paragraph " + i + ".2.3", - new PointF(50, 680), true, font, brush); - } - - MemoryStream stream = new MemoryStream(); - - //Save the PDF document - document.Save(stream); - - stream.Position = 0; - - //Close the PDF document - document.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/pdf"); - fileStreamResult.FileDownloadName = "NamedDestination.pdf"; - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Pdf/OpenTypeFont.cshtml b/Pages/Pdf/OpenTypeFont.cshtml deleted file mode 100644 index 76dbbd4e..00000000 --- a/Pages/Pdf/OpenTypeFont.cshtml +++ /dev/null @@ -1,48 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.OpenTypeFont - -@section ControlsSection - { -
- @{Html.BeginForm("opentypefont", "pdf", FormMethod.Post); - { -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
-
-
-
- -
-
-
-
- - Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to draw a text with OpenType font in a PDF document. -
-} -@section Meta{ - - } -@section Description{ -
- It is also possible to draw Unicode text. - More information about drawing text can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - OpenType Font Example - Syncfusion Demos - } -@section Header{ -

Example of OpenType Font in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/OpenTypeFont.cshtml.cs b/Pages/Pdf/OpenTypeFont.cshtml.cs deleted file mode 100644 index f39275d9..00000000 --- a/Pages/Pdf/OpenTypeFont.cshtml.cs +++ /dev/null @@ -1,63 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class OpenTypeFont : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public OpenTypeFont(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string InsideBrowser) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Create a new PDF document - PdfDocument document = new PdfDocument(); - - //Add a page - PdfPage page = document.Pages.Add(); - - //Create font - FileStream fontFileStream = new FileStream(dataPath + "NotoSerif-Black.otf", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - PdfFont font = new PdfTrueTypeFont(fontFileStream, 14); - - //Text to draw - string text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; - - //Create a brush - PdfBrush brush = new PdfSolidBrush(new PdfColor(0, 0, 0)); - PdfPen pen = new PdfPen(new PdfColor(0, 0, 0)); - SizeF clipBounds = page.Graphics.ClientSize; - RectangleF rect = new RectangleF(0, 0, clipBounds.Width, clipBounds.Height); - - //Draw text. - page.Graphics.DrawString(text, font, brush, rect); - MemoryStream stream = new MemoryStream(); - document.Save(stream); - document.Close(); - stream.Position = 0; - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/pdf"); - fileStreamResult.FileDownloadName = "OpenTypeFont.pdf"; - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Pdf/OverlayDocuments.cshtml b/Pages/Pdf/OverlayDocuments.cshtml deleted file mode 100644 index caa3f9f3..00000000 --- a/Pages/Pdf/OverlayDocuments.cshtml +++ /dev/null @@ -1,52 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.OverlayDocuments - -@section ControlsSection{ -
- @{Html.BeginForm("overlaydocuments", "pdf", FormMethod.Post); - { - - @* *@ -
- Click the button to generate a PDF document by applying the border specified in - the “Border template” on all the pages in the “Source Template" - using Essential PDF. Please note that Adobe Reader or its equivalent is required - to view the resultant document. -
-
-
-
-
-
- -
-
-
-
- - Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to overlay two different PDF documents into a single PDF document. -
-} -@section Meta{ - - } -@section Description{ -
- This feature can be used to draw template pages from one document into another for easy designing. -
-} -@section Title{ - ASP.NET Core PDF library - Overlay Documents Example - Syncfusion Demos - } -@section Header{ -

Example of Overlay Documents in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/OverlayDocuments.cshtml.cs b/Pages/Pdf/OverlayDocuments.cshtml.cs deleted file mode 100644 index 0cf8676f..00000000 --- a/Pages/Pdf/OverlayDocuments.cshtml.cs +++ /dev/null @@ -1,74 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Pdf.Parsing; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class OverlayDocuments : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public OverlayDocuments(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string InsideBrowser) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - string dataPath1 = dataPath + "BorderTemplate.pdf"; - string dataPath2 = dataPath + "SourceTemplate.pdf"; - - Stream stream1 = new FileStream(dataPath2, FileMode.Open, FileAccess.Read); - FileStream file = new FileStream(dataPath1, FileMode.Open, FileAccess.Read, FileShare.Read); - PdfLoadedDocument ldDoc1 = new PdfLoadedDocument(file); - PdfLoadedDocument ldDoc2 = new PdfLoadedDocument(stream1); - PdfDocument doc = new PdfDocument(); - - for (int i = 0, count = ldDoc2.Pages.Count; i < count; ++i) - { - PdfPage page = doc.Pages.Add(); - PdfGraphics g = page.Graphics; - - PdfPageBase lpage = ldDoc2.Pages[i]; - PdfTemplate template = lpage.CreateTemplate(); - - g.DrawPdfTemplate(template, PointF.Empty, page.GetClientSize()); - - lpage = ldDoc1.Pages[0]; - template = lpage.CreateTemplate(); - - g.DrawPdfTemplate(template, PointF.Empty, page.GetClientSize()); - } - MemoryStream stream = new MemoryStream(); - - //Save the PDF document - doc.Save(stream); - - stream.Position = 0; - - //Close the PDF document - doc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/pdf"); - fileStreamResult.FileDownloadName = "Overlay.pdf"; - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Pdf/PDFToImage.cshtml b/Pages/Pdf/PDFToImage.cshtml deleted file mode 100644 index e9a85cef..00000000 --- a/Pages/Pdf/PDFToImage.cshtml +++ /dev/null @@ -1,64 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.PDFToImage - -@section ControlsSection{ -
- @{ - var Title = " PdfToImageConverter : PDF To Image : Syncfusion"; - } - - @{ - Html.BeginForm("pdftoimage", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" }); - - { - -
-
- - Click the button to view the resultant image converted from the first page of the PDF document using PdfToImageConverter. - -
-
- Select PDF Document -
- @Html.TextBox("file", "", new { type = "file", accept = "application/pdf" })
-
-
-
- -
-
-
- @Model.Message -
-
-
- - Html.EndForm(); - } - } -
- -} -@section ActionDescription{ -
- This sample demonstrates how to convert a PDF document to an image using the PdfToImageConverter. It supports customization in image conversion, such as setting a transparent background and removing annotations for a specific page or range of pages. -
-} -@section Meta{ - - } -@section Description{ -
- More information about the PDF to Image conversion using the PdfToImageConverter can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PdfToImageConverter - PDF To Image Example - Syncfusion Demos - } -@section Header{ -

Example of PDF To Image using ASP.NET Core PdfToImageConverter

- } \ No newline at end of file diff --git a/Pages/Pdf/PDFToImage.cshtml.cs b/Pages/Pdf/PDFToImage.cshtml.cs deleted file mode 100644 index 81d30a71..00000000 --- a/Pages/Pdf/PDFToImage.cshtml.cs +++ /dev/null @@ -1,58 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.PdfToImageConverter; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class PDFToImage : PageModel -{ - public void OnGet() - { - - } - - public string Message = ""; - public IActionResult OnPost(string button) - { - if (button == null) - return null; - // return View(); - Stream stream = GetPDFDocument(); - if (stream != null) - { - PdfToImageConverter imageConverter = new PdfToImageConverter(stream); - Stream outputStream = new MemoryStream(); - if (imageConverter.PageCount > 0) - { - outputStream = imageConverter.Convert(0, false, false); - outputStream.Position = 0; - FileStreamResult fileStreamResult = new FileStreamResult(outputStream, "image/png"); - fileStreamResult.FileDownloadName = "Sample.png"; - return fileStreamResult; - } - } - - return null; - // return View(); - } - private Stream GetPDFDocument() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - return null; - } - } -} \ No newline at end of file diff --git a/Pages/Pdf/PageSettings.cshtml b/Pages/Pdf/PageSettings.cshtml deleted file mode 100644 index 15f4ecc4..00000000 --- a/Pages/Pdf/PageSettings.cshtml +++ /dev/null @@ -1,124 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.PageSettings - -@section ControlsSection{ - -
- @{ - var pageSize = new string[] { "Letter", "Legal", "A3", "A4", "A5", "B4", "B5" }; - var pageMargin = new string[] { "No margin", "Small", "Large" }; - var pageOrientation = new string[] { "Portrait", "Landscape" }; - var pageRotation = new string[] { "0", "90", "180", "270" }; - } - @{Html.BeginForm("pagesettings", "pdf", FormMethod.Post); - { - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
- -
- - - - - - - - - - - - - - - - - - - -
- Page Size              :   - - - -
- Page Orientation  :   - - - -
- Page Margin         :   - - - -
- Page Rotation       :   - - - -
- Pages Count         :   - - - -
- - - Apply Transition -
-
-
-
-
-
-
- -
-
-
-
- Html.EndForm(); - } - } -
-} -@section Scripts{ - -} -@section ActionDescription{ -
- This sample demonstrates adding pages with different settings such as rotation, orientation, page size, and transition. -
-} -@section Meta{ - - } -@section Description{ -
- It is also possible to add or insert pages and sections, remove pages, rearrange pages and more. - More information about the pages and sections can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - Page Settings Example - Syncfusion Demos - } -@section Header{ -

Example of Page Settings in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/PageSettings.cshtml.cs b/Pages/Pdf/PageSettings.cshtml.cs deleted file mode 100644 index 2b5b8adf..00000000 --- a/Pages/Pdf/PageSettings.cshtml.cs +++ /dev/null @@ -1,212 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class PageSettings : PageModel -{ - public void OnGet() - { - - } - - public ActionResult OnPost(string InsideBrowser, string pageDetails, string ApplyTransition) - { - // Create a new document class object. - PdfDocument doc = new PdfDocument(); - - //Set the document viewer preferences. - doc.ViewerPreferences.HideToolbar = true; - doc.ViewerPreferences.PageMode = PdfPageMode.FullScreen; - - //Get the page details - List pageDetailsList = GetPageDetails(pageDetails); - - //Create PdfPen. - PdfPen pen = new PdfPen(Syncfusion.Drawing.Color.Black); - pen.Width = 6f; - - for (int i = 0; i < pageDetailsList.Count; i++) - { - //Add a new section to the PDF document. - PdfSection section = doc.Sections.Add(); - - PdfPageDetails pgDetails = pageDetailsList[i]; - - //Set the section page settings. - section.PageSettings.Size = pgDetails.PageSize; - section.PageSettings.Rotate = pgDetails.RotateAngle; - section.PageSettings.Orientation = pgDetails.PageOrientation; - section.PageSettings.Margins.All = pgDetails.Margin; - - //Add a new page to the section. - PdfPage page = section.Pages.Add(); - - if (ApplyTransition != null) - { - //Create page label - PdfPageLabel label = new PdfPageLabel(); - label.Prefix = "Sec" + i + "-"; - section.PageLabel = label; - section.Pages[0].Graphics.SetTransparency(0.35f); - section.PageSettings.Transition.PageDuration = 1; - section.PageSettings.Transition.Duration = 1; - section.PageSettings.Transition.Style = PdfTransitionStyle.Box; - } - - //Create a brush - PdfSolidBrush brush = new PdfSolidBrush(Color.Black); - brush.Color = new PdfColor(Syncfusion.Drawing.Color.LightGreen); - - //Create a Rectangle - PdfRectangle rect = new PdfRectangle(0, 0, page.GetClientSize().Width, page.GetClientSize().Height); - rect.Brush = brush; - rect.Draw(page.Graphics); - //Draw the line. - page.Graphics.DrawLine(pen, 0, 100, 300, 100); - } - - //Set the font - PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 16f); - PdfSolidBrush fieldBrush = new PdfSolidBrush(Color.Black); - - //Draw page template - PdfPageTemplateElement templateElement = new PdfPageTemplateElement(400, 400); - //Create page number field. - PdfPageNumberField pageNumber = new PdfPageNumberField(font, fieldBrush); - //Create page count field. - PdfPageCountField count = new PdfPageCountField(font, fieldBrush); - //Add the fields in composite fields. - PdfCompositeField compositeField = - new PdfCompositeField(font, fieldBrush, "Page {0} of {1}", pageNumber, count); - compositeField.Bounds = templateElement.Bounds; - //Draw the composite field in template. - compositeField.Draw(templateElement.Graphics, new PointF(230, 200)); - - //Add the template to the document stamps. - doc.Template.Stamps.Add(templateElement); - templateElement.Background = true; - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - - doc.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the PDF document. - doc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "PageSettings.pdf"; - return fileStreamResult; - } - private List GetPageDetails(string pageDetails) - { - List pageDetailsList = new List(); - if (string.IsNullOrEmpty(pageDetails)) - { - pageDetailsList.Add(new PdfPageDetails()); - } - else - { - string[] words = pageDetails.Split(';'); - foreach (string word in words) - { - if (word != string.Empty) - { - string[] pageDetail = word.Split(','); - - SizeF pageSize = GetPageSize(pageDetail[0]); - PdfPageOrientation pageOrientation = pageDetail[1] == "Portrait" ? PdfPageOrientation.Portrait : PdfPageOrientation.Landscape; - float margin = GetMargin(pageDetail[2]); - PdfPageRotateAngle rotateAngle = GetRotationAngle(pageDetail[3]); - pageDetailsList.Add(new PdfPageDetails(pageOrientation, pageSize, margin, rotateAngle)); - } - } - } - return pageDetailsList; - } - private SizeF GetPageSize(string size) - { - switch (size) - { - case "Letter": - return PdfPageSize.Letter; - case "Legal": - return PdfPageSize.Legal; - case "A3": - return PdfPageSize.A3; - case "A4": - return PdfPageSize.A4; - case "A5": - return PdfPageSize.A5; - case "B4": - return PdfPageSize.B4; - case "B5": - return PdfPageSize.B5; - default: - return PdfPageSize.A4; - } - } - private float GetMargin(string margin) - { - switch (margin) - { - case "Small": - return 20; - case "Large": - return 40; - default: - return 0; - } - } - private PdfPageRotateAngle GetRotationAngle(string rotate) - { - switch (rotate) - { - case "90": - return PdfPageRotateAngle.RotateAngle90; - case "180": - return PdfPageRotateAngle.RotateAngle180; - case "270": - return PdfPageRotateAngle.RotateAngle270; - default: - return PdfPageRotateAngle.RotateAngle0; - } - } -} -internal class PdfPageDetails -{ - public PdfPageOrientation PageOrientation { get; set; } - public SizeF PageSize { get; set; } - public float Margin { get; set; } - public PdfPageRotateAngle RotateAngle { get; set; } - - public PdfPageDetails() - { - PageOrientation = PdfPageOrientation.Portrait; - PageSize = PdfPageSize.A4; - Margin = 40; - RotateAngle = PdfPageRotateAngle.RotateAngle0; - } - public PdfPageDetails(PdfPageOrientation pageOrientation, SizeF pageSize, float margin, PdfPageRotateAngle pdfPageRotate) - { - PageOrientation = pageOrientation; - PageSize = pageSize; - Margin = margin; - RotateAngle = pdfPageRotate; - } -} \ No newline at end of file diff --git a/Pages/Pdf/PdfToPdfAConverter.cshtml b/Pages/Pdf/PdfToPdfAConverter.cshtml deleted file mode 100644 index 8d0c881e..00000000 --- a/Pages/Pdf/PdfToPdfAConverter.cshtml +++ /dev/null @@ -1,89 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.PdfToPdfAConverter - -@using Syncfusion.EJ2 -@section ControlsSection{ - @{ var Title = "Essential PDF :Conformance : Syncfusion"; } -
- @{Html.BeginForm("pdftopdfaconverter", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- - - - -
- Click the button to view an PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
-
-
-
- Choose a PDF file to convert - - - - -
-
-
- -
-
- - - - - -
- Please select the conformance  :   - - - - - -
- -
-
-

- @Html.Label("", (string)Model.lab) -

- - - - -
- -
-
-
-
- Html.EndForm(); - }} -
-} -@section ActionDescription{ -
- This sample demonstrates the conversion of PDF to PDFA standard document using Essential PDF. -
-} -@section Meta{ - - } -@section Description{ -
- This feature can be used for long term archiving and standardization. - More information about conformance can be found in this documentation section. -
-} - - -@section Title{ - ASP.NET Core PDF library - PDF to PDFA Example - Syncfusion Demos - } -@section Header{ -

Example of PDF to PDF-A in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/PdfToPdfAConverter.cshtml.cs b/Pages/Pdf/PdfToPdfAConverter.cshtml.cs deleted file mode 100644 index 8afb317a..00000000 --- a/Pages/Pdf/PdfToPdfAConverter.cshtml.cs +++ /dev/null @@ -1,115 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Pdf.Parsing; -using SkiaSharp; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class PdfToPdfAConverter : PageModel -{ - public string[] data; - public string lab; - public void OnGet() - { - data = new string[] { "PDF/A-1b", "PDF/A-2b", "PDF/A-3b" , "PDF/A-4"}; - } - - [HttpPost] - public ActionResult OnPost(string conformance, string Browser) - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - //Load an existing PDF. - PdfLoadedDocument doc = new PdfLoadedDocument(Request.Form.Files[0].OpenReadStream()); - doc.SubstituteFont += LoadedDocument_SubstituteFont; - if (conformance == "PDF/A-1b") - { - //Create a new document with PDF/A standard. - doc.ConvertToPDFA(PdfConformanceLevel.Pdf_A1B); - } - else if (conformance == "PDF/A-2b") - { - //Create a new document with PDF/A standard. - doc.ConvertToPDFA(PdfConformanceLevel.Pdf_A2B); - } - else if (conformance == "PDF/A-3b") - { - //Create a new document with PDF/A standard. - doc.ConvertToPDFA(PdfConformanceLevel.Pdf_A3B); - } - else if (conformance == "PDF/A-4") - { - //Create a new document with PDF/A standard. - doc.ConvertToPDFA(PdfConformanceLevel.Pdf_A4); - } - - //If the position is not set to '0' then the PDF will be empty. - MemoryStream ms = new MemoryStream(); - doc.Save(ms); - ms.Position = 0; - doc.Close(true); - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "PDFA.pdf"; - return fileStreamResult; - } - else - { - lab = "Choose a valid PDF file."; - data = new string[] { "PDF/A-1b", "PDF/A-2b", "PDF/A-3b", "PDF/A-4" }; - return null; - // return View(); - } - - } - private void LoadedDocument_SubstituteFont(object sender, PdfFontEventArgs args) - { - //Get the font name - string fontName = args.FontName.Split(',')[0]; - - //Get the font style - PdfFontStyle fontStyle = args.FontStyle; - - SKFontStyle sKFontStyle = SKFontStyle.Normal; - - if (fontStyle != PdfFontStyle.Regular) - { - if (fontStyle == PdfFontStyle.Bold) - { - sKFontStyle = SKFontStyle.Bold; - } - else if (fontStyle == PdfFontStyle.Italic) - { - sKFontStyle = SKFontStyle.Italic; - } - else if (fontStyle == (PdfFontStyle.Italic | PdfFontStyle.Bold)) - { - sKFontStyle = SKFontStyle.BoldItalic; - } - } - - SKTypeface typeface = SKTypeface.FromFamilyName(fontName, sKFontStyle); - SKStreamAsset typeFaceStream = typeface.OpenStream(); - MemoryStream memoryStream = null; - if (typeFaceStream != null && typeFaceStream.Length > 0) - { - //Create fontData from type face stream. - byte[] fontData = new byte[typeFaceStream.Length - 1]; - typeFaceStream.Read(fontData, typeFaceStream.Length); - typeFaceStream.Dispose(); - //Create the new memory stream from font data. - memoryStream = new MemoryStream(fontData); - } - //set the font stream to the event args. - args.FontStream = memoryStream; - } -} diff --git a/Pages/Pdf/Portfolio.cshtml b/Pages/Pdf/Portfolio.cshtml deleted file mode 100644 index dad4a091..00000000 --- a/Pages/Pdf/Portfolio.cshtml +++ /dev/null @@ -1,50 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.Portfolio - -@section ControlsSection{ -
- @{Html.BeginForm("portfolio", "pdf", FormMethod.Post); - { - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
-
-
-
- -
-
-
-
- - Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to create portfolio in the PDF document. You can also extract and remove files from the PDF portfolio. -
- This feature allows the user to bring content together from variety of sources including documents, drawings, images, emails, spreadsheets, and web pages. - -
-} -@section Meta{ - - } -@section Description{ -
- More information about the portfolio can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - Portfolio Example - Syncfusion Demos - } -@section Header{ -

Example of Portfolio in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/Portfolio.cshtml.cs b/Pages/Pdf/Portfolio.cshtml.cs deleted file mode 100644 index 69d49cd9..00000000 --- a/Pages/Pdf/Portfolio.cshtml.cs +++ /dev/null @@ -1,88 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Interactive; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class Portfolio : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public Portfolio(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string InsideBrowser) - { - //Stream readFile = new FileStream(ResolveApplicationDataPath(@"..\DocIO\DocToPDF.doc"), FileMode.Open, FileAccess.Read, FileShare.Read); - // Create a new instance of PdfDocument class. - PdfDocument document = new PdfDocument(); - - //Creating new portfolio - document.PortfolioInformation = new PdfPortfolioInformation(); - - //setting the view mode of the portfolio - document.PortfolioInformation.ViewMode = PdfPortfolioViewMode.Tile; - - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Read the file - FileStream file = new FileStream(dataPath + "CorporateBrochure.pdf", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - - //Creating the attachment - PdfAttachment pdfFile = new PdfAttachment("CorporateBrochure.pdf", file); - pdfFile.FileName = "CorporateBrochure.pdf"; - - file = new FileStream(dataPath + "Stock.docx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - //Creating the attachement - PdfAttachment wordfile = new PdfAttachment("Stock.docx", file); - wordfile.FileName = "Stock.docx"; - - file = new FileStream(dataPath + "Chart.xlsx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - //Creating the attachement - PdfAttachment excelfile = new PdfAttachment("Chart.xlsx", file); - excelfile.FileName = "Chart.xlsx"; - - //Setting the startup document to view - document.PortfolioInformation.StartupDocument = pdfFile; - - //Adding the attachment into document - document.Attachments.Add(pdfFile); - document.Attachments.Add(wordfile); - document.Attachments.Add(excelfile); - - //Adding new page into the document - document.Pages.Add(); - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - document.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the PDF document. - document.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "Portfolio.pdf"; - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Pdf/RTLSupport.cshtml b/Pages/Pdf/RTLSupport.cshtml deleted file mode 100644 index 6175cdfa..00000000 --- a/Pages/Pdf/RTLSupport.cshtml +++ /dev/null @@ -1,48 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.RTLSupport - -@section ControlsSection - { -
- @{Html.BeginForm("rtlsupport", "pdf", FormMethod.Post); - { -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
-
-
-
- -
-
-
-
- - Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates drawing right-to-left language text in the PDF document. It is possible to draw RTL languages such as Arabic, Hebrew, Persian, Urdu and more. -
-} -@section Meta{ - - } -@section Description{ -
- It is also possible to draw Unicode text. - More information about drawing text can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - RTL Text Example - Syncfusion Demos - } -@section Header{ -

Example of RTL Text in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/RTLSupport.cshtml.cs b/Pages/Pdf/RTLSupport.cshtml.cs deleted file mode 100644 index 7b4140fe..00000000 --- a/Pages/Pdf/RTLSupport.cshtml.cs +++ /dev/null @@ -1,75 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class RTLSupport : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public RTLSupport(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string InsideBrowser) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Create a new PDF document - PdfDocument document = new PdfDocument(); - - //Add a page - PdfPage page = document.Pages.Add(); - - //Create font - FileStream fontFileStream = - new FileStream(dataPath + "arial.ttf", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - PdfFont font = new PdfTrueTypeFont(fontFileStream, 14); - - //Read the text from text file - FileStream rtlText = - new FileStream(dataPath + "arabic.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - StreamReader reader = new StreamReader(rtlText, System.Text.Encoding.Unicode); - string text = reader.ReadToEnd(); - reader.Dispose(); - - //Create a brush - PdfBrush brush = new PdfSolidBrush(new PdfColor(0, 0, 0)); - PdfPen pen = new PdfPen(new PdfColor(0, 0, 0)); - SizeF clipBounds = page.Graphics.ClientSize; - RectangleF rect = new RectangleF(0, 0, clipBounds.Width, clipBounds.Height); - - //Set the property for RTL text - PdfStringFormat format = new PdfStringFormat(); - format.TextDirection = PdfTextDirection.RightToLeft; - format.Alignment = PdfTextAlignment.Right; - format.ParagraphIndent = 35f; - - //Draw text. - page.Graphics.DrawString(text, font, brush, rect, format); - MemoryStream stream = new MemoryStream(); - document.Save(stream); - document.Close(); - stream.Position = 0; - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/pdf"); - fileStreamResult.FileDownloadName = "RTLText.pdf"; - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Pdf/RearrangePages.cshtml b/Pages/Pdf/RearrangePages.cshtml deleted file mode 100644 index bf9241a5..00000000 --- a/Pages/Pdf/RearrangePages.cshtml +++ /dev/null @@ -1,51 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.RearrangePages - -@section ControlsSection{ -
- @{Html.BeginForm("rearrangepages", "pdf", FormMethod.Post); - { - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
-
-
-
- -
-
-
- -
-
-
-
- - Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to rearrange pages from an existing PDF document to make the document meaningful. -
-} -@section Meta{ - - } -@section Description{ -
- More information about rearrange pages can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - Rearrange Pages Example - Syncfusion Demos - } -@section Header{ -

Example of Rearrange Pages in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/RearrangePages.cshtml.cs b/Pages/Pdf/RearrangePages.cshtml.cs deleted file mode 100644 index 5cb94e83..00000000 --- a/Pages/Pdf/RearrangePages.cshtml.cs +++ /dev/null @@ -1,85 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Pdf.Parsing; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class RearrangePages : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public RearrangePages(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string Browser, string submit1) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - if (submit1 == "View Template") - { - Stream file2 = new FileStream(dataPath + "SyncfusionBrochure.pdf", FileMode.Open, FileAccess.Read, - FileShare.Read); - - //Load the template document - PdfLoadedDocument loadedDocument = new PdfLoadedDocument(file2); - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - - loadedDocument.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the PDF document. - loadedDocument.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "InputTemplate.pdf"; - return fileStreamResult; - } - else - { - //Read the file - FileStream file = new FileStream(dataPath + "SyncfusionBrochure.pdf", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - - //Load the input PDF document - PdfLoadedDocument ldoc = new PdfLoadedDocument(file); - - //Rearrange the page by index - ldoc.Pages.ReArrange(new int[] { 2, 0, 1 }); - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - - ldoc.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the PDF document. - ldoc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "RearrangedPages.pdf"; - return fileStreamResult; - - } - } -} \ No newline at end of file diff --git a/Pages/Pdf/Redaction.cshtml b/Pages/Pdf/Redaction.cshtml deleted file mode 100644 index 21fb4baa..00000000 --- a/Pages/Pdf/Redaction.cshtml +++ /dev/null @@ -1,181 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.Redaction - -@section ControlsSection{ -
- @{ using (Html.BeginForm("redaction", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" })) - { - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
- - - - - - - - - -
-
- -
-
-
- -
-
-
-
-
-

- @Html.Label("", (string)Model.lab) -

-
- Use choose file option to select the PDF document and redact the content -
-
- - - - - - - - - - - - -
-
- -
-
-
-
- - - - - - - - - - - - - - - - - -
- X - -
- -
-
-
- -
-
- Y - -
- -
-
-
- -
-
- Width - -
- -
-
-
- -
-
- Height - -
- -
-
-
- -
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates redacting a text from the PDF document. It is also possible to redact the images. The redaction is a process of removing sensitive or unwanted information from the PDF document. -
-} -@section Meta{ - - } - -@section Title{ - ASP.NET Core PDF library - Redaction Example - Syncfusion Demos - } -@section Header{ -

Example of Redaction in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/Redaction.cshtml.cs b/Pages/Pdf/Redaction.cshtml.cs deleted file mode 100644 index 29d97242..00000000 --- a/Pages/Pdf/Redaction.cshtml.cs +++ /dev/null @@ -1,161 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Parsing; -using Syncfusion.Pdf.Redaction; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class Redaction : PageModel -{ - public void OnGet() - { - - } - - public string lab; - private readonly IWebHostEnvironment _hostingEnvironment; - public Redaction(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string viewTemplate, string RedactPdf, string Browser, string x, string y, - string width, string height) - { - if (viewTemplate == "View Template") - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Read the file - FileStream file = new FileStream(dataPath + "Redaction.pdf", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - - //Load the template document - PdfLoadedDocument doc = new PdfLoadedDocument(file); - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - doc.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the PDF document. - doc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "RedactionTemplate.pdf"; - return fileStreamResult; - } - else if (RedactPdf == "Redact PDF") - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Read the file - FileStream file = new FileStream(dataPath + "Redaction.pdf", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - - //Load the template document - PdfLoadedDocument doc = new PdfLoadedDocument(file); - - PdfLoadedPage lpage = doc.Pages[0] as PdfLoadedPage; - - PdfRedaction textRedaction = - new PdfRedaction(new Syncfusion.Drawing.RectangleF(86.998f, 39.565f, 62.709f, 20.802f), - Syncfusion.Drawing.Color.Black); - //Create PDF redaction for the page to redact text - PdfRedaction pathRedaction = - new PdfRedaction(new Syncfusion.Drawing.RectangleF(83.7744f, 576.066f, 210.0746f, 104.155f), - Syncfusion.Drawing.Color.Black); - //Create PDF redaction for the page to redact text - PdfRedaction imageRedation = - new PdfRedaction(new Syncfusion.Drawing.RectangleF(327.848f, 63.97198f, 232.179f, 223.429f), - Syncfusion.Drawing.Color.Black); - - lpage.AddRedaction(textRedaction); - lpage.AddRedaction(pathRedaction); - lpage.AddRedaction(imageRedation); - - doc.Redact(); - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - doc.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the PDF document. - doc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "Redaction.pdf"; - return fileStreamResult; - } - else - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0 && viewTemplate != "View Template") - { - float x1; - float y1; - float width1; - float height1; - if (x != null && x.Length > 0 && float.TryParse(x.ToString(), out x1) && y != null && y.Length > 0 && - float.TryParse(y.ToString(), out y1) && width != null && width.Length > 0 && - float.TryParse(width.ToString(), out width1) && height != null && height.Length > 0 && - float.TryParse(height.ToString(), out height1)) - { - //Load a PDF document - PdfLoadedDocument ldoc = new PdfLoadedDocument(Request.Form.Files[0].OpenReadStream()); - //Get first page from document - PdfLoadedPage lpage = ldoc.Pages[0] as PdfLoadedPage; - - //Create PDF redaction for the page - PdfRedaction redaction = - new PdfRedaction(new Syncfusion.Drawing.RectangleF(x1, y1, width1, height1), - Syncfusion.Drawing.Color.Black); - - //Adds the redaction to loaded page - lpage.AddRedaction(redaction); - ldoc.Redact(); - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - - ldoc.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - ldoc.Close(true); - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "Redaction.pdf"; - return fileStreamResult; - } - else - { - lab = "Fill proper redaction bounds to redact"; - } - } - else - { - lab = "Choose PDF document to redact"; - } - } - - return null; - // return View(); - } -} \ No newline at end of file diff --git a/Pages/Pdf/RemoveImages.cshtml b/Pages/Pdf/RemoveImages.cshtml deleted file mode 100644 index 8dbd2aa1..00000000 --- a/Pages/Pdf/RemoveImages.cshtml +++ /dev/null @@ -1,74 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.RemoveImages - -@section ControlsSection{ -
- @{ using (Html.BeginForm("removeimages", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" })) - { - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
- - - - - - - - - -
-
- -
-
-
- -
-
-
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to remove images from an existing PDF document. -
-} -@section Meta{ - - } - -@section Title{ - ASP.NET Core PDF library - Remove Images Example - Syncfusion Demos - } -@section Header{ -

Example of Remove Images in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/RemoveImages.cshtml.cs b/Pages/Pdf/RemoveImages.cshtml.cs deleted file mode 100644 index a54089d3..00000000 --- a/Pages/Pdf/RemoveImages.cshtml.cs +++ /dev/null @@ -1,99 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Pdf.Parsing; -using Syncfusion.Pdf.Exporting; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class RemoveImages : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public RemoveImages(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string viewTemplate, string RemoveImage) - { - - if (viewTemplate == "View Template") - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Read the file - FileStream file = new FileStream(dataPath + "RemoveImage.pdf", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - - //Load the template document - PdfLoadedDocument doc = new PdfLoadedDocument(file); - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - doc.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the PDF document. - doc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "RemoveImageTemplate.pdf"; - return fileStreamResult; - } - else if (RemoveImage == "Remove Images") - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Read the file - FileStream file = new FileStream(dataPath + "RemoveImage.pdf", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - - //Load the template document - PdfLoadedDocument doc = new PdfLoadedDocument(file); - - PdfImageInfo[] imagesInfo = doc.Pages[0].GetImagesInfo(); - - foreach (PdfImageInfo imgInfo in imagesInfo) - { - //Removing Image - doc.Pages[0].RemoveImage(imgInfo); - - } - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - doc.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the PDF document. - doc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "RemoveImage.pdf"; - return fileStreamResult; - } - - return null; - // return View(); - } -} \ No newline at end of file diff --git a/Pages/Pdf/SplitPDF.cshtml b/Pages/Pdf/SplitPDF.cshtml deleted file mode 100644 index 15723186..00000000 --- a/Pages/Pdf/SplitPDF.cshtml +++ /dev/null @@ -1,152 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.SplitPDF - -@section ControlsSection { -
- @{ - using (Html.BeginForm("splitpdf", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" })) - { - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
-

- @Html.Label("", (string)Model.lab) -

-
- - - -
-
-
- Select the below options to split by: -
-
- -
- - -   - -   - -
-
- - -
- Enter page ranges to split:

From
- - - To - -
- - - - - - -
-
-
-
-
- -
-
-
-
- - Html.EndForm(); - } - } -
-} - -@section ActionDescription { -
- This sample demonstrates how to split the pages of a PDF into multiple PDF documents, ensuring that their accessibility tags remain unchanged. -
-} -@section Meta { - -} -@section Description { -
- This feature will be used to split the necessary pages from the PDF document, divide a large-sized PDF into smaller ones, and maintain their tags throughout the splitting process, among other functions. -
-} -@section Title { - ASP.NET Core PDF library - Split PDF Example - Syncfusion Demos -} -@section Header { -

Example of Split PDF in ASP.NET Core PDF Library

-} - - - diff --git a/Pages/Pdf/SplitPDF.cshtml.cs b/Pages/Pdf/SplitPDF.cshtml.cs deleted file mode 100644 index 354de81e..00000000 --- a/Pages/Pdf/SplitPDF.cshtml.cs +++ /dev/null @@ -1,284 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Parsing; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Compression.Zip; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class SplitPDF : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public SplitPDF(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public string lab; - public string Message; - public int PageCount; - private string result; - - public ActionResult OnPost(string Browser, string splitOption, int startPageNumber, int endPageNumber, - int fileCount, int pageNoCount, IFormFile file) - { - result = null; - Stream fileStream = GetSplitPDFDocument(file); - if (splitOption == "fixedRange") - { - if (startPageNumber != 0 && endPageNumber != 0) - { - int splitAtPage = startPageNumber; - int splitAtPage1 = endPageNumber; - - if (splitAtPage <= splitAtPage1) - { - PdfLoadedDocument ldoc = new PdfLoadedDocument(fileStream); - int pageCount = ldoc.Pages.Count; - PageCount = pageCount; - if (splitAtPage1 <= ldoc.Pages.Count && splitAtPage != 0) - { - //Create pdf split options - PdfSplitOptions option = new PdfSplitOptions(); - - //Enable split tags - option.SplitTags = true; - - //Subscribe document split event - ldoc.DocumentSplitEvent += DocumentSplitEvent; - - //Split pdf document by page ranges and split options - ldoc.SplitByRanges(new int[,] { { splitAtPage - 1, splitAtPage1 - 1 } }, option); - - //Close the PDF document. - ldoc.Close(true); - - if (result == null) - return null; - // return View(); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = - new FileStreamResult(new MemoryStream(Convert.FromBase64String(result)), "application/pdf"); - fileStreamResult.FileDownloadName = "Split.pdf"; - return fileStreamResult; - } - else - { - int pagecount = ldoc.Pages.Count; - lab = "Invalid Page no: The page range should be 1 to " + pagecount; - } - - ldoc.Close(true); - } - else - { - PdfLoadedDocument ldoc = new PdfLoadedDocument(fileStream); - int pagecount = ldoc.Pages.Count; - ldoc.Close(true); - lab = "Invalid page range: The page range should be 1 to " + pagecount; - } - } - else - { - PdfLoadedDocument ldoc = new PdfLoadedDocument(fileStream); - int pagecount = ldoc.Pages.Count; - ldoc.Close(true); - lab = "Invalid page range: The page range should be 1 to " + pagecount; - } - } - else if (splitOption == "fileCount") - { - PdfLoadedDocument ldoc = new PdfLoadedDocument(fileStream); - int pageCount = ldoc.Pages.Count; - if (fileCount != 0) - { - if (fileCount <= pageCount) - { - // Create PDF split options - PdfSplitOptions option = new PdfSplitOptions(); - - option.SplitTags = true; - - ZipArchive zipArchive = new ZipArchive(); - - int[,] splitRanges = GetPageRanges(pageCount, fileCount); - - int index = 0; - - ldoc.DocumentSplitEvent += (object sender, PdfDocumentSplitEventArgs args) => - { - MemoryStream stream = new MemoryStream(); - args.PdfDocumentData.CopyTo(stream); - zipArchive.AddItem($"split{splitRanges[index, 0] + 1}-{splitRanges[index, 1] + 1}.pdf", stream, - false, (Syncfusion.Compression.FileAttributes)FileAttributes.Normal); - index++; - }; - - // Split the document by page range and split options - ldoc.SplitByRanges(splitRanges, option); - - // Save the ziparchive in memory stream - MemoryStream memoryStream = new MemoryStream(); - zipArchive.Save(memoryStream, false); - - // Close the ZipArchive - zipArchive.Dispose(); - - // Close the loaded document - ldoc.Close(true); - return File(memoryStream.ToArray(), "application/zip", "SplitedFiles.zip"); - } - else - { - lab = "Invalid file count: The file count should be 1 to " + pageCount; - } - } - else - { - lab = "Invalid file count: The file count should be 1 to " + pageCount; - } - - ldoc.Close(true); - } - else if (splitOption == "pageCount") - { - PdfLoadedDocument ldoc = new PdfLoadedDocument(fileStream); - int pageCount = ldoc.Pages.Count; - if (pageNoCount != 0) - { - if (pageNoCount <= pageCount) - { - // Create PDF split options - PdfSplitOptions option = new PdfSplitOptions(); - - option.SplitTags = true; - - ZipArchive zipArchive = new ZipArchive(); - - int index = 1; - ldoc.DocumentSplitEvent += (object sender, PdfDocumentSplitEventArgs args) => - { - MemoryStream stream = new MemoryStream(); - args.PdfDocumentData.CopyTo(stream); - zipArchive.AddItem($"split{index}.pdf", stream, false, - (Syncfusion.Compression.FileAttributes)FileAttributes.Normal); - index++; - }; - - // Split the document by fixed number and split options - ldoc.SplitByFixedNumber(pageNoCount, option); - - // Save the zip archive in memory stream - MemoryStream memoryStream = new MemoryStream(); - zipArchive.Save(memoryStream, false); - - // Close the ZipArchive. - zipArchive.Dispose(); - - // Close the loaded document - ldoc.Close(true); - - return File(memoryStream.ToArray(), "application/zip", "SplitedFiles.zip"); - } - else - { - lab = "Invalid page count: The page count should be 1 to " + pageCount; - } - } - else - { - lab = "Invalid page count: The page count should be 1 to " + pageCount; - } - - ldoc.Close(true); - - } - else - { - lab = "Enter the page no to split"; - } - - fileStream.Dispose(); - return null; - // return View(); - } - int[,] GetPageRanges(int pageCount, int fileCount) - { - // Calculate the base number of pages per file and the remaining pages - int pagesPerFileBase = pageCount / fileCount; - int remainingPages = pageCount % fileCount; - - // Create an array to store the number of pages for each file - int[] pagesPerFile = new int[fileCount]; - - // Distribute the pages among the files - for (int i = 0; i < fileCount; i++) - { - pagesPerFile[i] = pagesPerFileBase; - if (remainingPages > 0) - { - pagesPerFile[i]++; - remainingPages--; - } - } - int startPage = 0; - int endPage = 0; - int[,] splitRanges = new int[fileCount, 2]; - - for (int i = 0; i < fileCount; i++) - { - endPage = startPage + pagesPerFile[i] - 1; - splitRanges[i, 0] = startPage; - splitRanges[i, 1] = endPage; - - startPage = endPage + 1; - } - return splitRanges; - } - private void DocumentSplitEvent(object sender, PdfDocumentSplitEventArgs args) - { - MemoryStream ms = new MemoryStream(); - args.PdfDocumentData.CopyTo(ms); - result = Convert.ToBase64String(ms.ToArray()); - ms.Dispose(); - } - private Stream GetSplitPDFDocument(IFormFile file) - { - if (file != null) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".pdf") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - Message = string.Format("Please choose a valid PDF document to split"); - return null; - } - } - else - { - //Opens an existing document from stream through constructor of `WordDocument` class - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/PDF/SplitPDF.pdf", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } -} \ No newline at end of file diff --git a/Pages/Pdf/TableFeatures.cshtml b/Pages/Pdf/TableFeatures.cshtml deleted file mode 100644 index b22b2c67..00000000 --- a/Pages/Pdf/TableFeatures.cshtml +++ /dev/null @@ -1,51 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.TableFeatures - -@using Syncfusion.EJ2; - -@{ var Title = " Essential PDF : Table Features : Syncfusion"; } - -@section ControlsSection{ - -
- @{Html.BeginForm("tablefeatures", "pdf", FormMethod.Post); - { -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
-
-
-
- -
-
-
-
- - Html.EndForm(); - } - } -
-} - @section ActionDescription{ -

- This sample demonstrates the creation of richly formatted table to keep your data organized for both basic and advanced operation on cells, rows, and columns along with headers and footers. -

- } - @section Meta{ - - } - @section Description{ -

- More information about the document settings can be found in this documentation section. -

- } - @section Title{ - ASP.NET Core PDF library - Table Features Example - Syncfusion Demos - } - @section Header{ -

Example of Table Features in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/TableFeatures.cshtml.cs b/Pages/Pdf/TableFeatures.cshtml.cs deleted file mode 100644 index 8f68e19c..00000000 --- a/Pages/Pdf/TableFeatures.cshtml.cs +++ /dev/null @@ -1,323 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Pdf.Tables; -using Syncfusion.Pdf.Grid; -using Syncfusion.Pdf.Interactive; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using System.Xml.Linq; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class TableFeatures : PageModel -{ - public void OnGet() - { - - } - #region fields - PdfPen borderPen; - PdfPen transparentPen; - float cellSpacing = 7f; - float margin = 40f; - PdfFont smallFont; - PdfLightTable pdfLightTable = null; - #endregion - - private readonly IWebHostEnvironment _hostingEnvironment; - public TableFeatures(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string InsideBrowser) - { - #region Field Definitions - - //Load product data. - IEnumerable products = DataProvider.GetProducts(_hostingEnvironment.WebRootPath); - - //Create a new PDF standard font - PdfStandardFont font = new PdfStandardFont(PdfFontFamily.TimesRoman, 8f); - smallFont = new PdfStandardFont(font, 5f); - PdfFont bigFont = new PdfStandardFont(font, 16f); - - //Create a new PDF solid brush - PdfBrush orangeBrush = new PdfSolidBrush(new PdfColor(247, 148, 29)); - PdfBrush grayBrush = new PdfSolidBrush(new PdfColor(170, 171, 171)); - - //Create a new PDF pen - borderPen = new PdfPen(PdfBrushes.DarkGray, .3f); - borderPen.LineCap = PdfLineCap.Square; - transparentPen = new PdfPen(PdfBrushes.Transparent, .3f); - transparentPen.LineCap = PdfLineCap.Square; - - # endregion - - //Create a new PDF document - PdfDocument document = new PdfDocument(); - - //Set the margins - document.PageSettings.Margins.All = 0; - - # region Footer - - //Create a new footer template - PdfPageTemplateElement footer = new PdfPageTemplateElement( - new RectangleF(new PointF(0, document.PageSettings.Height - 40), - new SizeF(document.PageSettings.Width, 40))); - footer.Graphics.DrawRectangle(new PdfSolidBrush(new PdfColor(77, 77, 77)), footer.Bounds); - footer.Graphics.DrawString("http://www.syncfusion.com", font, grayBrush, - new PointF(footer.Width - (footer.Width / 4), 15)); - footer.Graphics.DrawString("Copyright © 2001 - 2017 Syncfusion Inc.", font, grayBrush, new PointF(0, 15)); - - //Add the footer template at the bottom of the page - document.Template.Bottom = footer; - - # endregion - - //Add a new PDF page - PdfPage page = document.Pages.Add(); - - page.Graphics.DrawRectangle(orangeBrush, - new RectangleF(PointF.Empty, new SizeF(page.Graphics.ClientSize.Width, margin))); - - //Draw the text to the PDF page - page.Graphics.DrawString("Essential Studio File Formats Edition", bigFont, PdfBrushes.White, - new PointF(10, 10)); - - # region PdfLightTable - - //Create a PDF light table - pdfLightTable = new PdfLightTable(); - pdfLightTable.DataSource = products; - pdfLightTable.Style.DefaultStyle.BorderPen = transparentPen; - - for (int i = 0; i < pdfLightTable.Columns.Count; i++) - { - if (i % 2 == 0) - pdfLightTable.Columns[i].Width = 16.5f; - } - - pdfLightTable.Style.CellSpacing = cellSpacing; - pdfLightTable.BeginRowLayout += new BeginRowLayoutEventHandler(pdfLightTable_BeginRowLayout); - pdfLightTable.BeginCellLayout += new BeginCellLayoutEventHandler(pdfLightTable_BeginCellLayout); - pdfLightTable.Style.DefaultStyle.Font = font; - PdfLayoutResult result = pdfLightTable.Draw(page, - new RectangleF(new PointF(margin, 70), - new SizeF(page.Graphics.ClientSize.Width - (2 * margin), page.Graphics.ClientSize.Height - margin))); - - # endregion - - page.Graphics.DrawString("What You Get with Syncfusion", bigFont, orangeBrush, - new PointF(margin, result.Bounds.Bottom + 50)); - - # region PdfGrid - - //Create a new PDF grid - PdfGrid pdfGrid = new PdfGrid(); - IEnumerable report = DataProvider.GetReport(_hostingEnvironment.WebRootPath); - - pdfGrid.DataSource = report; - pdfGrid.Headers.Clear(); - pdfGrid.Columns[0].Width = 80; - pdfGrid.Style.Font = font; - pdfGrid.Style.CellSpacing = 15f; - - for (int i = 0; i < pdfGrid.Rows.Count; i++) - { - if (i % 2 == 0) - { - PdfGridCell cell = pdfGrid.Rows[i].Cells[0]; - cell.RowSpan = 2; - - cell.Value = ""; - - cell = pdfGrid.Rows[i].Cells[1]; - cell.Style.Font = bigFont; - } - - for (int j = 0; j < pdfGrid.Columns.Count; j++) - { - pdfGrid.Rows[i].Cells[j].Style.Borders.All = transparentPen; - } - } - - //Create a PDF grid layout format - PdfGridLayoutFormat gridLayoutFormat = new PdfGridLayoutFormat(); - - //Set pagination - gridLayoutFormat.Layout = PdfLayoutType.Paginate; - - //Draw the grid to the PDF document - pdfGrid.Draw(page, - new RectangleF(new PointF(margin, result.Bounds.Bottom + 75), - new SizeF(page.Graphics.ClientSize.Width - (2 * margin), page.Graphics.ClientSize.Height - margin)), - gridLayoutFormat); - - #endregion - - MemoryStream stream = new MemoryStream(); - - //Save the PDF document - document.Save(stream); - - //Close the PDF document - document.Close(true); - - stream.Position = 0; - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/pdf"); - fileStreamResult.FileDownloadName = "TableFeatures.pdf"; - return fileStreamResult; - } - #region PdfLightTable Events - - void pdfLightTable_BeginRowLayout(object sender, BeginRowLayoutEventArgs args) - { - if (args.RowIndex % 2 == 0) - args.MinimalHeight = 20; - else - args.MinimalHeight = 30; - } - - void pdfLightTable_BeginCellLayout(object sender, BeginCellLayoutEventArgs args) - { - if (args.RowIndex > -1 && args.CellIndex > -1) - { - float x = args.Bounds.X; - float y = args.Bounds.Y; - float width = args.Bounds.Right; - float height = args.Bounds.Bottom; - - if (args.Value == "dummy") - { - args.Skip = true; - return; - } - - if (args.CellIndex % 2 == 0 && !string.IsNullOrEmpty(args.Value)) - { - args.Skip = true; - } - - if (args.Value.Contains("http")) - { - args.Skip = true; - - // Create the Text Web Link - PdfTextWebLink textLink = new PdfTextWebLink(); - textLink.Url = args.Value; - textLink.Text = "Know more..."; - textLink.Brush = PdfBrushes.Black; - textLink.Font = smallFont; - textLink.DrawTextWebLink(args.Graphics, - new PointF(args.Bounds.X + 2 * args.Bounds.Width / 3, args.Bounds.Y)); - } - - # region Draw manual borders - - if (args.RowIndex % 3 == 0) //top - { - if (args.CellIndex % 2 == 0) - width += cellSpacing; - args.Graphics.DrawLine(borderPen, new PointF(x, y), new PointF(width, y)); - } - else if (args.RowIndex % 3 == 2) //bottom - { - if (args.CellIndex % 2 == 0) - width += cellSpacing; - args.Graphics.DrawLine(borderPen, new PointF(x, height), new PointF(width, height)); - } - - if (args.CellIndex % 2 == 0) //left - { - if (args.RowIndex % 3 != 2) - height += cellSpacing; - args.Graphics.DrawLine(borderPen, new PointF(x, y), new PointF(x, height)); - } - else if (args.CellIndex % 2 != 0) //right - { - if (args.RowIndex % 3 != 2) - height += cellSpacing; - args.Graphics.DrawLine(borderPen, new PointF(width, y), new PointF(width, height)); - } - - # endregion - } - } - # endregion - - internal sealed class DataProvider - { - public static IEnumerable GetProducts(string webRootPath) - { - string dataPath = webRootPath + @"/PDF/"; - //Read the file - FileStream xmlStream = new FileStream(dataPath + "Products.xml", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - - using (StreamReader reader = new StreamReader(xmlStream, true)) - { - return XElement.Parse(reader.ReadToEnd()) - .Elements("Products") - .Select(c => new Products - { - Image1 = c.Element("Image1").Value, - Description1 = c.Element("Description1").Value, - Image2 = c.Element("Image2").Value, - Description2 = c.Element("Description2").Value, - Image3 = (c.Element("Image3") != null) ? c.Element("Image3").Value : "dummy", - Description3 = (c.Element("Description3") != null) ? c.Element("Description3").Value : "dummy", - }); - } - } - - public static IEnumerable GetReport(string webRootPath) - { - string dataPath = webRootPath + @"/PDF/"; - //Read the file - FileStream xmlStream = new FileStream(dataPath + "Report.xml", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - - using (StreamReader reader = new StreamReader(xmlStream, true)) - { - return XElement.Parse(reader.ReadToEnd()) - .Elements("Report") - .Select(c => new Report - { - Image = c.Element("Image").Value, - Description = c.Element("Description").Value, - }); - } - } - } -} -#region Products -public class Products -{ - public string Image1 { get; set; } - public string Description1 { get; set; } - public string Image2 { get; set; } - public string Description2 { get; set; } - public string Image3 { get; set; } - public string Description3 { get; set; } -} -#endregion - -#region Report -public class Report -{ - public string Image { get; set; } - public string Description { get; set; } -} -#endregion \ No newline at end of file diff --git a/Pages/Pdf/TextFlow.cshtml b/Pages/Pdf/TextFlow.cshtml deleted file mode 100644 index 6a3688ef..00000000 --- a/Pages/Pdf/TextFlow.cshtml +++ /dev/null @@ -1,47 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.TextFlow - -@section ControlsSection{ -
- @{Html.BeginForm("textflow", "pdf", FormMethod.Post); - { -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-
-
-
-
- -
-
-
-
- - Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates the creation of PDF document with large text that flows over multiple pages.You can also draw multiple paragraphs sequentially. -
-} -@section Meta{ - - } -@section Description{ -
- This feature can be used to create a large text in the PDF document. - More information about the text element can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - Text Flow Example - Syncfusion Demos - } -@section Header{ -

Example of Text Flow in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/TextFlow.cshtml.cs b/Pages/Pdf/TextFlow.cshtml.cs deleted file mode 100644 index dc5ac339..00000000 --- a/Pages/Pdf/TextFlow.cshtml.cs +++ /dev/null @@ -1,123 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class TextFlow : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public TextFlow(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string InsideBrowser) - { - //Create a new PDF document. - PdfDocument doc = new PdfDocument(); - - //Set compression level - doc.Compression = PdfCompressionLevel.None; - - //Add a page to the document. - PdfPage page = doc.Pages.Add(); - - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Read the file - FileStream file = new FileStream(dataPath + "Manual.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - //Read the text from the text file - StreamReader reader = new StreamReader(file, System.Text.Encoding.ASCII); - string text = reader.ReadToEnd(); - reader.Dispose(); - - //Set the font - PdfFont font = new PdfStandardFont(PdfFontFamily.TimesRoman, 12); - - //Set the formats for the text - PdfStringFormat format = new PdfStringFormat(); - format.Alignment = PdfTextAlignment.Justify; - format.LineAlignment = PdfVerticalAlignment.Top; - format.ParagraphIndent = 15f; - - //Create a text element - PdfTextElement element = new PdfTextElement(text, font); - element.Brush = new PdfSolidBrush(Color.Black); - element.StringFormat = format; - element.Font = new PdfStandardFont(PdfFontFamily.Helvetica, 12); - - //Set the properties to paginate the text. - PdfLayoutFormat layoutFormat = new PdfLayoutFormat(); - layoutFormat.Break = PdfLayoutBreakType.FitPage; - layoutFormat.Layout = PdfLayoutType.Paginate; - - RectangleF bounds = new RectangleF(PointF.Empty, page.Graphics.ClientSize); - - //Raise the events to draw the graphic elements for each page. - element.BeginPageLayout += new BeginPageLayoutEventHandler(BeginPageLayout); - element.EndPageLayout += new EndPageLayoutEventHandler(EndPageLayout); - - //Draw the text element with the properties and formats set. - PdfTextLayoutResult result = element.Draw(page, bounds, layoutFormat); - - //Save the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - doc.Save(ms); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the PDF document. - doc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "TextFlow.pdf"; - return fileStreamResult; - } - - private void BeginPageLayout(object sender, BeginPageLayoutEventArgs e) - { - int index = e.Page.Section.Pages.IndexOf(e.Page); - float offset = 50; - PdfSolidBrush brush = new PdfSolidBrush(Color.LightBlue); - - if (index % 2 == 0) - { - RectangleF bounds = e.Bounds; - e.Page.Graphics.DrawEllipse(brush, bounds.Width / 2 - offset, bounds.Height / 2 - offset, 2 * offset, - 2 * offset); - } - else - { - RectangleF bounds = e.Bounds; - e.Page.Graphics.DrawRectangle(brush, bounds.Width / 2 - offset, bounds.Height / 2 - offset, 2 * offset, - 2 * offset); - } - } - - private void EndPageLayout(object sender, EndPageLayoutEventArgs e) - { - EndTextPageLayoutEventArgs args = (EndTextPageLayoutEventArgs)e; - PdfPage page = args.Result.Page; - PdfPen pen = PdfPens.Black; - page.Graphics.DrawRectangle(pen, new RectangleF(PointF.Empty, page.Graphics.ClientSize)); - } -} \ No newline at end of file diff --git a/Pages/Pdf/TiffToPDF.cshtml b/Pages/Pdf/TiffToPDF.cshtml deleted file mode 100644 index cba511b4..00000000 --- a/Pages/Pdf/TiffToPDF.cshtml +++ /dev/null @@ -1,53 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.TiffToPDF - -@section ControlsSection{ -
- @{Html.BeginForm("tifftopdf", "pdf", FormMethod.Post); - { -
-
-
- - - - - - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
- -   - -
-
- -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to convert single or multi frame TIFF images to PDF. -
-} -@section Meta{ - - } -@section Description{ -
- More information about TIFF to PDF document can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - TIFF To PDF Example - Syncfusion Demos - } -@section Header{ -

Example of TIFF To PDF in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/TiffToPDF.cshtml.cs b/Pages/Pdf/TiffToPDF.cshtml.cs deleted file mode 100644 index c7fde656..00000000 --- a/Pages/Pdf/TiffToPDF.cshtml.cs +++ /dev/null @@ -1,89 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class TiffToPDF : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public TiffToPDF(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string viewTemplate, string createPDF) - { - string dataPath = _hostingEnvironment.WebRootPath + @"/PDF/"; - - //Load TIFF image to stream - FileStream imageFileStream = - new FileStream(dataPath + "image.tiff", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - if (viewTemplate == "View Template") - { - return File(imageFileStream, "application/image", "image.tiff"); - } - else if (createPDF == "Convert to PDF") - { - //Create a new PDF document - PdfDocument document = new PdfDocument(); - - //Set margin to the page - document.PageSettings.Margins.All = 0; - - //Load Multiframe Tiff image - PdfTiffImage tiffImage = new PdfTiffImage(imageFileStream); - - //Get the frame count - int frameCount = tiffImage.FrameCount; - - //Access each frame and draw into the page - for (int i = 0; i < frameCount; i++) - { - //Add new page for each frames - PdfPage page = document.Pages.Add(); - - //Get page graphics - PdfGraphics graphics = page.Graphics; - - //Set active frame. - tiffImage.ActiveFrame = i; - - //Draw Tiff image into page - graphics.DrawImage(tiffImage, 0, 0, page.GetClientSize().Width, page.GetClientSize().Height); - - } - - //Save PDF document - MemoryStream stream = new MemoryStream(); - - document.Save(stream); - - //Close the PDF document - document.Close(true); - - stream.Position = 0; - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/pdf"); - fileStreamResult.FileDownloadName = "TiffToPDF.pdf"; - return fileStreamResult; - } - else - return null; - // return View(); - } -} \ No newline at end of file diff --git a/Pages/Pdf/WatermarkPDF.cshtml b/Pages/Pdf/WatermarkPDF.cshtml deleted file mode 100644 index 6fd4d5f8..00000000 --- a/Pages/Pdf/WatermarkPDF.cshtml +++ /dev/null @@ -1,116 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.WatermarkPDF - -@section ControlsSection { -
- @{ - Html.BeginForm("watermarkpdf", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
-

- @Html.Label("", (string)Model.Lab) -

-
-
-
- - - - -
-
-
-     Stamping Text:  - -
-
-
-     Set Transparency:  - -
-
- - -    - Image watermark - - -
-
-
- -
-
-
-
-
-
- -
-
-
-
- Html.EndForm(); - } - } -
-} - - -} - -@section ActionDescription{ -

- This sample demonstrates how to stamp an existing PDF document using text. The Essential PDF supports both stamp or watermark with text and images in the PDF document. -

-} - -@section Meta{ - -} - -@section Description{ -

- This feature can be used to stamp the PDF document for draft, confidential, review purpose only, company logo, copyright notice and more. - More information about the stamp or watermark can be found in this documentation section. -

-} - -@section Title{ - ASP.NET Core PDF library - Watermark PDF Example - Syncfusion Demos -} - -@section Header{ -

Example of Watermark PDF in ASP.NET Core PDF Library

-} diff --git a/Pages/Pdf/WatermarkPDF.cshtml.cs b/Pages/Pdf/WatermarkPDF.cshtml.cs deleted file mode 100644 index ebb4bdf8..00000000 --- a/Pages/Pdf/WatermarkPDF.cshtml.cs +++ /dev/null @@ -1,125 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Pdf.Parsing; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class WatermarkPDF : PageModel -{ - public string Lab { get; set; } - public string Message { get; set; } - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public WatermarkPDF(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string Browser, string Stamptext, string imageWatermark, float transparency, - IFormFile file, IFormFile imageFile) - { - PdfLoadedDocument ldoc = null; - Stream fileStream = GetInputDocument(file); - - if ((imageWatermark == " Watermark" && imageFile != null && imageFile.Length > 0) || - imageWatermark == null && Stamptext != null) - { - ldoc = new PdfLoadedDocument(fileStream); - - PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 36f); - foreach (PdfPageBase lPage in ldoc.Pages) - { - SizeF pageSize = lPage.Size; - if (!string.IsNullOrEmpty(Stamptext)) - { - var textSize = font.MeasureString(Stamptext); - while (textSize.Width > 600) - { - font = new PdfStandardFont(PdfFontFamily.Helvetica, font.Size - 1); - textSize = font.MeasureString(Stamptext); - } - - PdfGraphics graphics = lPage.Graphics; - PdfGraphicsState state = graphics.Save(); - graphics.SetTransparency(transparency); - graphics.TranslateTransform(pageSize.Width / 2, pageSize.Height / 2); - graphics.RotateTransform(-45); - graphics.DrawString(Stamptext, font, PdfBrushes.Red, - new RectangleF(-(textSize.Width / 2), -(textSize.Height / 2), pageSize.Width, pageSize.Height)); - graphics.Restore(state); - } - - if (imageWatermark == " Watermark") - { - PdfGraphics graphics = lPage.Graphics; - graphics.Save(); - PdfImage image = new PdfTiffImage(imageFile.OpenReadStream()); - graphics.SetTransparency(transparency); - graphics.DrawImage(image, 0, 0, lPage.Graphics.ClientSize.Width, lPage.Graphics.ClientSize.Height); - graphics.Restore(); - } - } - } - else - { - Lab = "Please select a valid image file or enter text to add a watermark."; - return null; - // return View(); - } - - MemoryStream stream = new MemoryStream(); - - //Save the PDF document - ldoc.Save(stream); - - stream.Position = 0; - - //Close the PDF document - ldoc.Close(true); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/pdf"); - fileStreamResult.FileDownloadName = "Watermark.pdf"; - fileStream.Dispose(); - return fileStreamResult; - } - private Stream GetInputDocument(IFormFile file) - { - - if (file != null) - { - string extension = Path.GetExtension(file.FileName).ToLower(); - // Compares extension with supported extensions. - if (extension == ".pdf") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - Message = string.Format("Please choose a valid PDF document to add watermark"); - return null; - } - } - else - { - //Opens an existing document from stream through constructor of `WordDocument` class - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/PDF/HTTP Succinctly.pdf", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } -} \ No newline at end of file diff --git a/Pages/Pdf/WordToPDF.cshtml b/Pages/Pdf/WordToPDF.cshtml deleted file mode 100644 index c7336131..00000000 --- a/Pages/Pdf/WordToPDF.cshtml +++ /dev/null @@ -1,56 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.WordToPDF - -@section ControlsSection{ -
- @{ var Title = " Essential DocIO (Word) : Word To PDF : Syncfusion"; } - - @{Html.BeginForm("wordtopdf", "pdf", FormMethod.Post, new { enctype = "multipart/form-data" }); - - { - -
-
- - Click the button to view the resultant PDF document being converted from Word document using Essential DocIO and Essential PDF. Please note that PDF viewer is required to view the resultant PDF. - -
-
- Select Document -
- @Html.TextBox("file", "", new { type = "file", accept = ".doc,.docx,.rtf,.dot,.dotm,.dotx,docm,.xml" })
-
-
-
- -
-
-
- @Model.Message -
-
-
- - Html.EndForm(); - }} -
-} -@section ActionDescription{ -
- This sample demonstrates how to convert word document to PDF. The Essential PDF supports customization in the conversion such as changing image quality, font embedding and more. -
-} -@section Meta{ - - } -@section Description{ -
- More information about the Word to PDF conversion can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - Word To PDF Example - Syncfusion Demos - } -@section Header{ -

Example of Word To PDF in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/WordToPDF.cshtml.cs b/Pages/Pdf/WordToPDF.cshtml.cs deleted file mode 100644 index 5c6febb5..00000000 --- a/Pages/Pdf/WordToPDF.cshtml.cs +++ /dev/null @@ -1,86 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIO.DLS; -using Syncfusion.DocIO; -using Syncfusion.DocIORenderer; -using Syncfusion.Pdf; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class WordToPDF : PageModel -{ - public void OnGet() - { - - } - public string Message { get; set; } - public IActionResult OnPost(string button) - { - if (button == null) - return null; - // return View(); - Stream stream = GetWordDocument(); - if (stream != null) - { - try - { - string output = (Request.Form.Files != null && Request.Form.Files.Count != 0) ? Path.GetFileNameWithoutExtension(Request.Form.Files[0].FileName) : "WordtoPDF"; - // Loads document from stream. - WordDocument document = new WordDocument(stream, FormatType.Automatic); - // Creates a new instance of DocIORenderer class. - DocIORenderer render = new DocIORenderer(); - // Converts Word document into PDF document. - PdfDocument pdf = render.ConvertToPDF(document); - MemoryStream memoryStream = new MemoryStream(); - // Save the PDF document. - pdf.Save(memoryStream); - render.Dispose(); - pdf.Close(); - document.Close(); - memoryStream.Position = 0; - return File(memoryStream, "application/pdf", output + ".pdf"); - } - catch - { - Message = string.Format("The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - } - } - - return null; - // return View(); - } - private Stream GetWordDocument() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".doc" || extension == ".docx" || extension == ".dot" || extension == ".dotx" || extension == ".dotm" || extension == ".docm" - || extension == ".xml" || extension == ".rtf") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - Message = string.Format("Please choose Word format document to convert to PDF"); - return null; - } - } - else - { - Message = string.Format("Choose a Word format document file."); - return null; - } - } -} \ No newline at end of file diff --git a/Pages/Pdf/XFAFormCreation.cshtml b/Pages/Pdf/XFAFormCreation.cshtml deleted file mode 100644 index 7905813e..00000000 --- a/Pages/Pdf/XFAFormCreation.cshtml +++ /dev/null @@ -1,57 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.XFAFormCreation - -@using Syncfusion.EJ2 - -@{ var Title = "Essential PDF : XFA Form Creation : Syncfusion"; } - -@section ControlsSection{ -
- @{Html.BeginForm("xfaformcreation", "pdf", FormMethod.Post); - { -
-
-
-
-
- - - - - - - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
- -
-
-
-
-
- Html.EndForm(); - }} -
-} -@section ActionDescription{ -
- This sample demonstrates how to create registration form using XFA form fields. The Essential PDF supports to create dynamic and static XFA form fields. -
-} -@section Meta{ - -} -@section Description{ -
- More information about the XFA can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - XFA Form Creation Example - Syncfusion Demos -} -@section Header{ -

Example of XFA Form Creation in ASP.NET Core PDF Library

-} \ No newline at end of file diff --git a/Pages/Pdf/XFAFormCreation.cshtml.cs b/Pages/Pdf/XFAFormCreation.cshtml.cs deleted file mode 100644 index a32d0d5f..00000000 --- a/Pages/Pdf/XFAFormCreation.cshtml.cs +++ /dev/null @@ -1,383 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Drawing; -using Syncfusion.Pdf.Xfa; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class XFAFormCreation : PageModel -{ - public void OnGet() - { - - } - - [HttpPost] - public ActionResult OnPost(string Browser) - { - PdfXfaDocument doc = new PdfXfaDocument(); - - PdfXfaPage page = doc.Pages.Add(); - - PdfFont font0 = new PdfStandardFont(PdfFontFamily.Helvetica, 14, PdfFontStyle.Bold); - PdfFont font1 = new PdfStandardFont(PdfFontFamily.TimesRoman, 11, PdfFontStyle.Italic); - PdfFont font2 = new PdfStandardFont(PdfFontFamily.TimesRoman, 9, PdfFontStyle.Italic); - PdfFont font3 = new PdfStandardFont(PdfFontFamily.TimesRoman, 11, PdfFontStyle.Regular); - - PdfXfaForm mainForm = new PdfXfaForm(PdfXfaFlowDirection.Vertical, page.GetClientSize().Width); - PdfXfaForm subForm1 = new PdfXfaForm(PdfXfaFlowDirection.Horizontal, page.GetClientSize().Width - 40); - - PdfXfaForm headerForm = new PdfXfaForm(page.GetClientSize().Width); - headerForm.Width = page.GetClientSize().Width; - headerForm.Border = new PdfXfaBorder() { Width = 0 }; - headerForm.Border.FillColor = new PdfXfaSolidBrush(new PdfColor(Color.OrangeRed)); - - PdfXfaTextElement cr = new PdfXfaTextElement("CONFERENCE REGISTRATION") - { - HorizontalAlignment = PdfXfaHorizontalAlignment.Center, VerticalAlignment = PdfXfaVerticalAlignment.Middle, - Width = page.GetClientSize().Width, Height = 60 - }; - cr.Font = new PdfStandardFont(PdfFontFamily.TimesRoman, 26, PdfFontStyle.Bold); - cr.ForeColor = new PdfColor(Color.White); - headerForm.Fields.Add(cr); - - mainForm.Fields.Add(headerForm); - - subForm1.Margins.Left = 40; - subForm1.Margins.Bottom = 40; - - PdfXfaTextElement name = new PdfXfaTextElement("Name", font0); - name.Width = 500; - name.Height = 70; - name.VerticalAlignment = PdfXfaVerticalAlignment.Bottom; - name.Margins.Top = 20; - subForm1.Fields.Add(name); - - PdfXfaLine line1 = new PdfXfaLine(new PointF(0, 0), new PointF(450, 0), 1.2f); - line1.Color = new PdfColor(Color.LightGray); - subForm1.Fields.Add(line1); - - PdfXfaRectangleField rectangle = new PdfXfaRectangleField("rect", new SizeF(60, 1.2f)) - { Visibility = PdfXfaVisibility.Invisible }; - subForm1.Fields.Add(rectangle); - - PdfXfaCaption caption1 = new PdfXfaCaption(); - caption1.VerticalAlignment = PdfXfaVerticalAlignment.Bottom; - caption1.HorizontalAlignment = PdfXfaHorizontalAlignment.Center; - caption1.Position = PdfXfaPosition.Bottom; - caption1.Font = font2; - caption1.Width = caption1.Font.MeasureString("first Name").Height + 3; - - PdfXfaComboBoxField title = new PdfXfaComboBoxField("title", new SizeF(40, 40)) { Width = 34, Height = 40 }; - title.Caption = caption1.Clone() as PdfXfaCaption; - title.Caption.Text = "Title"; - title.Border.Style = PdfXfaBorderStyle.Lowered; - title.HorizontalAlignment = PdfXfaHorizontalAlignment.JustifyAll; - title.Items.Add("Mr"); - title.Items.Add("Mrs"); - title.Items.Add("Miss"); - subForm1.Fields.Add(title); - title.Margins.Top = 7; - - PdfXfaTextBoxField fn = new PdfXfaTextBoxField("fn", new SizeF(207, 40)) { Width = 208, Height = 40 }; - fn.Caption = caption1.Clone() as PdfXfaCaption; - fn.Caption.Text = "First Name"; - fn.Margins.Left = 5; - fn.Margins.Top = 7; - fn.Border.Style = PdfXfaBorderStyle.Lowered; - subForm1.Fields.Add(fn); - - PdfXfaTextBoxField ln = new PdfXfaTextBoxField("ln", new SizeF(214, 50)) { Width = 208, Height = 40 }; - ln.Caption = caption1.Clone() as PdfXfaCaption; - ln.Caption.Text = "Last Name"; - ln.Border.Style = PdfXfaBorderStyle.Lowered; - ln.Margins.Left = 5; - ln.Margins.Top = 7; - subForm1.Fields.Add(ln); - - caption1.HorizontalAlignment = PdfXfaHorizontalAlignment.Left; - caption1.VerticalAlignment = PdfXfaVerticalAlignment.Top; - caption1.Position = PdfXfaPosition.Top; - caption1.Font = font3; - - - PdfXfaDateTimeField dob = new PdfXfaDateTimeField("dob", new SizeF(450, 40)); - dob.Caption = caption1.Clone() as PdfXfaCaption; - dob.Caption.Text = "Date of Birth"; - dob.Margins.Top = 7; - dob.HorizontalAlignment = PdfXfaHorizontalAlignment.Left; - dob.Border.Style = PdfXfaBorderStyle.Lowered; - subForm1.Fields.Add(dob); - - - PdfXfaTextBoxField company = new PdfXfaTextBoxField("company", new SizeF(450, 40)) { Width = 450, Height = 40 }; - company.Caption = caption1.Clone() as PdfXfaCaption; - company.Caption.Text = "Company"; - company.Margins.Top = 7; - company.Border.Style = PdfXfaBorderStyle.Lowered; - subForm1.Fields.Add(company); - - PdfXfaTextBoxField jt = new PdfXfaTextBoxField("jt", new SizeF(500, 50)) { Width = 450, Height = 40 }; - jt.Caption = caption1.Clone() as PdfXfaCaption; - jt.Caption.Text = "Job Title"; - jt.Border.Style = PdfXfaBorderStyle.Lowered; - jt.Margins.Top = 7; - subForm1.Fields.Add(jt); - - PdfXfaTextBoxField jd = new PdfXfaTextBoxField("jd", new SizeF(500, 120)) { Width = 450 }; - jd.Caption = caption1.Clone() as PdfXfaCaption; - jd.Caption.Text = "Job Description"; - jd.Type = PdfXfaTextBoxType.Multiline; - jd.Border.Style = PdfXfaBorderStyle.Lowered; - jd.Margins.Top = 7; - subForm1.Fields.Add(jd); - - PdfXfaTextElement address = new PdfXfaTextElement("Address", font0); - address.Width = 500; - address.Height = 40; - address.VerticalAlignment = PdfXfaVerticalAlignment.Bottom; - address.Margins.Top = 10; - subForm1.Fields.Add(address); - subForm1.Fields.Add(line1); - - caption1.VerticalAlignment = PdfXfaVerticalAlignment.Bottom; - caption1.Position = PdfXfaPosition.Bottom; - caption1.Font = font2; - - PdfXfaTextBoxField st = new PdfXfaTextBoxField("st", new SizeF(450, 30)) { Width = 450, Height = 40 }; - st.Caption = caption1.Clone() as PdfXfaCaption; - st.Caption.Text = "Street Address"; - st.Border.Style = PdfXfaBorderStyle.Lowered; - st.Margins.Top = 7; - subForm1.Fields.Add(st); - - PdfXfaTextBoxField addLine1 = new PdfXfaTextBoxField("ad1", new SizeF(500, 30)) { Width = 450, Height = 40 }; - addLine1.Caption = caption1.Clone() as PdfXfaCaption; - addLine1.Caption.Text = "Address Line1"; - addLine1.Border.Style = PdfXfaBorderStyle.Lowered; - addLine1.Margins.Top = 7; - subForm1.Fields.Add(addLine1); - - PdfXfaTextBoxField city = new PdfXfaTextBoxField("city", new SizeF(280, 30)) { Width = 220, Height = 40 }; - city.Caption = caption1.Clone() as PdfXfaCaption; - city.Caption.Text = "City"; - city.Border.Style = PdfXfaBorderStyle.Lowered; - city.Margins.Top = 7; - subForm1.Fields.Add(city); - - PdfXfaComboBoxField state = new PdfXfaComboBoxField("state", new SizeF(230, 40)); - state.Items.Add("Colorado"); - state.Items.Add("Florida"); - state.Items.Add("Georgia"); - state.Items.Add("Hawaii"); - state.Items.Add("Nevada"); - state.Items.Add("New Mexico"); - state.Items.Add("New York"); - state.Items.Add("North Carolina"); - state.Items.Add("Oregon"); - state.Items.Add("Texas"); - state.Caption = caption1.Clone() as PdfXfaCaption; - state.Caption.Text = "State"; - state.Border.Style = PdfXfaBorderStyle.Lowered; - state.Margins.Left = 5; - state.Margins.Top = 7; - subForm1.Fields.Add(state); - - - PdfXfaNumericField zip = new PdfXfaNumericField("zip", new SizeF(220, 40)); - zip.Caption = caption1.Clone() as PdfXfaCaption; - zip.CombLength = 5; - zip.Caption.Text = "Postal / Zip Code"; - zip.PatternString = "zzzz9"; - zip.FieldType = PdfXfaNumericType.Integer; - zip.Border.Style = PdfXfaBorderStyle.Lowered; - zip.Margins.Top = 7; - subForm1.Fields.Add(zip); - - PdfXfaTextBoxField country = new PdfXfaTextBoxField("country", new SizeF(500, 30)) { Width = 230, Height = 40 }; - country.Caption = caption1.Clone() as PdfXfaCaption; - country.Caption.Text = "Country"; - country.Border.Style = PdfXfaBorderStyle.Lowered; - country.Margins.Left = 5; - country.Margins.Top = 7; - subForm1.Fields.Add(country); - - - PdfXfaTextBoxField email = new PdfXfaTextBoxField("em", new SizeF(500, 30)) { Width = 220, Height = 40 }; - email.Caption = caption1.Clone() as PdfXfaCaption; - email.Caption.Text = "Email"; - email.Margins.Top = 7; - email.Border.Style = PdfXfaBorderStyle.Lowered; - subForm1.Fields.Add(email); - - PdfXfaNumericField phone = new PdfXfaNumericField("phone", new SizeF(230, 40)); - phone.Caption = caption1.Clone() as PdfXfaCaption; - phone.Caption.Text = "Phone Number"; - phone.FieldType = PdfXfaNumericType.Decimal; - phone.Margins.Left = 5; - phone.PatternString = "zzzzzzzzz9"; - phone.Margins.Top = 7; - phone.Border.Style = PdfXfaBorderStyle.Lowered; - subForm1.Fields.Add(phone); - - - - PdfXfaTextElement specialDN = new PdfXfaTextElement("Special Dietary Needs"); - specialDN.Font = font0; - specialDN.Margins.Top = 25; - specialDN.Height = 42; - specialDN.Width = 450; - subForm1.Fields.Add(specialDN); - subForm1.Fields.Add(line1); - - PdfXfaListBoxField sdn = new PdfXfaListBoxField("sdn", new SizeF(450, 80)); - sdn.Items.Add("Vegan"); - sdn.Items.Add("Gluten Free"); - sdn.Items.Add("Nut Free"); - sdn.Items.Add("Diary Free"); - sdn.Items.Add("Vegetables"); - sdn.SelectionMode = PdfXfaSelectionMode.Multiple; - sdn.HorizontalAlignment = PdfXfaHorizontalAlignment.Left; - sdn.Border.Style = PdfXfaBorderStyle.Lowered; - sdn.Margins.Top = 7; - subForm1.Fields.Add(sdn); - - - PdfXfaTextElement specialAN = new PdfXfaTextElement("Special Assistance Needs"); - specialAN.Font = font0; - specialAN.Margins.Top = 25; - specialAN.Height = 42; - specialAN.Width = 450; - subForm1.Fields.Add(specialAN); - subForm1.Fields.Add(line1); - - PdfXfaListBoxField san = new PdfXfaListBoxField("san", new SizeF(450, 40)); - san.Items.Add("Wheel chair"); - san.Items.Add("Ambulatory lift services"); - san.HorizontalAlignment = PdfXfaHorizontalAlignment.Left; - san.Margins.Top = 7; - san.Border.Style = PdfXfaBorderStyle.Lowered; - subForm1.Fields.Add(san); - - PdfXfaTextElement pcm = new PdfXfaTextElement("Prefered Contact Method"); - pcm.Font = font0; - pcm.Margins.Top = 25; - pcm.Height = 42; - pcm.Width = 500; - subForm1.Fields.Add(pcm); - subForm1.Fields.Add(line1); - - PdfXfaCaption caption = new PdfXfaCaption(); - caption.Font = font1; - caption.Width = 370; - caption.VerticalAlignment = PdfXfaVerticalAlignment.Middle; - caption.Position = PdfXfaPosition.Right; - - PdfXfaCheckBoxField c_email = new PdfXfaCheckBoxField("email", new SizeF(400, 22)); - c_email.HorizontalAlignment = PdfXfaHorizontalAlignment.Left; - c_email.Caption = caption.Clone() as PdfXfaCaption; - c_email.Caption.Text = "E-Mail"; - c_email.CheckedStyle = PdfXfaCheckedStyle.Check; - c_email.Border.Style = PdfXfaBorderStyle.Lowered; - c_email.Margins.Top = 7; - subForm1.Fields.Add(c_email); - - - PdfXfaCheckBoxField c_phone = new PdfXfaCheckBoxField("phone", new SizeF(400, 20)); - c_phone.HorizontalAlignment = PdfXfaHorizontalAlignment.Left; - c_phone.Caption = caption.Clone() as PdfXfaCaption; - c_phone.Caption.Text = "Phone"; - c_phone.Margins.Top = 7; - c_phone.Border.Style = PdfXfaBorderStyle.Lowered; - c_phone.CheckedStyle = PdfXfaCheckedStyle.Check; - subForm1.Fields.Add(c_phone); - - PdfXfaCheckBoxField c_mail = new PdfXfaCheckBoxField("mail", new SizeF(400, 20)); - c_mail.HorizontalAlignment = PdfXfaHorizontalAlignment.Left; - c_mail.Caption = caption.Clone() as PdfXfaCaption; - c_mail.Caption.Text = "Mail"; - c_mail.Border.Style = PdfXfaBorderStyle.Lowered; - c_mail.Margins.Top = 7; - c_mail.CheckedStyle = PdfXfaCheckedStyle.Check; - subForm1.Fields.Add(c_mail); - - PdfXfaCheckBoxField c_nocontact = new PdfXfaCheckBoxField("nc", new SizeF(400, 20)); - c_nocontact.HorizontalAlignment = PdfXfaHorizontalAlignment.Left; - c_nocontact.Caption = caption.Clone() as PdfXfaCaption; - c_nocontact.Caption.Text = "No Contact"; - c_nocontact.Margins.Top = 5; - c_nocontact.Border.Style = PdfXfaBorderStyle.Lowered; - c_nocontact.CheckedStyle = PdfXfaCheckedStyle.Check; - subForm1.Fields.Add(c_nocontact); - - PdfXfaTextElement MS = new PdfXfaTextElement("Membership status"); - MS.Font = font0; - MS.Margins.Top = 25; - MS.Height = 42; - MS.Width = 400; - subForm1.Fields.Add(MS); - subForm1.Fields.Add(line1); - - PdfXfaRadioButtonGroup msg = new PdfXfaRadioButtonGroup("group1"); - msg.Margins.Top = 7; - subForm1.Fields.Add(msg); - - PdfXfaRadioButtonField r_nonMember = new PdfXfaRadioButtonField("r1", new SizeF(120, 15)); - r_nonMember.Caption = caption.Clone() as PdfXfaCaption; - r_nonMember.Caption.Text = "Non-Member"; - r_nonMember.VerticalAlignment = PdfXfaVerticalAlignment.Middle; - r_nonMember.Border.Style = PdfXfaBorderStyle.Lowered; - r_nonMember.Caption.Width = 100; - msg.Items.Add(r_nonMember); - - PdfXfaRadioButtonField r_member = new PdfXfaRadioButtonField("r2", new SizeF(100, 15)); - r_member.Caption = caption.Clone() as PdfXfaCaption; - r_member.Caption.Text = "Member"; - r_member.Border.Style = PdfXfaBorderStyle.Lowered; - r_member.VerticalAlignment = PdfXfaVerticalAlignment.Middle; - r_member.Caption.Width = 80; - msg.Items.Add(r_member); - - PdfXfaRadioButtonField r_exhibition = new PdfXfaRadioButtonField("r3", new SizeF(100, 15)); - r_exhibition.Caption = caption.Clone() as PdfXfaCaption; - r_exhibition.Caption.Text = "Exhibition"; - r_exhibition.VerticalAlignment = PdfXfaVerticalAlignment.Middle; - r_exhibition.Caption.Width = 80; - r_exhibition.Border.Style = PdfXfaBorderStyle.Lowered; - msg.Items.Add(r_exhibition); - - PdfXfaRadioButtonField r_student = new PdfXfaRadioButtonField("r4", new SizeF(100, 15)); - r_student.Caption = caption.Clone() as PdfXfaCaption; - r_student.Caption.Text = "Student"; - r_student.VerticalAlignment = PdfXfaVerticalAlignment.Middle; - r_student.Border.Style = PdfXfaBorderStyle.Lowered; - r_student.Caption.Width = 80; - msg.Items.Add(r_student); - - mainForm.Fields.Add(subForm1); - doc.XfaForm = mainForm; - - //Saving the XFA document to the MemoryStream - MemoryStream ms = new MemoryStream(); - doc.Save(ms, PdfXfaType.Static); - - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the document - doc.Close(); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "XFAFormCreation.pdf"; - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Pdf/XFAFormFilling.cshtml b/Pages/Pdf/XFAFormFilling.cshtml deleted file mode 100644 index 8ed3f5ef..00000000 --- a/Pages/Pdf/XFAFormFilling.cshtml +++ /dev/null @@ -1,62 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.XFAFormFilling - -@using Syncfusion.EJ2 - -@{ var Title = "Essential PDF : XFAFormFilling : Syncfusion"; } - -@section ControlsSection{ - -
- @{Html.BeginForm("xfaformfilling", "pdf", FormMethod.Post); - { - -
-
-
-
- - - - - - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
- -   - -
-
-
-
-
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to fill XFA form fields. It is possible to edit and remove the existing XFA form fields. -
-} -@section Meta{ - - } -@section Description{ -
- This feature can be used in filling forms from the database or from user and read out form fields for transferring user data to database. - More information about the XFA can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - XFA Form Filling Example - Syncfusion Demos - } -@section Header{ -

Example of XFA Form Filling in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/XFAFormFilling.cshtml.cs b/Pages/Pdf/XFAFormFilling.cshtml.cs deleted file mode 100644 index 075f98b1..00000000 --- a/Pages/Pdf/XFAFormFilling.cshtml.cs +++ /dev/null @@ -1,110 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Pdf.Xfa; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class XFAFormFilling : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public XFAFormFilling(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string submit1, string submit, string Browser) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - - if (submit1 == "View Template") - { - Stream file2 = new FileStream(dataPath + "xfaTemplate.pdf", FileMode.Open, FileAccess.Read, FileShare.Read); - FileStreamResult fileStreamResult = new FileStreamResult(file2, "application/pdf"); - fileStreamResult.FileDownloadName = "XFAFormTemplate.pdf"; - return fileStreamResult; - } - else - { - //Read the file - FileStream file1 = new FileStream(dataPath + "xfaTemplate.pdf", FileMode.Open, FileAccess.Read, - FileShare.ReadWrite); - - //Load the existing XFA document. - PdfLoadedXfaDocument ldoc = new PdfLoadedXfaDocument(file1); - - //Loaded the existing XFA form. - PdfLoadedXfaForm lform = ldoc.XfaForm; - - //Fill the XFA form fields. - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["title[0]"] as PdfLoadedXfaComboBoxField).SelectedIndex = 0; - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["fn[0]"] as PdfLoadedXfaTextBoxField).Text = "Simons"; - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["ln[0]"] as PdfLoadedXfaTextBoxField).Text = "Bistro"; - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["dob[0]"] as PdfLoadedXfaDateTimeField).Value = new DateTime(1989, 5, 21); - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["company[0]"] as PdfLoadedXfaTextBoxField).Text = "XYZ Pvt Ltd"; - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["jt[0]"] as PdfLoadedXfaTextBoxField).Text = "Developer"; - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["jd[0]"] as PdfLoadedXfaTextBoxField).Text = - "Develop and maintain components and applications for the web, desktop and mobile platforms. \nWork with some of the best UI/UX designers in the world to craft Stunning user interfaces. \nRegular appraisals to ensure quick growth if you deliver on the job."; - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["st[0]"] as PdfLoadedXfaTextBoxField).Text = "Vinbaeltet 34"; - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["ad1[0]"] as PdfLoadedXfaTextBoxField).Text = "Kobenhaven"; - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["city[0]"] as PdfLoadedXfaTextBoxField).Text = "Denmark"; - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["state[0]"] as PdfLoadedXfaComboBoxField).SelectedIndex = 1; - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["zip[0]"] as PdfLoadedXfaNumericField).NumericValue = 24534; - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["country[0]"] as PdfLoadedXfaTextBoxField).Text = "US"; - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["em[0]"] as PdfLoadedXfaTextBoxField).Text = "simonsbistro@outlook.com"; - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["phone[0]"] as PdfLoadedXfaNumericField).NumericValue = 8765456789; - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["sdn[0]"] as PdfLoadedXfaListBoxField).SelectedItems = new string[] { "Vegan", "Diary Free" }; - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["san[0]"] as PdfLoadedXfaListBoxField).SelectedIndex = 0; - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["email[0]"] as PdfLoadedXfaCheckBoxField).IsChecked = true; - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["phone[1]"] as PdfLoadedXfaCheckBoxField).IsChecked = true; - (((lform.Fields["subform1[0]"] as PdfLoadedXfaForm).Fields["subform3[0]"] as PdfLoadedXfaForm).Fields - ["group1[0]"] as PdfLoadedXfaRadioButtonGroup).Fields[1].IsChecked = true; - - //Saving the PDF to the MemoryStream - MemoryStream ms = new MemoryStream(); - ldoc.Save(ms); - //If the position is not set to '0' then the PDF will be empty. - ms.Position = 0; - - //Close the document - ldoc.Close(); - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/pdf"); - fileStreamResult.FileDownloadName = "XFAFormFill.pdf"; - return fileStreamResult; - } - } -} \ No newline at end of file diff --git a/Pages/Pdf/XPSToPDF.cshtml b/Pages/Pdf/XPSToPDF.cshtml deleted file mode 100644 index c2baf576..00000000 --- a/Pages/Pdf/XPSToPDF.cshtml +++ /dev/null @@ -1,51 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.XPSToPDF - -@section ControlsSection{ -
- @{Html.BeginForm("xpstopdf", "pdf", FormMethod.Post); - { -
-
-
- - - - - - -
- Click the button to view a PDF document generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
- -
-
- -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to convert XPS to PDF document. -
-} -@section Meta{ - - } -@section Description{ -
- More information about XPS to PDF document can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - XPS To PDF Example - Syncfusion Demos - } -@section Header{ -

Example of XPS To PDF in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/XPSToPDF.cshtml.cs b/Pages/Pdf/XPSToPDF.cshtml.cs deleted file mode 100644 index 775075cc..00000000 --- a/Pages/Pdf/XPSToPDF.cshtml.cs +++ /dev/null @@ -1,52 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Pdf; -using Syncfusion.XPS; -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class XPSToPDF : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public XPSToPDF(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string createPDF) - { - string dataPath = _hostingEnvironment.WebRootPath + @"/PDF/"; - - //Load XPS file to stream - FileStream inputStream = new FileStream(dataPath + "XPStoPDF.xps", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - XPSToPdfConverter converter = new XPSToPdfConverter(); - - //Convert XPS document into PDF document - PdfDocument document = converter.Convert(inputStream); - - //Save PDF document - MemoryStream stream = new MemoryStream(); - - document.Save(stream); - - //Close the PDF document - document.Close(true); - - stream.Position = 0; - - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/pdf"); - fileStreamResult.FileDownloadName = "XPSToPDF.pdf"; - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Pdf/Zugferd.cshtml b/Pages/Pdf/Zugferd.cshtml deleted file mode 100644 index 88cb9625..00000000 --- a/Pages/Pdf/Zugferd.cshtml +++ /dev/null @@ -1,54 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Pdf.Zugferd - -@section ControlsSection - { -
- @{Html.BeginForm("zugferd", "pdf", FormMethod.Post); - { -
-
-
-
- - - - - - - -
- Click the button to view a ZUGFeRD PDF invoice generated by Essential PDF. Please note - that Adobe Reader or its equivalent is required to view the resultant document. -
-
- -
-
-
-
- - Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates the creation of ZUGFeRD PDF invoice using Essential PDF. -
-} -@section Meta{ - - } -@section Description{ -
- This feature can be used for long term archiving and standardization. More information about conformance can be found in this documentation section. -
-} -@section Title{ - ASP.NET Core PDF library - ZUGFeRD Invoice Example - Syncfusion Demos - } -@section Header{ -

Example of ZUGFeRD Invoice in ASP.NET Core PDF Library

- } \ No newline at end of file diff --git a/Pages/Pdf/Zugferd.cshtml.cs b/Pages/Pdf/Zugferd.cshtml.cs deleted file mode 100644 index 94037cec..00000000 --- a/Pages/Pdf/Zugferd.cshtml.cs +++ /dev/null @@ -1,392 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.Pdf; -using Syncfusion.Pdf.Graphics; -using Syncfusion.Pdf.Interactive; -using Syncfusion.Pdf.Grid; -using System.Xml.Linq; -using Syncfusion.Zugferd; - -namespace EJ2CoreSampleBrowser.Pages.Pdf; - -public class Zugferd : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public Zugferd(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - RectangleF TotalPriceCellBounds = RectangleF.Empty; - RectangleF QuantityCellBounds = RectangleF.Empty; - [HttpPost] - public ActionResult OnPost(string Browser) - { - //Create ZugFerd invoice PDF - PdfDocument document = new PdfDocument(PdfConformanceLevel.Pdf_A3B); - - document.ZugferdVersion = ZugferdVersion.ZugferdVersion2_0; - document.ZugferdConformanceLevel = ZugferdConformanceLevel.Extended; - - CreateZugFerdInvoicePDF(document); - - //Create ZugFerd Xml attachment file - Stream zugferdXmlStream = CreateZugFerdXML(); - - //Creates an attachment. - PdfAttachment attachment = new PdfAttachment("ZUGFeRD-invoice.xml", zugferdXmlStream); - attachment.Relationship = PdfAttachmentRelationship.Alternative; - attachment.ModificationDate = DateTime.Now; - - attachment.Description = "Adventure Invoice"; - - attachment.MimeType = "application/xml"; - - document.Attachments.Add(attachment); - - MemoryStream stream = new MemoryStream(); - //Save the PDF document. - document.Save(stream); - - //Close the PDF document. - document.Close(); - - stream.Position = 0; - //Download the PDF document in the browser. - FileStreamResult fileStreamResult = new FileStreamResult(stream, "application/pdf"); - fileStreamResult.FileDownloadName = "Zugferd.pdf"; - return fileStreamResult; - } - - public Stream CreateZugFerdXML() - { - //Create ZugFerd Invoice - ZugFerdInvoice invoice = new ZugFerdInvoice("2058557939", new DateTime(2013, 6, 5), CurrencyCodes.USD); - - //Set ZugFerdProfile to ZugFerdInvoice - invoice.Profile = ZugFerdProfile.Basic; - - //Add buyer details - invoice.Buyer = new UserDetails - { - ID = "Abraham_12", - Name = "Abraham Swearegin", - ContactName = "Swearegin", - City = "United States, California", - Postcode = "9920", - Country = CountryCodes.US, - Street = "9920 BridgePointe Parkway" - }; - - //Add seller details - invoice.Seller = new UserDetails - { - ID = "Adventure_123", - Name = "AdventureWorks", - ContactName = "Adventure support", - City = "Austin,TX", - Postcode = "", - Country = CountryCodes.US, - Street = "800 Interchange Blvd" - }; - - - IEnumerable products = GetProductReport(); - - foreach (var product in products) - invoice.AddProduct(product); - - PdfGrid grid = new PdfGrid(); - grid.DataSource = GetProductReport(); - invoice.TotalAmount = GetTotalAmount(grid); - - MemoryStream ms = new MemoryStream(); - - //Save ZugFerd Xml - return invoice.Save(ms); - } - - /// - /// Create ZugFerd Invoice Pdf - /// - /// - /// - public PdfDocument CreateZugFerdInvoicePDF(PdfDocument document) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/PDF/"; - - //Add page to the PDF - PdfPage page = document.Pages.Add(); - - PdfGraphics graphics = page.Graphics; - - //Create border color - PdfColor borderColor = Syncfusion.Drawing.Color.FromArgb(255, 142, 170, 219); - - //Get the page width and height - float pageWidth = page.GetClientSize().Width; - float pageHeight = page.GetClientSize().Height; - - //Set the header height - float headerHeight = 90; - - - PdfColor lightBlue = Syncfusion.Drawing.Color.FromArgb(255, 91, 126, 215); - PdfBrush lightBlueBrush = new PdfSolidBrush(lightBlue); - - PdfColor darkBlue = Syncfusion.Drawing.Color.FromArgb(255, 65, 104, 209); - PdfBrush darkBlueBrush = new PdfSolidBrush(darkBlue); - - PdfBrush whiteBrush = new PdfSolidBrush(Syncfusion.Drawing.Color.FromArgb(255, 255, 255, 255)); - - FileStream fontStream = - new FileStream(dataPath + "arial.ttf", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - - PdfTrueTypeFont headerFont = new PdfTrueTypeFont(fontStream, 30, PdfFontStyle.Regular); - - PdfTrueTypeFont arialRegularFont = new PdfTrueTypeFont(fontStream, 18, PdfFontStyle.Regular); - PdfTrueTypeFont arialBoldFont = new PdfTrueTypeFont(fontStream, 9, PdfFontStyle.Bold); - - //Create string format. - PdfStringFormat format = new PdfStringFormat(); - format.Alignment = PdfTextAlignment.Center; - format.LineAlignment = PdfVerticalAlignment.Middle; - - float y = 0; - float x = 0; - - //Set the margins of address. - float margin = 30; - - //Set the line space - float lineSpace = 7; - - PdfPen borderPen = new PdfPen(borderColor, 1f); - - //Draw page border - graphics.DrawRectangle(borderPen, new RectangleF(0, 0, pageWidth, pageHeight)); - - - PdfGrid grid = new PdfGrid(); - - grid.DataSource = GetProductReport(); - - #region Header - - //Fill the header with light Brush - graphics.DrawRectangle(lightBlueBrush, new RectangleF(0, 0, pageWidth, headerHeight)); - - string title = "INVOICE"; - - SizeF textSize = headerFont.MeasureString(title); - - RectangleF headerTotalBounds = new RectangleF(400, 0, pageWidth - 400, headerHeight); - - graphics.DrawString(title, headerFont, whiteBrush, new RectangleF(0, 0, textSize.Width + 50, headerHeight), - format); - - graphics.DrawRectangle(darkBlueBrush, headerTotalBounds); - - graphics.DrawString("$" + GetTotalAmount(grid).ToString(), arialRegularFont, whiteBrush, - new RectangleF(400, 0, pageWidth - 400, headerHeight + 10), format); - - arialRegularFont = new PdfTrueTypeFont(fontStream, 9, PdfFontStyle.Regular); - - format.LineAlignment = PdfVerticalAlignment.Bottom; - graphics.DrawString("Amount", arialRegularFont, whiteBrush, - new RectangleF(400, 0, pageWidth - 400, headerHeight / 2 - arialRegularFont.Height), format); - - #endregion - - - SizeF size = arialRegularFont.MeasureString("Invoice Number: 2058557939"); - y = headerHeight + margin; - x = (pageWidth - margin) - size.Width; - - graphics.DrawString("Invoice Number: 2058557939", arialRegularFont, PdfBrushes.Black, new PointF(x, y)); - - size = arialRegularFont.MeasureString("Date :" + DateTime.Now.ToString("dddd dd, MMMM yyyy")); - x = (pageWidth - margin) - size.Width; - y += arialRegularFont.Height + lineSpace; - - graphics.DrawString("Date: " + DateTime.Now.ToString("dddd dd, MMMM yyyy"), arialRegularFont, PdfBrushes.Black, - new PointF(x, y)); - - y = headerHeight + margin; - x = margin; - graphics.DrawString("Bill To:", arialRegularFont, PdfBrushes.Black, new PointF(x, y)); - y += arialRegularFont.Height + lineSpace; - graphics.DrawString("Abraham Swearegin,", arialRegularFont, PdfBrushes.Black, new PointF(x, y)); - y += arialRegularFont.Height + lineSpace; - graphics.DrawString("United States, California, San Mateo,", arialRegularFont, PdfBrushes.Black, - new PointF(x, y)); - y += arialRegularFont.Height + lineSpace; - graphics.DrawString("9920 BridgePointe Parkway,", arialRegularFont, PdfBrushes.Black, new PointF(x, y)); - y += arialRegularFont.Height + lineSpace; - graphics.DrawString("9365550136", arialRegularFont, PdfBrushes.Black, new PointF(x, y)); - - - #region Grid - - grid.Columns[0].Width = 110; - grid.Columns[1].Width = 150; - grid.Columns[2].Width = 110; - grid.Columns[3].Width = 70; - grid.Columns[4].Width = 100; - - for (int i = 0; i < grid.Headers.Count; i++) - { - grid.Headers[i].Height = 20; - for (int j = 0; j < grid.Columns.Count; j++) - { - PdfStringFormat pdfStringFormat = new PdfStringFormat(); - pdfStringFormat.LineAlignment = PdfVerticalAlignment.Middle; - - pdfStringFormat.Alignment = PdfTextAlignment.Left; - if (j == 0 || j == 2) - grid.Headers[i].Cells[j].Style.CellPadding = new PdfPaddings(30, 1, 1, 1); - - grid.Headers[i].Cells[j].StringFormat = pdfStringFormat; - - grid.Headers[i].Cells[j].Style.Font = arialBoldFont; - - } - - grid.Headers[0].Cells[0].Value = "Product Id"; - } - - for (int i = 0; i < grid.Rows.Count; i++) - { - grid.Rows[i].Height = 23; - for (int j = 0; j < grid.Columns.Count; j++) - { - - PdfStringFormat pdfStringFormat = new PdfStringFormat(); - pdfStringFormat.LineAlignment = PdfVerticalAlignment.Middle; - - pdfStringFormat.Alignment = PdfTextAlignment.Left; - if (j == 0 || j == 2) - grid.Rows[i].Cells[j].Style.CellPadding = new PdfPaddings(30, 1, 1, 1); - - grid.Rows[i].Cells[j].StringFormat = pdfStringFormat; - grid.Rows[i].Cells[j].Style.Font = arialRegularFont; - } - - } - - grid.ApplyBuiltinStyle(PdfGridBuiltinStyle.ListTable4Accent5); - grid.BeginCellLayout += Grid_BeginCellLayout; - - - PdfGridLayoutResult result = grid.Draw(page, new PointF(0, y + 40)); - - y = result.Bounds.Bottom + lineSpace; - format = new PdfStringFormat(); - format.Alignment = PdfTextAlignment.Center; - RectangleF bounds = - new RectangleF(QuantityCellBounds.X, y, QuantityCellBounds.Width, QuantityCellBounds.Height); - - page.Graphics.DrawString("Grand Total:", arialBoldFont, PdfBrushes.Black, bounds, format); - - bounds = new RectangleF(TotalPriceCellBounds.X, y, TotalPriceCellBounds.Width, TotalPriceCellBounds.Height); - page.Graphics.DrawString(GetTotalAmount(grid).ToString(), arialBoldFont, PdfBrushes.Black, bounds); - - #endregion - - - - borderPen.DashStyle = PdfDashStyle.Custom; - borderPen.DashPattern = new float[] { 3, 3 }; - - graphics.DrawLine(borderPen, new PointF(0, pageHeight - 100), new PointF(pageWidth, pageHeight - 100)); - - y = pageHeight - 100 + margin; - - size = arialRegularFont.MeasureString("800 Interchange Blvd."); - - x = pageWidth - size.Width - margin; - - graphics.DrawString("800 Interchange Blvd.", arialRegularFont, PdfBrushes.Black, new PointF(x, y)); - - y += arialRegularFont.Height + lineSpace; - - size = arialRegularFont.MeasureString("Suite 2501, Austin, TX 78721"); - - x = pageWidth - size.Width - margin; - - graphics.DrawString("Suite 2501, Austin, TX 78721", arialRegularFont, PdfBrushes.Black, new PointF(x, y)); - - y += arialRegularFont.Height + lineSpace; - - size = arialRegularFont.MeasureString("Any Questions? support@adventure-works.com"); - - x = pageWidth - size.Width - margin; - graphics.DrawString("Any Questions? support@adventure-works.com", arialRegularFont, PdfBrushes.Black, - new PointF(x, y)); - - return document; - } - private void Grid_BeginCellLayout(object sender, PdfGridBeginCellLayoutEventArgs args) - { - PdfGrid grid = sender as PdfGrid; - if (args.CellIndex == grid.Columns.Count - 1) - { - TotalPriceCellBounds = args.Bounds; - } - else if (args.CellIndex == grid.Columns.Count - 2) - { - QuantityCellBounds = args.Bounds; - } - - } - - private IEnumerable GetProductReport() - { - string dataPath = _hostingEnvironment.WebRootPath + @"/PDF/"; - //Read the file - FileStream xmlStream = new FileStream(dataPath + "InvoiceProductList.xml", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - using (StreamReader reader = new StreamReader(xmlStream, true)) - { - return XElement.Parse(reader.ReadToEnd()) - .Elements("ProductDetails") - .Select(c => new Product - { - ProductID = c.Element("Productid").Value, - productName = c.Element("Product").Value, - Price = float.Parse(c.Element("Price").Value, System.Globalization.CultureInfo.InvariantCulture), - Quantity = float.Parse(c.Element("Quantity").Value, System.Globalization.CultureInfo.InvariantCulture), - Total = float.Parse(c.Element("Total").Value, System.Globalization.CultureInfo.InvariantCulture) - }); - } - } - /// - /// Get the Total amount of purcharsed items - /// - /// - /// - private float GetTotalAmount(PdfGrid grid) - { - float Total = 0f; - for (int i = 0; i < grid.Rows.Count; i++) - { - string cellValue = grid.Rows[i].Cells[grid.Columns.Count - 1].Value.ToString(); - float result = float.Parse(cellValue, System.Globalization.CultureInfo.InvariantCulture); - Total += result; - } - return Total; - - } -} \ No newline at end of file diff --git a/Pages/Pdf/Zugferd/CountryCodes.cs b/Pages/Pdf/Zugferd/CountryCodes.cs deleted file mode 100644 index 0f1d7333..00000000 --- a/Pages/Pdf/Zugferd/CountryCodes.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Syncfusion.Zugferd -{ - /// - /// Country codes - /// - public enum CountryCodes - { - US, - AX, - AL, - DZ, - AS, - AD, - } -} \ No newline at end of file diff --git a/Pages/Pdf/Zugferd/CurrencyCodes.cs b/Pages/Pdf/Zugferd/CurrencyCodes.cs deleted file mode 100644 index 515d5467..00000000 --- a/Pages/Pdf/Zugferd/CurrencyCodes.cs +++ /dev/null @@ -1,124 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Syncfusion.Zugferd -{ - /// - /// Currency Codes - /// - public enum CurrencyCodes - { - AED = 784, - AFN = 971, - ALL = 8, - AMD = 51, - ARS = 32, - AUD = 36, - AZN = 944, - BAM = 977, - BDT = 50, - BGN = 975, - BHD = 48, - BND = 96, - BOB = 68, - BRL = 986, - BYR = 974, - BZD = 84, - CAD = 124, - CHF = 756, - CLP = 152, - CNY = 156, - COP = 170, - CRC = 188, - CZK = 203, - DKK = 208, - DOP = 214, - DZD = 12, - EEK = 233, - EGP = 818, - ETB = 230, - EUR = 978, - GBP = 826, - GEL = 981, - GTQ = 320, - HKD = 344, - HNL = 340, - HRK = 191, - HUF = 348, - IDR = 360, - ILS = 376, - INR = 356, - IQD = 368, - IRR = 364, - ISK = 352, - JMD = 388, - JOD = 400, - JPY = 392, - KES = 404, - KGS = 417, - KHR = 116, - KRW = 410, - KWD = 414, - KZT = 398, - LAK = 418, - LBP = 422, - LKR = 144, - LTL = 440, - LVL = 428, - LYD = 434, - MAD = 504, - MKD = 807, - MNT = 496, - MOP = 446, - MVR = 462, - MXN = 484, - MYR = 458, - NIO = 558, - NOK = 578, - NPR = 524, - NZD = 554, - OMR = 512, - PAB = 590, - PEN = 604, - PHP = 608, - PKR = 586, - PLN = 985, - PYG = 600, - QAR = 634, - RON = 946, - RSD = 941, - RUB = 643, - RWF = 646, - SAR = 682, - SEK = 752, - SGD = 702, - SYP = 760, - THB = 764, - TJS = 972, - TND = 788, - TRY = 949, - TTD = 780, - TWD = 901, - UAH = 980, - USD = 840, - UYU = 858, - UZS = 860, - VEF = 937, - VND = 704, - XOF = 952, - YER = 886, - ZAR = 710, - ZWL = 932, - Unknown = 0 - } -} \ No newline at end of file diff --git a/Pages/Pdf/Zugferd/InvoiceType.cs b/Pages/Pdf/Zugferd/InvoiceType.cs deleted file mode 100644 index e0a23e62..00000000 --- a/Pages/Pdf/Zugferd/InvoiceType.cs +++ /dev/null @@ -1,27 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Syncfusion.Zugferd -{ - /// - /// Invoice Type - /// - public enum InvoiceType - { - Unknown = 0, - Invoice = 380, - Correction = 1380, - CreditNote = 381, - DebitNote = 383, - SelfBilledInvoice = 389 - } -} \ No newline at end of file diff --git a/Pages/Pdf/Zugferd/Product.cs b/Pages/Pdf/Zugferd/Product.cs deleted file mode 100644 index a5e1a3d9..00000000 --- a/Pages/Pdf/Zugferd/Product.cs +++ /dev/null @@ -1,33 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Syncfusion.Zugferd -{ - /// - /// Invoice product - /// - public class Product - { - public string ProductID { get; set; } - - public string productName { get; set; } - - public float Price { get; set; } - - public float Quantity { get; set; } - - public float Total { get; set; } - - - } -} \ No newline at end of file diff --git a/Pages/Pdf/Zugferd/UserDetails.cs b/Pages/Pdf/Zugferd/UserDetails.cs deleted file mode 100644 index 41ed18cc..00000000 --- a/Pages/Pdf/Zugferd/UserDetails.cs +++ /dev/null @@ -1,28 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Syncfusion.Zugferd -{ - /// - /// User Details - /// - public class UserDetails - { - public string ID { get; set; } - public string Name { get; set; } - public string ContactName { get; set; } - public string City { get; set; } - public string Postcode { get; set; } - public CountryCodes Country { get; set; } - public string Street { get; set; } - } -} \ No newline at end of file diff --git a/Pages/Pdf/Zugferd/ZugFerdInvoice.cs b/Pages/Pdf/Zugferd/ZugFerdInvoice.cs deleted file mode 100644 index 1f745a0f..00000000 --- a/Pages/Pdf/Zugferd/ZugFerdInvoice.cs +++ /dev/null @@ -1,338 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.IO; -using System.Xml; -using System.Xml.Linq; - -namespace Syncfusion.Zugferd -{ - /// - /// zugFerd Invoice - /// - public class ZugFerdInvoice - { - public string InvoiceNumber { get; set; } - public DateTime InvoiceDate { get; set; } - public CurrencyCodes Currency { get; set; } - public InvoiceType Type { get; set; } - - public UserDetails Buyer { get; set; } - public UserDetails Seller { get; set; } - - public ZugFerdProfile Profile { get; set; } - - public float TotalAmount { get; set; } - - List products = new List(); - - XNamespace rsm = "urn:ferd:CrossIndustryDocument:invoice:1p0"; - XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance"; - XNamespace udt = "urn:un:unece:uncefact:data:standard:UnqualifiedDataType:15"; - XNamespace ram = "urn:un:unece:uncefact:data:standard:ReusableAggregateBusinessInformationEntity:12"; - - public void AddProduct(Product product) - { - products.Add(product); - } - public void AddProduct(string productID, string productName,float price, float quantity, float totalPrice) - { - Product product = new Product() - { - ProductID = productID, - productName = productName, - Price = price, - Quantity = quantity, - Total = totalPrice - }; - - products.Add(product); - } - - public ZugFerdInvoice(string invoiceNumber, DateTime invoiceDate, CurrencyCodes currency) - { - InvoiceNumber= invoiceNumber; - InvoiceDate = invoiceDate; - Currency = currency; - - } - public Stream Save(Stream stream) - { - XmlWriterSettings settings = new XmlWriterSettings(); - settings.Indent = true; - settings.Encoding = Encoding.UTF8; - - - XDocument doc = new XDocument(); - XElement root = new XElement(rsm + "CrossIndustryDocument", new XAttribute(XNamespace.Xmlns + "xsi", xsi)); - root.SetAttributeValue(XNamespace.Xmlns + "rsm", rsm); - root.SetAttributeValue(XNamespace.Xmlns + "ram", ram); - root.SetAttributeValue(XNamespace.Xmlns + "udt", udt); - - #region SpecifiedExchangedDocumentContext - XElement SpecifiedExchangedDocumentContext = new XElement(rsm + "SpecifiedExchangedDocumentContext"); - XElement testIndicator = new XElement(ram + "TestIndicator"); - XElement udtIndicator = new XElement(udt + "Indicator"); - udtIndicator.Value = "true"; - testIndicator.Add(udtIndicator); - SpecifiedExchangedDocumentContext.Add(testIndicator); - - XElement guidelineSpecifiedDocumentContextParameter = new XElement(ram + "GuidelineSpecifiedDocumentContextParameter"); - XElement id = new XElement(ram + "ID"); - id.Value = "urn:ferd:CrossIndustryDocument:invoice:1p0:" + Profile.ToString(); - guidelineSpecifiedDocumentContextParameter.Add(id); - SpecifiedExchangedDocumentContext.Add(guidelineSpecifiedDocumentContextParameter); - root.Add(SpecifiedExchangedDocumentContext); - #endregion - - #region HeaderExchangedDocument - XElement headerExchangedDocument = new XElement(rsm + "HeaderExchangedDocument"); - id = new XElement(ram + "ID"); - id.Value = InvoiceNumber; - headerExchangedDocument.Add(id); - XElement name = new XElement(ram + "Name"); - name.Value = GetInvoiceTypeName(Type); - headerExchangedDocument.Add(name); - XElement typeCode = new XElement(ram + "TypeCode"); - typeCode.Value = GetInvoiceTypeCode(Type).ToString(); - headerExchangedDocument.Add(typeCode); - XElement issueDateTime = new XElement(ram + "IssueDateTime"); - XElement dateTimeString = new XElement(udt + "DateTimeString", new XAttribute("format", "102")); - dateTimeString.Value = ConvertDateFormat(InvoiceDate, "102"); - issueDateTime.Add(dateTimeString); - headerExchangedDocument.Add(issueDateTime); - root.Add(headerExchangedDocument); - #endregion - - #region SpecifiedSupplyChainTradeTransaction - XElement specifiedSupplyChainTradeTransaction = new XElement(rsm + "SpecifiedSupplyChainTradeTransaction"); - XElement applicableSupplyChainTradeAgreement = new XElement(ram + "ApplicableSupplyChainTradeAgreement"); - - XElement sellerParty = WriteUserDetails("SellerTradeParty", Seller); - applicableSupplyChainTradeAgreement.Add(sellerParty); - - XElement buyerParty =WriteUserDetails("BuyerTradeParty", Buyer); - applicableSupplyChainTradeAgreement.Add(buyerParty); - - specifiedSupplyChainTradeTransaction.Add(applicableSupplyChainTradeAgreement); - - - - XElement ApplicableSupplyChainTradeSettlement = new XElement(ram+"ApplicableSupplyChainTradeSettlement"); - XElement InvoiceCurrencyCode = new XElement(ram+ "InvoiceCurrencyCode"); - InvoiceCurrencyCode.Value = Currency.ToString("g"); - ApplicableSupplyChainTradeSettlement.Add(InvoiceCurrencyCode); - XElement SpecifiedTradeSettlementMonetarySummation = new XElement(ram+"SpecifiedTradeSettlementMonetarySummation"); - XElement GrandTotalAmount = new XElement(ram+"GrandTotalAmount"); - GrandTotalAmount.Value = TotalAmount.ToString(); - GrandTotalAmount.SetAttributeValue("currencyID",Currency.ToString("g")); - SpecifiedTradeSettlementMonetarySummation.Add(GrandTotalAmount); - ApplicableSupplyChainTradeSettlement.Add(SpecifiedTradeSettlementMonetarySummation); - - specifiedSupplyChainTradeTransaction.Add(ApplicableSupplyChainTradeSettlement); - - List LineItem = AddTradeLineItems(); - - specifiedSupplyChainTradeTransaction.Add(LineItem); - - root.Add(specifiedSupplyChainTradeTransaction); - #endregion - - doc.Add(root); - XmlWriter writer = XmlWriter.Create(stream, settings); - doc.WriteTo(writer); - writer.Flush(); - stream.Position = 0; - return stream; - } - - private List AddTradeLineItems() - { - List tradeLineItems = new List(); - XElement tradeLineItem = null; - if (products.Count == 0) - throw new Exception("prodcut empty"); - foreach (Product product in this.products) - { - tradeLineItem=new XElement(ram + "IncludedSupplyChainTradeLineItem"); - - if (Profile != ZugFerdProfile.Basic) - { - XElement tradeAgreement = new XElement(ram + "SpecifiedSupplyChainTradeAgreement"); - XElement tradePrice = new XElement(ram + "GrossPriceProductTradePrice"); - XElement basisQuantity = new XElement(ram + "BasisQuantity"); - basisQuantity.Value = product.Quantity.ToString(); - - tradePrice.Add(basisQuantity); - tradeAgreement.Add(tradePrice); - tradeLineItem.Add(tradeAgreement); - } - - - XElement SpecifiedSupplyChainTradeDelivery = new XElement(ram + "SpecifiedSupplyChainTradeDelivery"); - - XElement BilledQuantity = new XElement(ram + "BilledQuantity"); - BilledQuantity.Value = product.Quantity.ToString(); - BilledQuantity.SetAttributeValue("unitCode", "KGM"); - SpecifiedSupplyChainTradeDelivery.Add(BilledQuantity); - tradeLineItem.Add(SpecifiedSupplyChainTradeDelivery); - - - XElement tradSettlement = new XElement(ram + "SpecifiedSupplyChainTradeSettlement"); - - XElement monetarySummation = new XElement(ram + "SpecifiedTradeSettlementMonetarySummation"); - - - XElement LineTotalAmount = new XElement(ram + "LineTotalAmount"); - - LineTotalAmount.Value = FormatValue(product.Total); - LineTotalAmount.SetAttributeValue("currencyID", this.Currency.ToString("g")); - monetarySummation.Add(LineTotalAmount); - tradSettlement.Add(monetarySummation); - - tradeLineItem.Add(tradSettlement); - - XElement SpecifiedTradeProduct = new XElement(ram + "SpecifiedTradeProduct"); - - - XElement productName = new XElement(ram + "Name"); - productName.Value = product.productName; - - SpecifiedTradeProduct.Add(productName); - - tradeLineItem.Add(SpecifiedTradeProduct); - tradeLineItems.Add(tradeLineItem); - - } - return tradeLineItems; - - } - - private void WriteAttribute(XmlWriter writer, string tagName, string attributeName, string attributeValue, string nodeValue) - { - writer.WriteStartElement(tagName); - writer.WriteAttributeString(attributeName, attributeValue); - writer.WriteValue(nodeValue); - writer.WriteEndElement(); - } - - - - private void WriteOptionalElement(XmlWriter writer, string tagName, string value) - { - if (!String.IsNullOrEmpty(value)) - { - writer.WriteElementString(tagName, value); - } - } - private void WriteOptionalAmount(XmlWriter writer, string tagName, float value, int numDecimals = 2) - { - if (value !=float.MinValue) - { - writer.WriteStartElement(tagName); - writer.WriteAttributeString("currencyID", Currency.ToString("g")); - writer.WriteValue(FormatValue(value, numDecimals)); - writer.WriteEndElement(); - } - } - - - private XElement WriteUserDetails( string customerTag, UserDetails user) - { - XElement sellerTradeParty = null; - if (user != null) - { - sellerTradeParty = new XElement(ram + customerTag); - XElement id = new XElement(ram + "ID"); - sellerTradeParty.Add(id); - id.Value = user.ID; - XElement name = new XElement(ram + "Name"); - name.Value = user.Name; - sellerTradeParty.Add(name); - XElement postalTradeAddress = new XElement(ram + "PostalTradeAddress"); - XElement postcodeCode = new XElement(ram + "PostcodeCode"); - postcodeCode.Value = user.Postcode; - postalTradeAddress.Add(postcodeCode); - XElement lineOne = new XElement(ram + "LineOne"); - lineOne.Value = string.IsNullOrEmpty(user.ContactName) ? user.Street : user.ContactName; - postalTradeAddress.Add(lineOne); - - XElement lineTwo = new XElement(ram + "LineTwo"); - lineTwo.Value = user.Street; - postalTradeAddress.Add(lineTwo); - - - XElement cityName = new XElement(ram + "CityName"); - cityName.Value = user.City; - postalTradeAddress.Add(cityName); - - XElement countryID = new XElement(ram + "CountryID"); - countryID.Value = user.Country.ToString("g"); - postalTradeAddress.Add(countryID); - - sellerTradeParty.Add(postalTradeAddress); - - } - return sellerTradeParty; - } - - - - - - - - private string ConvertDateFormat(DateTime date, String format = "102") - { - if (format.Equals("102")) - { - return date.ToString("yyyymmdd"); - } - else - { - return date.ToString("yyyy-MM-ddTHH:mm:ss"); - } - } - - private string GetInvoiceTypeName(InvoiceType type) - { - switch (type) - { - case InvoiceType.Invoice: return "RECHNUNG"; - case InvoiceType.Correction: return "KORREKTURRECHNUNG"; - case InvoiceType.CreditNote: return "GUTSCHRIFT"; - case InvoiceType.DebitNote: return ""; - case InvoiceType.SelfBilledInvoice: return ""; - default: return ""; - } - } - private int GetInvoiceTypeCode(InvoiceType type) - { - if ((int)type > 1000) - { - type -= 1000; - } - - return (int)type; - } - - private string FormatValue(float value, int numDecimals = 2) - { - string formatString = "0."; - for (int i = 0; i < numDecimals; i++) - { - formatString += "0"; - } - return value.ToString(formatString).Replace(",", "."); - } - - } -} \ No newline at end of file diff --git a/Pages/Pdf/Zugferd/ZugferdProfile.cs b/Pages/Pdf/Zugferd/ZugferdProfile.cs deleted file mode 100644 index 98fab69a..00000000 --- a/Pages/Pdf/Zugferd/ZugferdProfile.cs +++ /dev/null @@ -1,25 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace Syncfusion.Zugferd -{ - /// - /// ZugFord Profile - /// - public enum ZugFerdProfile - { - Unknown = 0, - Basic = 1, - Comfort = 2, - Extended = 3 - } -} \ No newline at end of file diff --git a/Pages/PowerPoint/AnimationConverter.cshtml b/Pages/PowerPoint/AnimationConverter.cshtml deleted file mode 100644 index e69ce324..00000000 --- a/Pages/PowerPoint/AnimationConverter.cshtml +++ /dev/null @@ -1,370 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.AnimationConverter - -@using Syncfusion.EJ2 -@{ - var Title = "Essential Presentation (Presentation) : AnimationConverter : Syncfusion"; -} - -@section ControlsSection{ - -
- @{ - Html.BeginForm("animationconverter", "powerpoint", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
-
-

- Click the button to convert PowerPoint slides to images based on the sequence of entrance animations using .NET PowerPoint library. You can then view the converted images as slideshow below. -

-
-
-
-
- - - -
-
-
-
-
-
-
-
-
- - - - - - - - -
- - -
- -
- -
-
- -
-
-
-
-
- @Model.Message -
-
-
-
-
-
-
- - - - - - - - -
-
- - - -
- -
-
-
-
-
- - Html.EndForm(); - } - } -
-} - -@*custom code start*@ - -@*custom code end*@ - - - -@section ActionDescription{ - This sample demonstrates how to convert the PowerPoint slides to images based on the sequence of entrance animations using .NET PowerPoint library. With this, you can showcase the converted images as a slideshow in your custom PowerPoint Viewer. -} - -@section Description{ -
-

- The .NET PowerPoint Library allows you to convert PowerPoint slides into images based on the sequence of entrance animations. - With this, you can showcase these images as a slideshow in your custom PowerPoint Viewer. -

-
-
-

- More information about converting PowerPoint slides to images based on animations can be found in - Documentation section. -

-
-} - -@section Title{ - ASP.NET Core PowerPoint (Presentation) Library – Animation Converter example – Syncfusion Demos -} -@section Meta{ - -} -@section Header{ -

Example of Animation Converter in ASP.NET Core PowerPoint (Presentation) Library

-} \ No newline at end of file diff --git a/Pages/PowerPoint/AnimationConverter.cshtml.cs b/Pages/PowerPoint/AnimationConverter.cshtml.cs deleted file mode 100644 index 51cbcb10..00000000 --- a/Pages/PowerPoint/AnimationConverter.cshtml.cs +++ /dev/null @@ -1,133 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class AnimationConverter : PageModel -{ - public int ImagesCount; - public string FileName; - public string Message; - [HttpPost] - public void OnGet() - { - ImagesCount = 0; - ConvertToImage(); - } - public ActionResult OnPost(string button, string view) - { - ImagesCount = 0; - if (button == null) - return null; - // return View(); - ConvertToImage(); - return null; - // return View(); - } - private readonly IWebHostEnvironment _hostingEnvironment; - public AnimationConverter(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - /// - /// Converts the PowerPoint Presentation slides to image streams based on entrance animation effects. - /// - private void ConvertToImage() - { - string basePath = _hostingEnvironment.WebRootPath; - DirectoryInfo imagesFolder = new DirectoryInfo(_hostingEnvironment.WebRootPath + @"/PowerPoint/images/"); - //Creates image folder. - if (!imagesFolder.Exists) - { - imagesFolder.Create(); - } - else - { - //Deletes existing image files. - FileInfo[] getFiles = imagesFolder.GetFiles(); - foreach (FileInfo file in getFiles) - { - if (file.Exists) - file.Delete(); - } - } - - //Gets the PowerPoint Presentation. - Stream fileStream = GetAnimationPresentation(); - - if (fileStream != null) - { - //Opens a PowerPoint Presentation. - IPresentation pptxDoc = Presentation.Open(fileStream); - //Initialize the PresentationAnimationConverter to perform slide to image conversion based on animation order. - using (PresentationAnimationConverter animationConverter = new PresentationAnimationConverter()) - { - int i = 0; - foreach (ISlide slide in pptxDoc.Slides) - { - //Convert the PowerPoint slide to a series of images based on entrance animation effects. - Stream[] imageStreams = animationConverter.Convert(slide, ExportImageFormat.Jpeg); - - //Save the image stream. - foreach (Stream stream in imageStreams) - { - i++; - //Reset the stream position. - stream.Position = 0; - - string imageName = _hostingEnvironment.WebRootPath + @"/PowerPoint/images/image" + i + ".jpg"; - //Create the output image file stream. - using (FileStream fileStreamOutput = System.IO.File.Create(imageName)) - { - //Copy the converted image stream into created output stream. - stream.CopyTo(fileStreamOutput); - } - } - } - } - - ImagesCount = imagesFolder.GetFiles().Length; - } - } - /// - /// This method will returns the Input Presentation document or the Default Template Presentation document as Stream - /// - private Stream GetAnimationPresentation() - { - if (Request.ContentType != null && Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".pptx") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - FileName = Request.Form.Files[0].FileName; - return stream; - } - else - { - Message = string.Format("Please choose PowerPoint Presentation document (PPTX) to convert as Image"); - return null; - } - } - else - { - string path = _hostingEnvironment.WebRootPath + @"/PowerPoint/AnimationConverter.pptx"; - //Opens an existing document from stream - FileStream fileStreamPath = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - FileName = Path.GetFileName(path); - return fileStreamPath; - } - } -} \ No newline at end of file diff --git a/Pages/PowerPoint/Chart.cshtml b/Pages/PowerPoint/Chart.cshtml deleted file mode 100644 index ed344465..00000000 --- a/Pages/PowerPoint/Chart.cshtml +++ /dev/null @@ -1,54 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.Chart - -@using Syncfusion.EJ2 -@{ var Title = "Essential Presentation (Presentation) : Chart : Syncfusion"; } - -@section ActionDescription{ - This sample demonstrates how to create charts in a presentation using PowerPoint presentation. -} - -@section Description{ - Features: -
-
-
    -
  • Create and edit more than 80 chart types.
  • -
  • Create custom charts by adding combinations from different chart types.
  • -
  • Modify, include and remove chart elements like axes, label, legend and chart title.
  • -
  • Edit color for chart elements like chart area and plot area of an existing chart.
  • -
-
-} -@section ControlsSection{ -
- @{ - Html.BeginForm("chart", "powerpoint", FormMethod.Post); - { -
-

- Click the button to view a PowerPoint presentation generated by Essential Presentation. Please note - that Microsoft PowerPoint viewer or its equivalent is required to view the resultant document. -

-
-
-
-
- -
-
-
- Html.EndForm(); - } - } -
-} -@section Title{ - ASP.NET Core PowerPoint (Presentation) library - Chart Example - Syncfusion Demos - } -@section Meta{ - - } -@section Header{ -

Example of Chart in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/Chart.cshtml.cs b/Pages/PowerPoint/Chart.cshtml.cs deleted file mode 100644 index 22d855b5..00000000 --- a/Pages/PowerPoint/Chart.cshtml.cs +++ /dev/null @@ -1,171 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; -using Syncfusion.OfficeChart; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class Chart : PageModel -{ - public void OnGet() - { - - } - - [HttpPost] - public ActionResult OnPost(string button) - { - if (button == null) - return null; - // return View(); - IPresentation presentation = Presentation.Create(); - - // Method call to create slides - CreateChart(presentation); - - MemoryStream ms = new MemoryStream(); - - //Saves the presentation to the memory stream. - presentation.Save(ms); - //Set the position of the stream to beginning. - ms.Position = 0; - - //Initialize the file stream to download the presentation. - FileStreamResult fileStreamResult = new FileStreamResult(ms, - "application/vnd.openxmlformats-officedocument.presentationml.presentation"); - //Set the file name. - fileStreamResult.FileDownloadName = "Chart.pptx"; - - return fileStreamResult; - } - - #region Slide - - # region Slide1 - - private void CreateChart(IPresentation presentation) - { - ISlide slide1 = presentation.Slides.Add(SlideLayoutType.Blank); - IPresentationChart chart = slide1.Shapes.AddChart(1.93 * 72, 0.31 * 72, 9.48 * 72, 6.89 * 72); - - - chart.ChartData.SetValue(1, 1, "Crescent City, CA"); - - chart.ChartData.SetValue(3, 2, "Precipitation,in."); - chart.ChartData.SetValue(3, 3, "Temperature,deg.F"); - - chart.ChartData.SetValue(4, 1, "Jan"); - chart.ChartData.SetValue(5, 1, "Feb"); - chart.ChartData.SetValue(6, 1, "March"); - chart.ChartData.SetValue(7, 1, "Apr"); - chart.ChartData.SetValue(8, 1, "May"); - chart.ChartData.SetValue(9, 1, "June"); - chart.ChartData.SetValue(10, 1, "July"); - chart.ChartData.SetValue(11, 1, "Aug"); - chart.ChartData.SetValue(12, 1, "Sept"); - chart.ChartData.SetValue(13, 1, "Oct"); - chart.ChartData.SetValue(14, 1, "Nov"); - chart.ChartData.SetValue(15, 1, "Dec"); - - chart.ChartData.SetValue(4, 2, 10.9); - chart.ChartData.SetValue(5, 2, 8.9); - chart.ChartData.SetValue(6, 2, 8.6); - chart.ChartData.SetValue(7, 2, 4.8); - chart.ChartData.SetValue(8, 2, 3.2); - chart.ChartData.SetValue(9, 2, 1.4); - chart.ChartData.SetValue(10, 2, 0.6); - chart.ChartData.SetValue(11, 2, 0.7); - chart.ChartData.SetValue(12, 2, 1.7); - chart.ChartData.SetValue(13, 2, 5.4); - chart.ChartData.SetValue(14, 2, 9.0); - chart.ChartData.SetValue(15, 2, 10.4); - - chart.ChartData.SetValue(4, 3, 47.5); - chart.ChartData.SetValue(5, 3, 48.7); - chart.ChartData.SetValue(6, 3, 48.9); - chart.ChartData.SetValue(7, 3, 50.2); - chart.ChartData.SetValue(8, 3, 53.1); - chart.ChartData.SetValue(9, 3, 56.3); - chart.ChartData.SetValue(10, 3, 58.1); - chart.ChartData.SetValue(11, 3, 59.0); - chart.ChartData.SetValue(12, 3, 58.5); - chart.ChartData.SetValue(13, 3, 55.4); - chart.ChartData.SetValue(14, 3, 51.1); - chart.ChartData.SetValue(15, 3, 47.8); - - chart.DataRange = chart.ChartData[3, 1, 15, 3]; - chart.ChartTitle = "Crescent City, CA"; - chart.PrimaryValueAxis.Title = "Precipitation,in."; - chart.PrimaryValueAxis.TitleArea.TextRotationAngle = 90; - chart.PrimaryValueAxis.MaximumValue = 14.0; - chart.PrimaryValueAxis.NumberFormat = "0.0"; - - #region Format Series - - // Format serie - IOfficeChartSerie serieOne = chart.Series[0]; - serieOne.Name = "Precipitation,in."; - serieOne.SerieFormat.Fill.FillType = OfficeFillType.Gradient; - serieOne.SerieFormat.Fill.TwoColorGradient(OfficeGradientStyle.Vertical, - OfficeGradientVariants.ShadingVariants_2); - serieOne.SerieFormat.Fill.GradientColorType = OfficeGradientColor.TwoColor; - serieOne.SerieFormat.Fill.ForeColor = Color.Plum; - - //Show value as data labels - serieOne.DataPoints.DefaultDataPoint.DataLabels.IsValue = true; - serieOne.DataPoints.DefaultDataPoint.DataLabels.Position = OfficeDataLabelPosition.Outside; - - //Format the second serie - IOfficeChartSerie serieTwo = chart.Series[1]; - serieTwo.SerieType = OfficeChartType.Line_Markers; - serieTwo.Name = "Temperature,deg.F"; - - //Format marker - serieTwo.SerieFormat.MarkerStyle = OfficeChartMarkerType.Diamond; - serieTwo.SerieFormat.MarkerSize = 8; - serieTwo.SerieFormat.MarkerBackgroundColor = Color.DarkGreen; - serieTwo.SerieFormat.MarkerForegroundColor = Color.DarkGreen; - serieTwo.SerieFormat.LineProperties.LineColor = Color.DarkGreen; - - //Use Secondary Axis - serieTwo.UsePrimaryAxis = false; - - #endregion - - #region Set the Secondary Axis for Second Serie. - - //Display secondary axis for the series. - chart.SecondaryCategoryAxis.IsMaxCross = true; - chart.SecondaryValueAxis.IsMaxCross = true; - - //Set the title - chart.SecondaryValueAxis.Title = "Temperature,deg.F"; - chart.SecondaryValueAxis.TitleArea.TextRotationAngle = 90; - - //Hide the secondary category axis - chart.SecondaryCategoryAxis.Border.LineColor = Color.Transparent; - chart.SecondaryCategoryAxis.MajorTickMark = OfficeTickMark.TickMark_None; - chart.SecondaryCategoryAxis.TickLabelPosition = OfficeTickLabelPosition.TickLabelPosition_None; - - #endregion - - #region Legend setting - - chart.Legend.Position = OfficeLegendPosition.Bottom; - chart.Legend.IsVerticalLegend = false; - - #endregion - } - - #endregion - - #endregion -} \ No newline at end of file diff --git a/Pages/PowerPoint/Comment.cshtml b/Pages/PowerPoint/Comment.cshtml deleted file mode 100644 index 6b006009..00000000 --- a/Pages/PowerPoint/Comment.cshtml +++ /dev/null @@ -1,52 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.Comment - -@using Syncfusion.EJ2 -@{ var Title = "Essential Presentation (Presentation) : Comment : Syncfusion"; } - - -@section ActionDescription{ - This sample demonstrates how to add comments to a presentation slide. -} - -@section Description{ - Features: -
-
-
    -
  • Support for adding, replying, editing comments in a PowerPoint slide.
  • -
-
-} - @section ControlsSection{ -
- @{ - Html.BeginForm("comment", "powerpoint", FormMethod.Post); - { -
-

- Click the button to view a PowerPoint presentation generated by Essential Presentation. Please note - that Microsoft PowerPoint viewer or its equivalent is required to view the resultant document. -

-
-
-
-
- -
-
-
- Html.EndForm(); - } - } -
- } -@section Title{ - ASP.NET Core PowerPoint (Presentation) library - Comment Example - Syncfusion Demos - } -@section Meta{ - - } -@section Header{ -

Example of Comment in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/Comment.cshtml.cs b/Pages/PowerPoint/Comment.cshtml.cs deleted file mode 100644 index d3dce89e..00000000 --- a/Pages/PowerPoint/Comment.cshtml.cs +++ /dev/null @@ -1,173 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; -using Syncfusion.OfficeChart; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class Comment : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public Comment(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string button) - { - if (button == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - IPresentation presentation = Presentation.Open(basePath + @"/PowerPoint/Images.pptx"); - SlideWithComments(presentation); - - MemoryStream ms = new MemoryStream(); - - //Saves the presentation to the memory stream. - presentation.Save(ms); - //Set the position of the stream to beginning. - ms.Position = 0; - - //Initialize the file stream to download the presentation. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/vnd.openxmlformats-officedocument.presentationml.presentation"); - //Set the file name. - fileStreamResult.FileDownloadName = "Comment.pptx"; - - return fileStreamResult; - } - - private void SlideWithComments(IPresentation presentation) - { - #region Slide 1 - - ISlide slide1 = presentation.Slides[0]; - IShape shape1 = (IShape)slide1.Shapes[0]; - shape1.Left = 1.27 * 72; - shape1.Top = 0.85 * 72; - shape1.Width = 10.86 * 72; - shape1.Height = 3.74 * 72; - - ITextBody textFrame = shape1.TextBody; - IParagraphs paragraphs = textFrame.Paragraphs; - paragraphs.Add(); - IParagraph paragraph = paragraphs[0]; - paragraph.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts = paragraph.TextParts; - textParts.Add(); - ITextPart textPart = textParts[0]; - textPart.Text = "Essential Presentation "; - textPart.Font.CapsType = TextCapsType.All; - textPart.Font.FontName = "Calibri Light (Headings)"; - textPart.Font.FontSize = 80; - textPart.Font.Color = ColorObject.Black; - - IComment comment = slide1.Comments.Add(0.5, 0.04, "Author1", "A1", - "Essential Presentation is available from 13.1 versions of Essential Studio", DateTime.Now); - //Author2 add reply to a parent comment - slide1.Comments.Add("Author2", "A2", "Does it support rendering of slides as images or PDF?", DateTime.Now, - comment); - //Author1 add reply to a parent comment - slide1.Comments.Add("Author1", "A1", "Yes, you may render slides as images and PDF.", DateTime.Now, comment); - - #endregion - - #region Slide2 - - ISlide slide2 = presentation.Slides.Add(SlideLayoutType.Blank); - - IPresentationChart chart = slide2.Shapes.AddChart(230, 80, 500, 400); - - //Specifies the chart title - - chart.ChartTitle = "Sales Analysis"; - - //Sets chart data - Row1 - - chart.ChartData.SetValue(1, 2, "Jan"); - - chart.ChartData.SetValue(1, 3, "Feb"); - - chart.ChartData.SetValue(1, 4, "March"); - - //Sets chart data - Row2 - - chart.ChartData.SetValue(2, 1, 2010); - - chart.ChartData.SetValue(2, 2, 60); - - chart.ChartData.SetValue(2, 3, 70); - - chart.ChartData.SetValue(2, 4, 80); - - //Sets chart data - Row3 - - chart.ChartData.SetValue(3, 1, 2011); - - chart.ChartData.SetValue(3, 2, 80); - - chart.ChartData.SetValue(3, 3, 70); - - chart.ChartData.SetValue(3, 4, 60); - - //Sets chart data - Row4 - - chart.ChartData.SetValue(4, 1, 2012); - - chart.ChartData.SetValue(4, 2, 60); - - chart.ChartData.SetValue(4, 3, 70); - - chart.ChartData.SetValue(4, 4, 80); - - //Creates a new chart series with the name - - IOfficeChartSerie serieJan = chart.Series.Add("Jan"); - - //Sets the data range of chart serie – start row, start column, end row, end column - - serieJan.Values = chart.ChartData[2, 2, 4, 2]; - - //Creates a new chart series with the name - - IOfficeChartSerie serieFeb = chart.Series.Add("Feb"); - - //Sets the data range of chart serie – start row, start column, end row, end column - - serieFeb.Values = chart.ChartData[2, 3, 4, 3]; - - //Creates a new chart series with the name - - IOfficeChartSerie serieMarch = chart.Series.Add("March"); - - //Sets the data range of chart series – start row, start column, end row, end column - - serieMarch.Values = chart.ChartData[2, 4, 4, 4]; - - //Sets the data range of the category axis - - chart.PrimaryCategoryAxis.CategoryLabels = chart.ChartData[2, 1, 4, 1]; - - //Specifies the chart type - - chart.ChartType = OfficeChartType.Column_Clustered_3D; - - - slide2.Comments.Add(0.35, 0.04, "Author2", "A2", "Do all 3D-chart types support in Presentation library?", - DateTime.Now); - - #endregion - } -} \ No newline at end of file diff --git a/Pages/PowerPoint/Connector.cshtml b/Pages/PowerPoint/Connector.cshtml deleted file mode 100644 index 4f6e43cb..00000000 --- a/Pages/PowerPoint/Connector.cshtml +++ /dev/null @@ -1,53 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.Connector - -@using Syncfusion.EJ2 -@{ var Title = "Essential Presentation (Presentation) : Connector : Syncfusion"; } - -@section ActionDescription{ - This sample demonstrates how to insert the connectors in a PowerPoint slide. -} - -@section Description{ - Features: -
-
-
    -
  • Support for 'Straight', 'Bent', and 'Curve' connectors in a PowerPoint slide.
  • -
  • Support for different connectors arrow styles.
  • -
  • Support to insert, edit, remove, clone, and convert connectors.
  • -
-
-} -@section ControlsSection{ -
- @{ - Html.BeginForm("connector", "powerpoint", FormMethod.Post); - { -
-

- Click the button to view a PowerPoint presentation generated by Essential Presentation. Please note - that Microsoft PowerPoint viewer or its equivalent is required to view the resultant document. -

-
-
-
-
- -
-
-
- Html.EndForm(); - } - } -
-} -@section Title{ - ASP.NET Core PowerPoint (Presentation) library - Connector Example - Syncfusion Demos - } -@section Meta{ - - } -@section Header{ -

Example of Connector in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/Connector.cshtml.cs b/Pages/PowerPoint/Connector.cshtml.cs deleted file mode 100644 index 9cabba73..00000000 --- a/Pages/PowerPoint/Connector.cshtml.cs +++ /dev/null @@ -1,171 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class Connector : PageModel -{ - public void OnGet() - { - - } - - [HttpPost] - public ActionResult OnPost(string button) - { - if (button == null) - return null; - // return View(); - //Create an instance for PowerPoint - IPresentation presentation = Presentation.Create(); - - //Add a blank slide to Presentation - ISlide slide = presentation.Slides.Add(SlideLayoutType.Blank); - - //Add header shape - IShape headerTextBox = slide.Shapes.AddTextBox(58.44, 53.85, 221.93, 81.20); - //Add a paragraph into the text box - IParagraph paragraph = headerTextBox.TextBody.AddParagraph("Flow chart with "); - //Add a textPart - ITextPart textPart = paragraph.AddTextPart("Connector"); - //Change the color of the font - textPart.Font.Color = ColorObject.FromArgb(44, 115, 230); - //Make the textpart bold - textPart.Font.Bold = true; - //Set the font size of the paragraph - paragraph.Font.FontSize = 28; - - //Add start shape to slide - IShape startShape = slide.Shapes.AddShape(AutoShapeType.FlowChartTerminator, 420.45, 36.35, 133.93, 50.39); - //Add a paragraph into the start shape text body - AddParagraph(startShape, "Start", ColorObject.FromArgb(255, 149, 34)); - - //Add alarm shape to slide - IShape alarmShape = slide.Shapes.AddShape(AutoShapeType.FlowChartProcess, 420.45, 126.72, 133.93, 50.39); - //Add a paragraph into the alarm shape text body - AddParagraph(alarmShape, "Alarm Rings", ColorObject.FromArgb(255, 149, 34)); - - //Add condition shape to slide - IShape conditionShape = slide.Shapes.AddShape(AutoShapeType.FlowChartDecision, 420.45, 222.42, 133.93, 97.77); - //Add a paragraph into the condition shape text body - AddParagraph(conditionShape, "Ready to Get Up ?", ColorObject.FromArgb(44, 115, 213)); - - //Add wake up shape to slide - IShape wakeUpShape = slide.Shapes.AddShape(AutoShapeType.FlowChartProcess, 420.45, 361.52, 133.93, 50.39); - //Add a paragraph into the wake up shape text body - AddParagraph(wakeUpShape, "Wake Up", ColorObject.FromArgb(44, 115, 213)); - - //Add end shape to slide - IShape endShape = slide.Shapes.AddShape(AutoShapeType.FlowChartTerminator, 420.45, 453.27, 133.93, 50.39); - //Add a paragraph into the end shape text body - AddParagraph(endShape, "End", ColorObject.FromArgb(44, 115, 213)); - - //Add snooze shape to slide - IShape snoozeShape = slide.Shapes.AddShape(AutoShapeType.FlowChartProcess, 624.85, 245.79, 159.76, 50.02); - //Add a paragraph into the snooze shape text body - AddParagraph(snoozeShape, "Hit Snooze button", ColorObject.FromArgb(255, 149, 34)); - - //Add relay shape to slide - IShape relayShape = slide.Shapes.AddShape(AutoShapeType.FlowChartDelay, 624.85, 127.12, 159.76, 49.59); - //Add a paragraph into the relay shape text body - AddParagraph(relayShape, "Relay", ColorObject.FromArgb(255, 149, 34)); - - //Connect the start shape with alarm shape using connector - IConnector connector1 = slide.Shapes.AddConnector(ConnectorType.Straight, startShape, 2, alarmShape, 0); - //Set the arrow style for the connector - connector1.LineFormat.EndArrowheadStyle = ArrowheadStyle.Arrow; - - //Connect the alarm shape with condition shape using connector - IConnector connector2 = slide.Shapes.AddConnector(ConnectorType.Straight, alarmShape, 2, conditionShape, 0); - //Set the arrow style for the connector - connector2.LineFormat.EndArrowheadStyle = ArrowheadStyle.Arrow; - - //Connect the condition shape with snooze shape using connector - IConnector connector3 = slide.Shapes.AddConnector(ConnectorType.Straight, conditionShape, 3, snoozeShape, 1); - //Set the arrow style for the connector - connector3.LineFormat.EndArrowheadStyle = ArrowheadStyle.Arrow; - - //Connect the snooze shape with relay shape using connector - IConnector connector4 = slide.Shapes.AddConnector(ConnectorType.Straight, snoozeShape, 0, relayShape, 2); - //Set the arrow style for the connector - connector4.LineFormat.EndArrowheadStyle = ArrowheadStyle.Arrow; - - //Connect the relay shape with alarm shape using connector - IConnector connector5 = slide.Shapes.AddConnector(ConnectorType.Straight, relayShape, 1, alarmShape, 3); - //Set the arrow style for the connector - connector5.LineFormat.EndArrowheadStyle = ArrowheadStyle.Arrow; - - //Connect the condition shape with wake up shape using connector - IConnector connector6 = slide.Shapes.AddConnector(ConnectorType.Straight, conditionShape, 2, wakeUpShape, 0); - //Set the arrow style for the connector - connector6.LineFormat.EndArrowheadStyle = ArrowheadStyle.Arrow; - - //Connect the wake up shape with end shape using connector - IConnector connector7 = slide.Shapes.AddConnector(ConnectorType.Straight, wakeUpShape, 2, endShape, 0); - //Set the arrow style for the connector - connector7.LineFormat.EndArrowheadStyle = ArrowheadStyle.Arrow; - - //Add No textbox to slide - IShape noTextBox = slide.Shapes.AddTextBox(564.02, 245.43, 51.32, 26.22); - //Add a paragraph into the text box - noTextBox.TextBody.AddParagraph("No"); - - //Add Yes textbox to slide - IShape yesTextBox = slide.Shapes.AddTextBox(487.21, 327.99, 50.09, 26.23); - //Add a paragraph into the text box - yesTextBox.TextBody.AddParagraph("Yes"); - - MemoryStream ms = new MemoryStream(); - - //Saves the presentation to the memory stream. - presentation.Save(ms); - //Set the position of the stream to beginning. - ms.Position = 0; - - //Initialize the file stream to download the presentation. - FileStreamResult fileStreamResult = new FileStreamResult(ms, - "application/vnd.openxmlformats-officedocument.presentationml.presentation"); - //Set the file name. - fileStreamResult.FileDownloadName = "Connector.pptx"; - - return fileStreamResult; - } - /// - /// Add a paragraph into the specified shape with specified text - /// - /// Represent the shape - /// Represent the text to be added - /// Represent the color to fill the shape - private void AddParagraph(IShape shape, string text, IColor fillColor) - { - //set the fill type as solid - shape.Fill.FillType = FillType.Solid; - //Set the color of the solid fill - shape.Fill.SolidFill.Color = fillColor; - //set the fill type of line format as solid - shape.LineFormat.Fill.FillType = FillType.Solid; - //set the fill color of line format - if (fillColor.R == 255) - shape.LineFormat.Fill.SolidFill.Color = ColorObject.FromArgb(190, 100, 39); - else - shape.LineFormat.Fill.SolidFill.Color = ColorObject.FromArgb(54, 91, 157); - //Add a paragraph into the specified shape with specified text - IParagraph paragraph = shape.TextBody.AddParagraph(text); - //Set the vertical alignment as center - shape.TextBody.VerticalAlignment = VerticalAlignmentType.Middle; - //Set horizontal alignment as center - paragraph.HorizontalAlignment = HorizontalAlignmentType.Center; - //Set font color as white - paragraph.Font.Color = ColorObject.White; - //Change the font size - paragraph.Font.FontSize = 16; - } -} \ No newline at end of file diff --git a/Pages/PowerPoint/CreateAnimation.cshtml b/Pages/PowerPoint/CreateAnimation.cshtml deleted file mode 100644 index 7beab35f..00000000 --- a/Pages/PowerPoint/CreateAnimation.cshtml +++ /dev/null @@ -1,68 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.CreateAnimation - -@using Syncfusion.EJ2 -@{ var Title = "Essential Presentation (Presentation) : CreateAnimation : Syncfusion"; } - -@section ActionDescription{ - This sample demonstrates how to add different animation effect for shapes. -} - -@section Description{ - Features: -
-
-
- The below animation effects are supported as equivalent to Microsoft PowerPoint: -
    -
  • Entrance
  • -
  • Emphasis
  • -
  • Exit
  • -
  • Motion Paths
  • -
-
-
-
- The below animation options are supported as equivalent to Microsoft PowerPoint: -
    -
  • Effect options
  • -
  • Add multiple animation
  • -
  • Trigger
  • -
  • Animation timing
  • -
-
-
-} - -@section ControlsSection{ -
- @{ - Html.BeginForm("createanimation", "powerpoint", FormMethod.Post); - { -
-

- Click the button to view a PowerPoint presentation generated by Essential Presentation. Please note - that Microsoft PowerPoint viewer or its equivalent is required to view the resultant document. -

-
-
-
-
- -
-
-
- Html.EndForm(); - } - } -
-} -@section Title{ - ASP.NET Core PowerPoint (Presentation) library - Create Animation Example - Syncfusion Demos - } -@section Meta{ - - } -@section Header{ -

Example of Create Animation in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/CreateAnimation.cshtml.cs b/Pages/PowerPoint/CreateAnimation.cshtml.cs deleted file mode 100644 index f6c30f90..00000000 --- a/Pages/PowerPoint/CreateAnimation.cshtml.cs +++ /dev/null @@ -1,117 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class CreateAnimation : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public CreateAnimation(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string button) - { - if (button == null) - return null; - // return View(); - //Opens the presentation document as stream - string basePath = _hostingEnvironment.WebRootPath; - IPresentation presentation = Presentation.Open(basePath + @"/PowerPoint/Animation.pptx"); - //PowerPoint instance is Created. - - //Method call to create animation - Animation(presentation); - - MemoryStream ms = new MemoryStream(); - - //Saves the presentation to the memory stream. - presentation.Save(ms); - //Set the position of the stream to beginning. - ms.Position = 0; - - //Initialize the file stream to download the presentation. - FileStreamResult fileStreamResult = new FileStreamResult(ms, - "application/vnd.openxmlformats-officedocument.presentationml.presentation"); - //Set the file name. - fileStreamResult.FileDownloadName = "CreateAnimation.pptx"; - - return fileStreamResult; - } - - #region Slide1 - - private void Animation(IPresentation presentation) - { - //Get the slide from the presentation - ISlide slide = presentation.Slides[0]; - - //Access the animation sequence to create effects - ISequence sequence = slide.Timeline.MainSequence; - - //Add motion path effect to the shape - IEffect line1 = sequence.AddEffect(slide.Shapes[8] as IShape, EffectType.PathUp, EffectSubtype.None, - EffectTriggerType.OnClick); - IMotionEffect motionEffect = line1.Behaviors[0] as IMotionEffect; - motionEffect.Timing.Duration = 1f; - IMotionPath motionPath = motionEffect.Path; - motionPath[1].Points[0].X = 0.00365f; - motionPath[1].Points[0].Y = -0.27431f; - - //Add motion path effect to the shape - IEffect line2 = sequence.AddEffect(slide.Shapes[3] as IShape, EffectType.PathDown, EffectSubtype.None, - EffectTriggerType.WithPrevious); - motionEffect = line2.Behaviors[0] as IMotionEffect; - motionEffect.Timing.Duration = 0.75f; - motionPath = motionEffect.Path; - motionPath[1].Points[0].X = 0.00234f; - motionPath[1].Points[0].Y = 0.43449f; - - //Add wipe effect to the shape - IEffect wipe1 = sequence.AddEffect(slide.Shapes[1] as IShape, EffectType.Wipe, EffectSubtype.None, - EffectTriggerType.AfterPrevious); - wipe1.Behaviors[1].Timing.Duration = 1f; - - //Add fly effect to the shape - IEffect fly1 = sequence.AddEffect(slide.Shapes[5] as IShape, EffectType.Fly, EffectSubtype.Left, - EffectTriggerType.AfterPrevious); - fly1.Behaviors[1].Timing.Duration = 0.70f; - fly1.Behaviors[2].Timing.Duration = 0.70f; - - //Add wipe effect to the shape - IEffect wipe2 = sequence.AddEffect(slide.Shapes[2] as IShape, EffectType.Wipe, EffectSubtype.None, - EffectTriggerType.AfterPrevious); - wipe2.Behaviors[1].Timing.Duration = 1f; - - //Add fly effect to the shape - IEffect fly2 = sequence.AddEffect(slide.Shapes[4] as IShape, EffectType.Fly, EffectSubtype.Right, - EffectTriggerType.AfterPrevious); - fly2.Behaviors[1].Timing.Duration = 0.70f; - fly2.Behaviors[2].Timing.Duration = 0.70f; - - IEffect fly3 = sequence.AddEffect(slide.Shapes[6] as IShape, EffectType.Fly, EffectSubtype.Top, - EffectTriggerType.AfterPrevious); - fly3.Behaviors[1].Timing.Duration = 1.50f; - fly3.Behaviors[2].Timing.Duration = 1.50f; - - //Add flay effect to the shape - IEffect fly4 = sequence.AddEffect(slide.Shapes[7] as IShape, EffectType.Fly, EffectSubtype.Left, - EffectTriggerType.AfterPrevious); - fly4.Behaviors[1].Timing.Duration = 0.50f; - fly4.Behaviors[2].Timing.Duration = 0.50f; - } - #endregion -} \ No newline at end of file diff --git a/Pages/PowerPoint/Default.cshtml b/Pages/PowerPoint/Default.cshtml deleted file mode 100644 index 76aae3c6..00000000 --- a/Pages/PowerPoint/Default.cshtml +++ /dev/null @@ -1,63 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.Default - -@using Syncfusion.EJ2 -@{ var Title = "Essential Presentation (Presentation) : Default : Syncfusion"; } - -@section ActionDescription{ - This sample demonstrates how to create slides with simple text in a PowerPoint presentation. -} - -@section Description{ - Features: -
-
-
    -
  • Create a PowerPoint presentation from scratch with few lines of code.
  • -
  • Open the existing PowerPoint presentation from file system or stream, modify and save it back.
  • -
  • Save the PowerPoint presentation to a local file, stream, or stream it to the client browser.
  • -
  • Create and edit shapes.
  • -
  • Create and edit text.
  • -
  • Add and manipulate single-level and multilevel lists equivalent to Microsoft PowerPoint.
  • -
  • Create, edit and convert charts.
  • -
  • Create and edit SmartArt diagrams.
  • -
  • Create and edit tables with different styles.
  • -
  • Copy and paste PowerPoint slides with source and destination paste options
  • -
  • Create, reply and edit comments.
  • -
  • Create and edit notes pages.
  • -
  • Apply and edit formatting of slide elements.
  • -
-
-} -@section ControlsSection{ -
- @{ - Html.BeginForm("default", "powerpoint", FormMethod.Post); - { -
-

- Click the button to view a PowerPoint presentation generated by Essential Presentation. Please note - that Microsoft PowerPoint viewer or its equivalent is required to view the resultant document. -

-
-
-
-
- -
-
-
- Html.EndForm(); - } - } -
-} -@section Title{ - ASP.NET Core PowerPoint (Presentation) library - Create Presentation Example - Syncfusion Demos - } -@section Meta{ - - } -@section Header{ -

Example of Create Presentation in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/Default.cshtml.cs b/Pages/PowerPoint/Default.cshtml.cs deleted file mode 100644 index 28fa6a3b..00000000 --- a/Pages/PowerPoint/Default.cshtml.cs +++ /dev/null @@ -1,141 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using System.IO; -using Syncfusion.Presentation; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Caching.Memory; -#if REDIS -using Microsoft.Extensions.Caching.Distributed; -#endif - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class Default : PageModel -{ - public void OnGet() - { - - } - private IMemoryCache _cache; - - private readonly IWebHostEnvironment _hostingEnvironment; -#if REDIS - private IDistributedCache _distributedCache; - public Default(IWebHostEnvironment hostingEnvironment, IMemoryCache memoryCache, IDistributedCache distributedCache) -#else - public Default(IWebHostEnvironment hostingEnvironment, IMemoryCache memoryCache) -#endif - { - _cache = memoryCache; -#if REDIS - _distributedCache = distributedCache; -#endif - _hostingEnvironment = hostingEnvironment; - } - - [HttpPost] - public ActionResult OnPost(string button) - { - if (button == null) - return null; - // return View(); - //Retrieve the current application environment. - //Open the existing presentation. - string basePath = _hostingEnvironment.WebRootPath; - IPresentation presentation = Presentation.Open(basePath + @"/PowerPoint/HelloWorld.pptx"); - - //Method call to create slides - CreateDefaultSlide(presentation); - - MemoryStream ms = new MemoryStream(); - - //Saves the presentation to the memory stream. - presentation.Save(ms); - //Set the position of the stream to beginning. - ms.Position = 0; - - //Initialize the file stream to download the presentation. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/vnd.openxmlformats-officedocument.presentationml.presentation"); - //Set the file name. - fileStreamResult.FileDownloadName = "CreatePresentation.pptx"; - - return fileStreamResult; - } - - # region Slide - private void CreateDefaultSlide(IPresentation presentation) - { - //Retrieve the first slide of the presentation. - ISlide slide1 = presentation.Slides[0]; - //Retrieve the first shape of the slide. - IShape titleShape = slide1.Shapes[0] as IShape; - //Set the size and position of the shape. - titleShape.Left = 0.33 * 72; - titleShape.Top = 0.58 * 72; - titleShape.Width = 12.5 * 72; - titleShape.Height = 1.75 * 72; - - //Retrieve the text body of the shape. - ITextBody textFrame1 = (slide1.Shapes[0] as IShape).TextBody; - IParagraphs paragraphs1 = textFrame1.Paragraphs; - //Add a new paragraph. - IParagraph paragraph = paragraphs1.Add(); - //Set the horizontal alignment type for the paragraph. - paragraph.HorizontalAlignment = HorizontalAlignmentType.Center; - //Add a text part. - ITextPart textPart1 = paragraph.AddTextPart(); - //Add text to the text part. - textPart1.Text = "Essential Presentation"; - //Set the font properties for the text part. - textPart1.Font.CapsType = TextCapsType.All; - textPart1.Font.FontName = "Adobe Garamond Pro"; - textPart1.Font.Bold = true; - textPart1.Font.FontSize = 40; - - //Retrieve the second shape of the slide. - IShape subtitle = slide1.Shapes[1] as IShape; - //Set the size and position of the shape. - subtitle.Left = 1.33 * 72; - subtitle.Top = 2.67 * 72; - subtitle.Width = 10 * 72; - subtitle.Height = 1.7 * 72; - - //Retrieve the text body of the shape. - ITextBody textFrame2 = (slide1.Shapes[1] as IShape).TextBody; - textFrame2.VerticalAlignment = VerticalAlignmentType.Top; - IParagraphs paragraphs2 = textFrame2.Paragraphs; - //Add a new paragraph. - IParagraph para = paragraphs2.Add(); - //Set the horizontal alignment type for the paragraph. - para.HorizontalAlignment = HorizontalAlignmentType.Left; - //Add a text part. - ITextPart textPart2 = para.AddTextPart(); - //Add text to the text part. - textPart2.Text = - "Lorem ipsum dolor sit amet, lacus amet amet ultricies. Quisque mi venenatis morbi libero, orci dis, mi ut et class porta, massa ligula magna enim, aliquam orci vestibulum tempus.Turpis facilisis vitae consequat, cum a a, turpis dui consequat massa in dolor per, felis non amet."; - textPart2.Font.FontName = "Adobe Garamond Pro"; - textPart2.Font.FontSize = 21; - - //Add a new paragraph. - para = paragraphs2.Add(); - //Set the horizontal alignment type for the paragraph. - para.HorizontalAlignment = HorizontalAlignmentType.Left; - //Add a text part. - textPart2 = para.AddTextPart(); - //Add text to the text part. - textPart2.Text = - "Turpis facilisis vitae consequat, cum a a, turpis dui consequat massa in dolor per, felis non amet. Auctor eleifend in omnis elit vestibulum, donec non elementum tellus est mauris, id aliquam, at lacus, arcu pretium proin lacus dolor et. Eu tortor, vel ultrices amet dignissim mauris vehicula."; - //Set the font properties. - textPart2.Font.FontName = "Adobe Garamond Pro"; - textPart2.Font.FontSize = 21; - - } - #endregion -} \ No newline at end of file diff --git a/Pages/PowerPoint/EncryptAndDecrypt.cshtml b/Pages/PowerPoint/EncryptAndDecrypt.cshtml deleted file mode 100644 index 4c2903d7..00000000 --- a/Pages/PowerPoint/EncryptAndDecrypt.cshtml +++ /dev/null @@ -1,67 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.EncryptAndDecrypt - -@using Syncfusion.EJ2 -@{ var Title = "Essential Presentation (Presentation) : EncryptAndDecrypt : Syncfusion"; } - -@section ActionDescription{ - This sample demonstrates how to encrypt and decrypt the PowerPoint document using Essential Presentation. -} - -@section Description{ -
- Presentation library supports to encrypt a PowerPoint document with password that restrict others from accessing or modifying confidential contents. You can also open an encrypted PowerPoint document using Presentation library with valid password. -
-
- More information about the encrypt and decrypt options can be found in this - Documentation - section. -
-} - -@section ControlsSection{ -
- @{ - Html.BeginForm("encryptanddecrypt", "powerpoint", FormMethod.Post); - { -
-

- Click the button to view a PowerPoint presentation generated by Essential Presentation. Please note - that Microsoft PowerPoint viewer or its equivalent is required to view the resultant document. -

-
-
-
-
- - - - -
-
-
-
-
- -
-
-
-
- Html.EndForm(); - } - } -
-} -@section Title{ - ASP.NET Core PowerPoint (Presentation) library - Encrypt And Decrypt Example - Syncfusion Demos - } -@section Meta{ - - } -@section Header{ -

Example of Encrypt And Decrypt in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/EncryptAndDecrypt.cshtml.cs b/Pages/PowerPoint/EncryptAndDecrypt.cshtml.cs deleted file mode 100644 index f25c0686..00000000 --- a/Pages/PowerPoint/EncryptAndDecrypt.cshtml.cs +++ /dev/null @@ -1,60 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class EncryptAndDecrypt : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public EncryptAndDecrypt(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string button, string Group1, string Group2) - { - if (button == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - if (Group1 == "CreateEncryptDoc") - { - IPresentation presentation = Presentation.Open(basePath + @"/PowerPoint/Syncfusion Presentation.pptx"); - presentation.Encrypt("syncfusion"); - MemoryStream ms = new MemoryStream(); - //Saves the presentation to the memory stream. - presentation.Save(ms); - //Set the position of the stream to beginning. - ms.Position = 0; - return File(ms, "application/vnd.openxmlformats-officedocument.presentationml.presentation", "Encryption.pptx"); - } - else - { - IPresentation presentation = Presentation.Open(basePath + @"/PowerPoint/Syncfusion Presentation.pptx"); - presentation.RemoveEncryption(); - MemoryStream ms = new MemoryStream(); - //Saves the presentation to the memory stream. - presentation.Save(ms); - //Set the position of the stream to beginning. - ms.Position = 0; - //Initialize the file stream to download the presentation. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/vnd.openxmlformats-officedocument.presentationml.presentation"); - //Set the file name. - fileStreamResult.FileDownloadName = "Decryption.pptx"; - return fileStreamResult; - } - } -} \ No newline at end of file diff --git a/Pages/PowerPoint/FindAndHighlight.cshtml b/Pages/PowerPoint/FindAndHighlight.cshtml deleted file mode 100644 index 49b08c63..00000000 --- a/Pages/PowerPoint/FindAndHighlight.cshtml +++ /dev/null @@ -1,84 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.FindAndHighlight - -@using Syncfusion.EJ2 -@{ - var Title = " Essential Presentation (PowerPoint) : Find and Highlight : Syncfusion"; -} - -@section ActionDescription{ - This sample demonstrates how to find a specific text and highlight it in an existing PowerPoint presentation using Find functionality of .NET PowerPoint library. -} - -@section Description{ - Features: -
-
-
- .NET PowerPoint library allows you to find the text in the PowerPoint presentation and then to manipulate it. -
    -
  • You can find the first occurrence or all the occurrences of the text in the PowerPoint presentation.
  • -
  • You can find the text from specific slide, notes slide, master slide or layout slide.
  • -
  • You can find the text by matching case, whole word and all occurrence or first occurrence alone.
  • -
  • You can also find the content that spans across several lines.
  • -
-
-
- More information about the Find functionality can be found in this - Documentation - section. -
-
-} -@section ControlsSection{ -
- @{ - Html.BeginForm("findandhighlight", "powerpoint", FormMethod.Post); - { -
- Click the button to view the generated PowerPoint document or PDF file. Please note that a Microsoft PowerPoint viewer is required to view the resultant presentation document and a PDF viewer is required to view the resultant PDF. -
- Text to Highlight : - -
-
- - Match case -      - - Match whole word -      - - Highlight only the first occurrence -
-
-
- Save As : - - -   - - -
-
-
- -   - -
-
- Html.EndForm(); - } - } -
-} - -@section Meta{ - - } -@section Title{ - ASP.NET Core PowerPoint (Presentation) library - Find and Highlight Example - Syncfusion Demos - } -@section Header{ -

Example of Find and Highlight in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/FindAndHighlight.cshtml.cs b/Pages/PowerPoint/FindAndHighlight.cshtml.cs deleted file mode 100644 index 0ed6f646..00000000 --- a/Pages/PowerPoint/FindAndHighlight.cshtml.cs +++ /dev/null @@ -1,122 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; -using Syncfusion.PresentationRenderer; -using Syncfusion.Pdf; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class FindAndHighlight : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public FindAndHighlight(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string button, string Group, string Group1, string matchCase, - string matchWholeWord, string highlightFirst) - { - if (button == null) - return null; - // return View(); - //Retrieve the current application environment. - //Open the existing presentation. - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/PowerPoint/FindAndHighlightInput.pptx"; - string contenttype = "application/vnd.openxmlformats-officedocument.presentationml.presentation"; - FileStream fileStreamInput = new FileStream(dataPath, FileMode.Open, FileAccess.Read); - if (button == "View Input Template") - return File(fileStreamInput, contenttype, "Input Template.pptx"); - - try - { - IPresentation presentation = Presentation.Open(dataPath); - fileStreamInput.Dispose(); - fileStreamInput = null; - //Highlight only the first occurrence of the text - if (highlightFirst == "HighlightFirst") - { - //Finds the first occurrence of a particular text - ITextSelection textSelection = - presentation.Find(Group, matchCase == "MatchCase", matchWholeWord == "MatchWholeWord"); - if (textSelection != null) - { - //Gets the found text containing text parts - foreach (ITextPart textPart in textSelection.GetTextParts()) - { - //Sets highlight color - textPart.Font.HighlightColor = ColorObject.Yellow; - } - } - } - else - { - //Finds all the occurrences of a particular text - ITextSelection[] textSelections = - presentation.FindAll(Group, matchCase == "MatchCase", matchWholeWord == "MatchWholeWord"); - if (textSelections != null) - { - foreach (ITextSelection textSelection in textSelections) - { - //Gets the found text containing text parts - foreach (ITextPart textPart in textSelection.GetTextParts()) - { - //Sets highlight color - textPart.Font.HighlightColor = ColorObject.Yellow; - } - } - } - } - - string filename = ""; - MemoryStream ms = new MemoryStream(); - if (Group1 == "PPTX") - { - filename = "FindandHighlight.pptx"; - contenttype = "application/vnd.openxmlformats-officedocument.presentationml.presentation"; - //Saves the presentation to the memory stream. - presentation.Save(ms); - } - else - { - filename = "FindandHighlight.pdf"; - contenttype = "application/pdf"; - // Create new instance for PresentationToPdfConverterSettings - PresentationToPdfConverterSettings settings = new PresentationToPdfConverterSettings(); - //Convert the PowerPoint document to PDF document. - using (PdfDocument pdfDocument = PresentationToPdfConverter.Convert(presentation, settings)) - //Save the converted PDF document to Memory stream. - pdfDocument.Save(ms); - } - - //Set the position of the stream to beginning. - ms.Position = 0; - //Close the PowerPoint Presentation. - presentation.Close(); - //Initialize the file stream to download the presentation or PDF. - FileStreamResult fileStreamResult = new FileStreamResult(ms, contenttype); - //Set the file name. - fileStreamResult.FileDownloadName = filename; - return fileStreamResult; - } - catch (Exception) - { - } - - return null; - // return View(); - } -} \ No newline at end of file diff --git a/Pages/PowerPoint/FindAndReplace.cshtml b/Pages/PowerPoint/FindAndReplace.cshtml deleted file mode 100644 index 081d4b59..00000000 --- a/Pages/PowerPoint/FindAndReplace.cshtml +++ /dev/null @@ -1,120 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.FindAndReplace - -@using Syncfusion.EJ2 -@{ - var Title = " Essential Presentation (PowerPoint) : Find and Replace : Syncfusion"; -} -@section ControlsSection{ -
- @{ - Html.BeginForm("findandreplace", "powerpoint", FormMethod.Post); - { -
- Click the button to view the generated PowerPoint document. Please note that Microsoft PowerPoint Viewer or Microsoft PowerPoint is required to view the resultant PowerPoint document. -
- Find using: - -
-
- Text to Find : - -   - Text to Replace : - -
- -
- - Match case -      - - Match whole word -      - - Replace only the first occurrence -
-
- -   - -
-
- Html.EndForm(); - } - } -
- -} -@section ActionDescription{ -
- This sample demonstrates how to replace a specific text or text pattern in the PowerPoint presentation with another text using Find and Replace functionality of .NET PowerPoint library. -
-} -@section Description{ -
- .NET PowerPoint library allows you to replace a specific text in the PowerPoint presentation with another text. -
    -
  • - You can find the static text or text pattern using regular expression. -
  • -
  • - You can find and replace the text with another text in all PowerPoint slides and elements such as Shape, Textbox, Table, SmartArt, etc. -
  • -
  • - You can replace the text in specific slide, notes slide, master slide or layout slide. -
  • -
  • - You can replace the text by matching case, whole word and all occurrence or first occurrence alone. -
  • -
  • - You can also replace the content that spans across several lines. -
  • -
-
-
- More information about the Find and Replace functionality can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core PowerPoint (Presentation) library - Find and Replace Example - Syncfusion Demos - } -@section Header{ -

Example of Find and Replace in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/FindAndReplace.cshtml.cs b/Pages/PowerPoint/FindAndReplace.cshtml.cs deleted file mode 100644 index 031af201..00000000 --- a/Pages/PowerPoint/FindAndReplace.cshtml.cs +++ /dev/null @@ -1,123 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; -using System.Text.RegularExpressions; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class FindAndReplace : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public FindAndReplace(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string button, string matchCase, string matchWholeWord, - string findText, string findTextUsingRegex, string findUsing, string replaceText, string replaceFirst) - { - if (button == null) - return null; - // return View(); - //Retrieve the current application environment. - //Open the existing presentation. - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/PowerPoint/Input Template.pptx"; - string contenttype = "application/vnd.openxmlformats-officedocument.presentationml.presentation"; - FileStream fileStreamInput = new FileStream(dataPath, FileMode.Open, FileAccess.Read); - if (button == "View Input Template") - return File(fileStreamInput, contenttype, "Input Template.pptx"); - - try - { - IPresentation presentation = Presentation.Open(dataPath); - fileStreamInput.Dispose(); - fileStreamInput = null; - //Replaces only the first occurrence of the text - if (replaceFirst == "ReplaceFirst") - { - ITextSelection textSelection = null; - if (findUsing == "0") - { - //Finds the first occurrence of a particular text - textSelection = presentation.Find(findText, matchCase == "MatchCase", - matchWholeWord == "MatchWholeWord"); - } - else - { - Regex regex = new Regex(findTextUsingRegex); - //Finds the first occurrence of a particular text - textSelection = presentation.Find(regex); - } - - if (textSelection != null) - { - //Gets the found text as single text part - ITextPart textPart = textSelection.GetAsOneTextPart(); - //Replace the text - textPart.Text = replaceText; - } - } - else - { - ITextSelection[] textSelections = null; - if (findUsing == "0") - { - //Finds the first occurrence of a particular text - textSelections = presentation.FindAll(findText, matchCase == "MatchCase", - matchWholeWord == "MatchWholeWord"); - } - else - { - Regex regex = new Regex(findTextUsingRegex); - //Finds the first occurrence of a particular text - textSelections = presentation.FindAll(regex); - } - - if (textSelections != null) - { - foreach (ITextSelection textSelection in textSelections) - { - //Gets the found text as single text part - ITextPart textPart = textSelection.GetAsOneTextPart(); - //Replace the text - textPart.Text = replaceText; - } - } - } - - MemoryStream ms = new MemoryStream(); - - //Saves the presentation to the memory stream. - presentation.Save(ms); - //Set the position of the stream to beginning. - ms.Position = 0; - - //Initialize the file stream to download the presentation. - FileStreamResult fileStreamResult = new FileStreamResult(ms, - "application/vnd.openxmlformats-officedocument.presentationml.presentation"); - //Set the file name. - fileStreamResult.FileDownloadName = "FindandReplace.pptx"; - - return fileStreamResult; - } - catch (Exception) - { - } - - return null; - // return View(); - } -} \ No newline at end of file diff --git a/Pages/PowerPoint/HeaderAndFooter.cshtml b/Pages/PowerPoint/HeaderAndFooter.cshtml deleted file mode 100644 index 97e3389f..00000000 --- a/Pages/PowerPoint/HeaderAndFooter.cshtml +++ /dev/null @@ -1,53 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.HeaderAndFooter - -@using Syncfusion.EJ2 -@{ var Title = "Essential Presentation (Presentation) : HeaderAndFooter : Syncfusion"; } - -@section ActionDescription{ - This sample demonstrates how to insert the header and footer in a PowerPoint presentation. -} - -@section Description{ - Features: -
-
-
    -
  • Add date and time, slide number and footer into a PowerPoint slide.
  • -
  • Add header into a notes slide.
  • -
  • Edit an existing header or footer.
  • -
-
-} -@section ControlsSection{ -
- @{ - Html.BeginForm("headerandfooter", "powerpoint", FormMethod.Post); - { -
-

- Click the button to view a PowerPoint presentation generated by Essential Presentation. Please note - that Microsoft PowerPoint viewer or its equivalent is required to view the resultant document. -

-
-
-
-
- -
-
-
- Html.EndForm(); - } - } -
-} -@section Title{ - ASP.NET Core PowerPoint (Presentation) library - Header And Footer Example - Syncfusion Demos - } -@section Meta{ - - } -@section Header{ -

Example of Header And Footer in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/HeaderAndFooter.cshtml.cs b/Pages/PowerPoint/HeaderAndFooter.cshtml.cs deleted file mode 100644 index a5d2270c..00000000 --- a/Pages/PowerPoint/HeaderAndFooter.cshtml.cs +++ /dev/null @@ -1,72 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class HeaderAndFooter : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public HeaderAndFooter(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string button) - { - if (button == null) - return null; - // return View(); - //Opens the presentation document as stream - string basePath = _hostingEnvironment.WebRootPath; - IPresentation presentation = Presentation.Open(basePath + @"/PowerPoint/HeaderFooter.pptx"); - - //Add footers into all the PowerPoint slides. - foreach (ISlide slide in presentation.Slides) - { - //Enable a date and time footer in slide. - slide.HeadersFooters.DateAndTime.Visible = true; - //Enable a footer in slide. - slide.HeadersFooters.Footer.Visible = true; - //Sets the footer text. - slide.HeadersFooters.Footer.Text = "Footer"; - //Enable a slide number footer in slide. - slide.HeadersFooters.SlideNumber.Visible = true; - } - - //Add header into first slide notes page. - //Add a notes slide to the slide. - INotesSlide notesSlide = presentation.Slides[0].AddNotesSlide(); - //Enable a header in notes slide. - notesSlide.HeadersFooters.Header.Visible = true; - //Sets the header text. - notesSlide.HeadersFooters.Header.Text = "Header"; - - MemoryStream ms = new MemoryStream(); - - //Saves the presentation to the memory stream. - presentation.Save(ms); - //Set the position of the stream to beginning. - ms.Position = 0; - - //Initialize the file stream to download the presentation. - FileStreamResult fileStreamResult = new FileStreamResult(ms, - "application/vnd.openxmlformats-officedocument.presentationml.presentation"); - //Set the file name. - fileStreamResult.FileDownloadName = "HeaderFooter.pptx"; - - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/PowerPoint/Image.cshtml b/Pages/PowerPoint/Image.cshtml deleted file mode 100644 index 1c0cd4b3..00000000 --- a/Pages/PowerPoint/Image.cshtml +++ /dev/null @@ -1,56 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.Image - -@using Syncfusion.EJ2 -@{ var Title = "Essential Presentation (Presentation) : Image : Syncfusion"; } - -@section ActionDescription{ - This sample demonstrates how to add and format images in PowerPoint Presentation using .NET PowerPoint Library (Presentation). -} - -@section Description{ -
- The .NET PowerPoint Library (Presentation) allows you to insert images into the presentation at the desired location. -
    -
  • Format images by resizing to the required size.
  • -
  • Crop the images with desired offsets.
  • -
  • Add alternate text to images.
  • -
-
-
-
- More information about image support can be found in this Documentation section. -
-
-} -@section ControlsSection{ -
- @{ - Html.BeginForm("image", "powerpoint", FormMethod.Post); - { -
-

- Click the button to view the generated PowerPoint presentation. Please note that a PowerPoint-compatible viewer is required to open and view the PowerPoint presentation file. -

-
-
-
-
- -
-
-
- Html.EndForm(); - } - } -
-} -@section Title{ - ASP.NET Core PowerPoint (Presentation) library - Image Example - Syncfusion Demos - } -@section Meta{ - - } -@section Header{ -

Example of Image in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/Image.cshtml.cs b/Pages/PowerPoint/Image.cshtml.cs deleted file mode 100644 index 76a4db41..00000000 --- a/Pages/PowerPoint/Image.cshtml.cs +++ /dev/null @@ -1,140 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class Image : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public Image(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string button) - { - if (button == null) - return null; - // return View(); - //Create an instance of PowerPoint. - IPresentation pptxDoc = Presentation.Create(); - //Add a blank slide to Presentation. - ISlide firstSlide = pptxDoc.Slides.Add(SlideLayoutType.Blank); - - //Add a title text box to the slide. - IShape titleShape = firstSlide.Shapes.AddTextBox(55, 23, 853, 72); - //Set vertical alignment to the text body. - titleShape.TextBody.VerticalAlignment = VerticalAlignmentType.Bottom; - //Add a title paragraph. - IParagraph titleParagraph = titleShape.TextBody.AddParagraph(); - //Set the alignment properties for the paragraph. - titleParagraph.HorizontalAlignment = HorizontalAlignmentType.Center; - //Add a text part. - ITextPart titleTextPart = titleParagraph.AddTextPart("Adventure Works Cycles"); - //Set the font properties for the text part. - titleTextPart.Font.FontSize = 36; - - //Add a content text box to the slide. - IShape textbox = firstSlide.Shapes.AddTextBox(66, 132, 543, 350); - //Add the first paragraph. - IParagraph paragraph1 = textbox.TextBody.AddParagraph(); - //Set bulleted list type. - paragraph1.ListFormat.Type = ListType.Bulleted; - //Set paragraph properties. - paragraph1.LeftIndent = 22; - paragraph1.FirstLineIndent = -22; - paragraph1.LineSpacing = 38; - paragraph1.SpaceBefore = 10; - //Add a new text part. - paragraph1.AddTextPart( - "Adventure Works Cycles, the fictitious company on which the Adventure Works sample databases are based, is a large, multinational manufacturing company."); - - //Add the second paragraph. - IParagraph paragraph2 = textbox.TextBody.AddParagraph(); - //Set bulleted list type. - paragraph2.ListFormat.Type = ListType.Bulleted; - //Set paragraph properties. - paragraph2.LeftIndent = 22; - paragraph2.FirstLineIndent = -22; - paragraph2.LineSpacing = 38; - paragraph2.SpaceBefore = 10; - //Add a new text part. - paragraph2.AddTextPart( - "The company manufactures and sells metal and composite bicycles to North American, European, and Asian commercial markets. While its base operation is located in Bothell, Washington, with 290 employees, several regional sales teams are located throughout their market base."); - string basePath = _hostingEnvironment.WebRootPath; - //Create an instance for the image as a stream. - FileStream imageStream = - new FileStream(basePath + @"/PowerPoint/CycleLogo.jpg", FileMode.Open, FileAccess.Read); - //Add a picture to the shape collection. - IPicture picture = firstSlide.Shapes.AddPicture(imageStream, 610, 246, 328, 123); - //Add alternate text to the picture. - picture.Description = "Adventure Works Cycles Logo"; - //Apply bounding box size and position. - picture.Crop.ContainerWidth = 328f; - picture.Crop.ContainerHeight = 123f; - picture.Crop.ContainerLeft = 609f; - picture.Crop.ContainerTop = 246f; - //Apply cropping size and offsets. - picture.Crop.Width = 370f; - picture.Crop.Height = 151f; - picture.Crop.OffsetX = -4.32f; - picture.Crop.OffsetY = 1.44f; - - //Add a title-only slide to Presentation. - ISlide secondSlide = pptxDoc.Slides.Add(SlideLayoutType.TitleOnly); - //Retrieve the first shape of the slide. - IShape titleShape2 = secondSlide.Shapes[0] as IShape; - //Add a title paragraph. - IParagraph titleParagraph2 = titleShape2.TextBody.AddParagraph(); - //Set the alignment properties for the paragraph. - titleParagraph2.HorizontalAlignment = HorizontalAlignmentType.Center; - //Add a text part. - ITextPart titleTextPart2 = titleParagraph2.AddTextPart("About Adventure Works Cycles"); - //Set the font properties for the text part. - titleTextPart2.Font.FontName = "Calibri"; - titleTextPart2.Font.FontSize = 40; - - //Get an SVG image as a stream. - FileStream svgImageStream = new FileStream(basePath + @"/PowerPoint/About.svg", FileMode.Open, FileAccess.Read); - //Get a fallback image as a stream. - FileStream fallbackImageStream = - new FileStream(basePath + @"/PowerPoint/About.png", FileMode.Open, FileAccess.Read); - //Add the SVG picture to a slide by specifying its size and position. - IPicture svgPicture = secondSlide.Pictures.AddPicture(svgImageStream, fallbackImageStream, 172, 155, 643, 256); - //Add alternate text to the picture. - svgPicture.Description = "About Adventure Works Cycles"; - - //Close the image streams. - imageStream.Close(); - svgImageStream.Close(); - fallbackImageStream.Close(); - MemoryStream ms = new MemoryStream(); - - //Saves the presentation to the memory stream. - pptxDoc.Save(ms); - //Set the position of the stream to beginning. - ms.Position = 0; - //Close the Presentation. - pptxDoc.Close(); - //Initialize the file stream to download the presentation. - FileStreamResult fileStreamResult = new FileStreamResult(ms, - "application/vnd.openxmlformats-officedocument.presentationml.presentation"); - //Set the file name. - fileStreamResult.FileDownloadName = "Images.pptx"; - - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/PowerPoint/ModifyAnimation.cshtml b/Pages/PowerPoint/ModifyAnimation.cshtml deleted file mode 100644 index 4716bf2e..00000000 --- a/Pages/PowerPoint/ModifyAnimation.cshtml +++ /dev/null @@ -1,67 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.ModifyAnimation - -@using Syncfusion.EJ2 -@{ var Title = "Essential Presentation (Presentation) : ModifyAnimation : Syncfusion"; } - -@section ActionDescription{ - This sample demonstrates how to modify the animation effect for shapes. -} - -@section Description{ - Features: -
-
-
- The below animation effects are supported as equivalent to Microsoft PowerPoint: -
    -
  • Entrance
  • -
  • Emphasis
  • -
  • Exit
  • -
  • Motion Paths
  • -
-
-
-
- The below animation options are supported as equivalent to Microsoft PowerPoint: -
    -
  • Effect options
  • -
  • Add multiple animation
  • -
  • Trigger
  • -
  • Animation timing
  • -
-
-
-} - -@section ControlsSection{ -
- @{ - Html.BeginForm("modifyanimation", "powerpoint", FormMethod.Post); - { -
-

- Click the button to view a PowerPoint presentation generated by Essential Presentation. Please note - that Microsoft PowerPoint viewer or its equivalent is required to view the resultant document. -

-
-
-
- - -
-
- Html.EndForm(); - } - } -
-} -@section Title{ - ASP.NET Core PowerPoint (Presentation) library - Modify Animation Example - Syncfusion Demos - } -@section Meta{ - - } -@section Header{ -

Example of Modify Animation in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/ModifyAnimation.cshtml.cs b/Pages/PowerPoint/ModifyAnimation.cshtml.cs deleted file mode 100644 index 5863d392..00000000 --- a/Pages/PowerPoint/ModifyAnimation.cshtml.cs +++ /dev/null @@ -1,80 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class ModifyAnimation : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public ModifyAnimation(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button) - { - if (button == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - if (button.Trim() == "Input Template") - { - - IPresentation presentation = Presentation.Open(basePath + @"/PowerPoint/ShapeWithAnimation.pptx"); - MemoryStream ms = new MemoryStream(); - - //Saves the presentation to the memory stream. - presentation.Save(ms); - //Set the position of the stream to beginning. - ms.Position = 0; - return File(ms, "application/vnd.openxmlformats-officedocument.presentationml.presentation","ShapeWithAnimation.pptx"); - } - else - { - IPresentation presentation = Presentation.Open(basePath + @"/PowerPoint/ShapeWithAnimation.pptx"); - //New Instance of PowerPoint is Created.[Equivalent to launching MS PowerPoint with no slides]. - - //Modify the existing animation - ModifyAnimations(presentation); - - MemoryStream ms = new MemoryStream(); - - //Saves the presentation to the memory stream. - presentation.Save(ms); - //Set the position of the stream to beginning. - ms.Position = 0; - - //Initialize the file stream to download the presentation. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/vnd.openxmlformats-officedocument.presentationml.presentation"); - //Set the file name. - fileStreamResult.FileDownloadName = "ModifyAnimation.pptx"; - - return fileStreamResult; - } - } - #region Modify Animation - - private void ModifyAnimations(IPresentation presentation) - { - //Retrieves the slide instance - ISlide slide = presentation.Slides[0]; - //Retrieves the slide main sequence - ISequence sequence = slide.Timeline.MainSequence; - //Retrieves the existing animation effect from the main sequence - IEffect loopEffect = sequence[0]; - //Change the type of the existing animation effect - loopEffect.Type = EffectType.Bounce; - } - #endregion -} diff --git a/Pages/PowerPoint/OLEObject.cshtml b/Pages/PowerPoint/OLEObject.cshtml deleted file mode 100644 index e4403f47..00000000 --- a/Pages/PowerPoint/OLEObject.cshtml +++ /dev/null @@ -1,66 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.OLEObject - -@using Syncfusion.EJ2 -@{ var Title = "Essential Presentation (Presentation) : OLEObject : Syncfusion"; } - -@section ActionDescription{ - This sample demonstrates how to insert and extract a OLE Object in PowerPoint presentation. -} - -@section Description{ - Features: -
-
-
-
    -
  • Add new OLE Object into a PowerPoint slide.
  • -
  • Extract a embedded OLE Object data.
  • -
  • Gets the file path of a linked OLE Object
  • -
  • Gets the file name of a OLE Object.
  • -
-
-
-} - -@section ControlsSection{ -
- @{ - Html.BeginForm("oleobject", "powerpoint", FormMethod.Post); - { -
-

- Click the button to view a presentation document generated by Essential Presentation. Please note - that Microsoft PowerPoint viewer is required to view the resultant document. -

-
-
-
- -
-
-
-

- Click the button to view a embedded OLE document opened by Essential Presentation. Please note - that Microsoft Word is required to view the embedded Docx document. -

-
-
-
- -
-
- Html.EndForm(); - } - } -
-} -@section Title{ - ASP.NET Core PowerPoint (Presentation) library - OLE Object Example - Syncfusion Demos - } -@section Meta{ - - } -@section Header{ -

Example of OLE Object in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/OLEObject.cshtml.cs b/Pages/PowerPoint/OLEObject.cshtml.cs deleted file mode 100644 index 7b5263a8..00000000 --- a/Pages/PowerPoint/OLEObject.cshtml.cs +++ /dev/null @@ -1,110 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class OLEObject : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public OLEObject(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string button) - { - if (button == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - if (button.Trim() == "Create Presentation") - { - //New Instance of PowerPoint is Created.[Equivalent to launching MS PowerPoint with no slides]. - IPresentation presentation = Presentation.Create(); - - ISlide slide = presentation.Slides.Add(SlideLayoutType.TitleOnly); - - IShape titleShape = slide.Shapes[0] as IShape; - titleShape.Left = 0.65 * 72; - titleShape.Top = 0.24 * 72; - titleShape.Width = 11.5 * 72; - titleShape.Height = 1.45 * 72; - titleShape.TextBody.AddParagraph("Ole Object"); - titleShape.TextBody.Paragraphs[0].Font.Bold = true; - titleShape.TextBody.Paragraphs[0].HorizontalAlignment = HorizontalAlignmentType.Left; - - IShape heading = slide.Shapes.AddTextBox(0.84 * 72, 1.65 * 72, 2.23 * 72, 0.51 * 72); - heading.Left = 3.2 * 72; - heading.Top = 1.51 * 72; - heading.Width = 1.86 * 72; - heading.Height = 0.71 * 72; - heading.TextBody.AddParagraph("MS Word Object"); - heading.TextBody.Paragraphs[0].Font.Italic = true; - heading.TextBody.Paragraphs[0].Font.Bold = true; - heading.TextBody.Paragraphs[0].Font.FontSize = 18; - - string mswordPath = basePath + @"/PowerPoint/OleTemplate.docx"; - //Get the word document as stream - Stream wordStream = new FileStream(mswordPath, FileMode.Open); - string imagePath = basePath + @"/PowerPoint/OlePicture.png"; - //Image to be displayed, This can be any image - Stream imageStream = new FileStream(imagePath, FileMode.Open); - - IOleObject oleObject = slide.Shapes.AddOleObject(imageStream, "Word.Document.12", wordStream); - //Set size and position of the ole object - oleObject.Left = 4.53 * 72; - oleObject.Top = 0.79 * 72; - oleObject.Width = 4.26 * 72; - oleObject.Height = 5.92 * 72; - - MemoryStream ms = new MemoryStream(); - - //Saves the presentation to the memory stream. - presentation.Save(ms); - //Set the position of the stream to beginning. - ms.Position = 0; - //Dispose the streams. - wordStream.Dispose(); - imageStream.Dispose(); - return File(ms, "application/vnd.openxmlformats-officedocument.presentationml.presentation", - "InsertOLEObject.pptx"); - } - else - { - IPresentation pptxDoc = Presentation.Open(basePath + @"/PowerPoint/EmbeddedOleObject.pptx"); - //New Instance of PowerPoint is Created.[Equivalent to launching MS PowerPoint with no slides]. - - //Gets the first slide of the Presentation - ISlide slide = pptxDoc.Slides[0]; - //Gets the Ole Object of the slide - IOleObject oleObject = slide.Shapes[2] as IOleObject; - //Gets the file data of embedded Ole Object. - byte[] array = oleObject.ObjectData; - //Gets the file Name of OLE Object - string outputFile = oleObject.FileName; - - MemoryStream ms = new MemoryStream(array); - - //Initialize the file stream to download the presentation. - FileStreamResult fileStreamResult = new FileStreamResult(ms, - "application/vnd.openxmlformats-officedocument.presentationml.presentation"); - //Set the file name. - fileStreamResult.FileDownloadName = outputFile; - - return fileStreamResult; - } - } -} \ No newline at end of file diff --git a/Pages/PowerPoint/PPTXToImage.cshtml b/Pages/PowerPoint/PPTXToImage.cshtml deleted file mode 100644 index 0d453589..00000000 --- a/Pages/PowerPoint/PPTXToImage.cshtml +++ /dev/null @@ -1,100 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.PPTXToImage - -@using Syncfusion.EJ2 -@{ var Title = "Essential Presentation (Presentation) : PPTXToImage : Syncfusion"; } - -@section ActionDescription{ - This sample demonstrates how to convert the PowerPoint document to an image. -} - -@section Description{ - Features: -
-
-
    -
  • Convert all slide elements like text, shape, SmartArt diagram, table, etc., along with its formatting.
  • -
  • Charts in a slide can be converted to image.
  • -
  • Slides can be converted to JPEG, PNG formats.
  • -
-
-} -@section ControlsSection{ -
- @{ - Html.BeginForm("pptxtoimage", "powerpoint", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
-

- Click the button to convert the PowerPoint presentation to image by using .NET PowerPoint Library (Presentation). -

-
-
- - - -
-
- - -
- - -
- - -
-
-
- -
-
- @Model.Message -
-
-
- Html.EndForm(); - } - } -
-} - - - -@section Title{ - ASP.NET Core PowerPoint (Presentation) library - PPTX To Image Example - Syncfusion Demos - } -@section Meta{ - - } -@section Header{ -

Example of PPTX To Image in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/PPTXToImage.cshtml.cs b/Pages/PowerPoint/PPTXToImage.cshtml.cs deleted file mode 100644 index 465aa76d..00000000 --- a/Pages/PowerPoint/PPTXToImage.cshtml.cs +++ /dev/null @@ -1,193 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; -using Syncfusion.PresentationRenderer; -using Syncfusion.Compression.Zip; -using Syncfusion.Office; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class PPTXToImage : PageModel -{ - public void OnGet() - { - - } - - public string Message { get; set; } - private readonly IWebHostEnvironment _hostingEnvironment; - public PPTXToImage(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string option, string button, string from, string to) - { - if (button == null) - return null; - // return View(); - Stream stream = GetPPTXDocumentForImageConversion(); - if (stream != null) - { - try - { - string output = (Request.Form.Files != null && Request.Form.Files.Count != 0) - ? Path.GetFileNameWithoutExtension(Request.Form.Files[0].FileName) - : "PresentationtoImage"; - - //Open the existing PowerPoint presentation. - using (IPresentation presentation = Presentation.Open(stream)) - { - //Initialize PresentationRenderer to perform image conversion. - presentation.PresentationRenderer = new PresentationRenderer(); - - //Add a custom fallback font collection for Presentation. - AddFallbackFonts(presentation); - - if (option == "FirstSlide") - { - //Converts the first slide of PowerPoint document to image. - Stream imageStream = presentation.Slides[0].ConvertToImage(ExportImageFormat.Jpeg); - imageStream.Position = 0; - return File(imageStream, "image/jpeg", output + "_Slide1.jpeg"); - } - else - { - //Initialize ZipArchive to zip the image files. - ZipArchive zip = new ZipArchive(); - string zipFileName; - Stream[] imageStreams; - - if (option == "SpecificSlides") - { - int firstSlide = int.Parse(from); - int lastSlide = int.Parse(to); - int totalSlides = presentation.Slides.Count; - - if (firstSlide <= lastSlide && firstSlide <= totalSlides && firstSlide > 0) - { - imageStreams = lastSlide <= totalSlides - ? new Stream[lastSlide - firstSlide + 1] - : new Stream[totalSlides - firstSlide + 1]; - - int i = 0; - for (int currentSlide = firstSlide - 1; - currentSlide < totalSlides && currentSlide < lastSlide; - currentSlide++) - { - //Converts specific slide range of PowerPoint document to images. - imageStreams[i] = presentation.Slides[currentSlide] - .ConvertToImage(ExportImageFormat.Jpeg); - i++; - } - - zipFileName = output + "_Slides" + firstSlide + "To" + lastSlide + ".zip"; - return SaveImagesToZip(zip, output, firstSlide, imageStreams, zipFileName); - } - else - { - Message = string.Format("Please enter a valid range of slides."); - return null; - // return View(); - } - } - else - { - //Converts all slides in PowerPoint document to images. - imageStreams = presentation.RenderAsImages(ExportImageFormat.Jpeg); - - zipFileName = output + "_Images.zip"; - return SaveImagesToZip(zip, output, 1, imageStreams, zipFileName); - } - } - } - } - catch - { - Message = - string.Format( - "The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - } - } - - return null; - // return View(); - } - /// - /// Add a custom fallback font collection for IPresentation. - /// - /// Represent a presentation to add. - private void AddFallbackFonts(IPresentation presentation) - { - //Add customized fallback font names. - - // Arabic - presentation.FontSettings.FallbackFonts.Add(new FallbackFont(0x0600, 0x06ff, "Arial")); - // Hebrew - presentation.FontSettings.FallbackFonts.Add(new FallbackFont(0x0590, 0x05ff, "Arial, David")); - // Hindi - presentation.FontSettings.FallbackFonts.Add(new FallbackFont(0x0900, 0x097F, "Mangal")); - // Chinese - presentation.FontSettings.FallbackFonts.Add(new FallbackFont(0x4E00, 0x9FFF, "DengXian")); - // Japanese - presentation.FontSettings.FallbackFonts.Add(new FallbackFont(0x3040, 0x309F, "MS Mincho")); - // Korean - presentation.FontSettings.FallbackFonts.Add(new FallbackFont(0xAC00, 0xD7A3, "Malgun Gothic")); - } - /// - /// Gets Word document for Image Conversion - /// - /// - private Stream GetPPTXDocumentForImageConversion() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".pptx") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - Message = string.Format("Please choose PPTX format document to convert to Image"); - return null; - } - } - else - { - //Opens an existing document from stream through `IPresentation` class - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/PowerPoint/Template.pptx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } - /// - /// Save the images to zip file - /// - /// - private ActionResult SaveImagesToZip(ZipArchive zip, string output, int firstSlide, Stream[] imageStreams, string zipFileName) - { - foreach (Stream imageStream in imageStreams) - { - string filename = output + "_Slide" + firstSlide + ".jpeg"; - imageStream.Position = 0; - ZipArchiveItem item = new ZipArchiveItem(zip, filename, imageStream, true, Syncfusion.Compression.FileAttributes.Compressed); - zip.AddItem(item); - firstSlide++; - } - - MemoryStream stream = new MemoryStream(); - zip.Save(stream, true); - return File(stream.ToArray(), "application/zip", zipFileName); - } -} \ No newline at end of file diff --git a/Pages/PowerPoint/PPTXToPDF.cshtml b/Pages/PowerPoint/PPTXToPDF.cshtml deleted file mode 100644 index ee8fc317..00000000 --- a/Pages/PowerPoint/PPTXToPDF.cshtml +++ /dev/null @@ -1,86 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.PPTXToPDF - -@using Syncfusion.EJ2 -@{ var Title = "Essential Presentation (Presentation) : PPTXToPDF : Syncfusion"; } - -@section ActionDescription{ - This sample demonstrates how to convert a PowerPoint presentation to PDF. -} - -@section Description{ - Features: -
-
-
    -
  • Convert all slide elements like text, shape, SmartArt diagram, table, etc., along with its formatting.
  • -
  • Convert with handouts option.
  • -
  • Convert the notes pages to PDF.
  • -
  • Charts in a slide can be converted to PDF.
  • -
  • Converted PDF document size can be optimized.
  • -
-
-} -@section ControlsSection{ -
- @{ - Html.BeginForm("pptxtopdf", "powerpoint", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
-

- Click the button to convert the PowerPoint presentation to PDF document by using Essential Presentation and Essential PDF. -
- Note: Adobe Reader or its equivalent is required to view the resultant document. - -

-
-
-
- - - -
-
-
- PDF Options -
- - -
-
-
- -
-
- @Model.Message -
-
-
-
- Html.EndForm(); - } - } -
-} - -@section Title{ - ASP.NET Core PowerPoint (Presentation) library - PPTX To PDF Example - Syncfusion Demos - } -@section Meta{ - - } -@section Header{ -

Example of PPTX To PDF in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/PPTXToPDF.cshtml.cs b/Pages/PowerPoint/PPTXToPDF.cshtml.cs deleted file mode 100644 index 4f884850..00000000 --- a/Pages/PowerPoint/PPTXToPDF.cshtml.cs +++ /dev/null @@ -1,139 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; -using Syncfusion.PresentationRenderer; -using Syncfusion.Pdf; -using Syncfusion.Office; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class PPTXToPDF : PageModel -{ - public void OnGet() - { - - } - - public string Message { get; set; } - private readonly IWebHostEnvironment _hostingEnvironment; - - public PPTXToPDF(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - [HttpPost] - public ActionResult OnPost(string button, string renderingMode1, string view) - { - if (button == null) - return null; - // return View(); - Stream stream = GetPresentation(); - if (stream != null) - { - try - { - string output = (Request.Form.Files != null && Request.Form.Files.Count != 0) - ? Path.GetFileNameWithoutExtension(Request.Form.Files[0].FileName) - : "PPTXToPDF"; - IPresentation presentation = Presentation.Open(stream); - stream.Dispose(); - stream = null; - - // Create new instance for PresentationToPdfConverterSettings - PresentationToPdfConverterSettings settings = new PresentationToPdfConverterSettings(); - //Enables a flag to preserve form fields by converting shapes with names starting with 'FormField_' into editable text form fields in the PDF. - if (renderingMode1 == "PreserveFormFields") - settings.PreserveFormFields = true; - //Convert the PowerPoint document to PDF document. - PdfDocument pdfDocument = PresentationToPdfConverter.Convert(presentation, settings); - - MemoryStream pdfStream = new MemoryStream(); - - //Save the converted PDF document to Memory stream. - pdfDocument.Save(pdfStream); - pdfStream.Position = 0; - - //Close the PDF document. - pdfDocument.Close(true); - - //Close the PowerPoint Presentation. - presentation.Close(); - - //Initialize the file stream to download the converted PDF. - FileStreamResult fileStreamResult = new FileStreamResult(pdfStream, "application/pdf"); - //Set the file name. - fileStreamResult.FileDownloadName = output + ".pdf"; - - return fileStreamResult; - } - catch - { - Message = - string.Format( - "The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - } - } - - return null; - // return View(); - } - /// - /// Add a custom fallback font collection for IPresentation. - /// - /// Represent a presentation to add. - private void AddFallbackFonts(IPresentation presentation) - { - //Add customized fallback font names. - - // Arabic - presentation.FontSettings.FallbackFonts.Add(new FallbackFont(0x0600, 0x06ff, "Arial")); - // Hebrew - presentation.FontSettings.FallbackFonts.Add(new FallbackFont(0x0590, 0x05ff, "Arial, David")); - // Hindi - presentation.FontSettings.FallbackFonts.Add(new FallbackFont(0x0900, 0x097F, "Mangal")); - // Chinese - presentation.FontSettings.FallbackFonts.Add(new FallbackFont(0x4E00, 0x9FFF, "DengXian")); - // Japanese - presentation.FontSettings.FallbackFonts.Add(new FallbackFont(0x3040, 0x309F, "MS Mincho")); - // Korean - presentation.FontSettings.FallbackFonts.Add(new FallbackFont(0xAC00, 0xD7A3, "Malgun Gothic")); - } - /// - /// This method will returns the Input Presentation document or the Default Template Presentation document as Stream - /// - private Stream GetPresentation() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".pptx") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - Message = string.Format("Please choose PowerPoint Presentation document (PPTX) to convert as PDF"); - return null; - } - } - else - { - //Opens an existing document from stream - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/PowerPoint/Template.pptx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } -} \ No newline at end of file diff --git a/Pages/PowerPoint/PPTXToPDFA.cshtml b/Pages/PowerPoint/PPTXToPDFA.cshtml deleted file mode 100644 index 8b85e923..00000000 --- a/Pages/PowerPoint/PPTXToPDFA.cshtml +++ /dev/null @@ -1,70 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.PPTXToPDFA - -@using Syncfusion.EJ2 -@{ var Title = "Essential Presentation (Presentation) : PPTXToPDFA : Syncfusion"; } - -@section ActionDescription{ - This sample demonstrates how to convert a PowerPoint Presentation to PDF/A using .NET PowerPoint library and .NET PDF library. -} - -@section Description{ -
- This feature can be used for long term archiving and standardization. More information about converting PowerPoint Presentation to PDF with conformance can be found in this - Documentation - section. -
-} -@section ControlsSection{ -
- @{ - Html.BeginForm("pptxtopdfa", "powerpoint", FormMethod.Post, new { enctype = "multipart/form-data" }); - { - - -
-

- Click the button to view the PDF/A document generated by .NET PowerPoint library and .NET PDF library. Please note that Adobe Reader or its equivalent is required to view the resultant document. -

-
-
-
- - - -
-
-
- -
-
- @Model.Message -
-
-
-
- Html.EndForm(); - } - } -
-} - -@section Title{ - ASP.NET Core PowerPoint library - PPTX to PDF/A Example - Syncfusion Demos - } -@section Meta{ - - } -@section Header{ -

Example of PPTX To PDF/A in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/PPTXToPDFA.cshtml.cs b/Pages/PowerPoint/PPTXToPDFA.cshtml.cs deleted file mode 100644 index f94e2bf5..00000000 --- a/Pages/PowerPoint/PPTXToPDFA.cshtml.cs +++ /dev/null @@ -1,116 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; -using Syncfusion.PresentationRenderer; -using Syncfusion.Pdf; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class PPTXToPDFA : PageModel -{ - public void OnGet() - { - - } - - public string Message { get; set; } - private readonly IWebHostEnvironment _hostingEnvironment; - - public PPTXToPDFA(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string button, string view) - { - if (button == null) - return null; - // return View(); - Stream stream = GetPresentation(); - if (stream != null) - { - try - { - string output = (Request.Form.Files != null && Request.Form.Files.Count != 0) - ? Path.GetFileNameWithoutExtension(Request.Form.Files[0].FileName) - : "PPTXToPDF_Pdf_A3A"; - IPresentation presentation = Presentation.Open(stream); - stream.Dispose(); - stream = null; - - // Create new instance for PresentationToPdfConverterSettings. - PresentationToPdfConverterSettings settings = new PresentationToPdfConverterSettings(); - //Set the Pdf conformance level to A3A. - settings.PdfConformanceLevel = PdfConformanceLevel.Pdf_A3A; - - //Convert the PowerPoint document to PDF document. - PdfDocument pdfDocument = PresentationToPdfConverter.Convert(presentation, settings); - - MemoryStream pdfStream = new MemoryStream(); - - //Save the converted PDF document to Memory stream. - pdfDocument.Save(pdfStream); - pdfStream.Position = 0; - - //Close the PDF document. - pdfDocument.Close(true); - - //Close the PowerPoint Presentation. - presentation.Close(); - - //Initialize the file stream to download the converted PDF. - FileStreamResult fileStreamResult = new FileStreamResult(pdfStream, "application/pdf"); - //Set the file name. - fileStreamResult.FileDownloadName = output + ".pdf"; - - return fileStreamResult; - } - catch - { - Message = - string.Format( - "The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - } - } - - return null; - // return View(); - } - /// - /// This method will returns the Input Presentation document or the Default Template Presentation document as Stream - /// - private Stream GetPresentation() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".pptx") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - Message = string.Format("Please choose PowerPoint Presentation document (PPTX) to convert as PDF"); - return null; - } - } - else - { - //Opens an existing document from stream - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/PowerPoint/Template.pptx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } -} \ No newline at end of file diff --git a/Pages/PowerPoint/PPTXToPDFUA.cshtml b/Pages/PowerPoint/PPTXToPDFUA.cshtml deleted file mode 100644 index c416a790..00000000 --- a/Pages/PowerPoint/PPTXToPDFUA.cshtml +++ /dev/null @@ -1,69 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.PPTXToPDFUA - -@using Syncfusion.EJ2 -@{ var Title = "Essential Presentation (Presentation) : PPTXToPDFUA : Syncfusion"; } - -@section ActionDescription{ - This sample demonstrates how to convert a PowerPoint Presentation to PDF/UA (Section 508 compliant) using .NET PowerPoint library and .NET PDF library. -} - -@section Description{ -
- This feature is used for people who require assistive technologies when the electronic content is ready. The .NET PowerPoint library supports converting a PowerPoint Presentation to a tagged PDF with Section 508 compliant. For more information about PPTX to PDF/UA, see this - Documentation - section. -
-} -@section ControlsSection{ -
- @{ - Html.BeginForm("pptxtopdfua", "powerpoint", FormMethod.Post, new { enctype = "multipart/form-data" }); - { - -
-

- Click the button to view the PDF/UA document generated by .NET PowerPoint library and .NET PDF library. Please note that Adobe Reader or its equivalent is required to view the resultant document. -

-
-
-
- - - -
-
-
- -
-
- @Model.Message -
-
-
-
- Html.EndForm(); - } - } -
-} - -@section Title{ - ASP.NET Core PowerPoint library - PPTX to PDF/UA Example - Syncfusion Demos - } -@section Meta{ - - } -@section Header{ -

Example of PPTX To PDF/UA in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/PPTXToPDFUA.cshtml.cs b/Pages/PowerPoint/PPTXToPDFUA.cshtml.cs deleted file mode 100644 index c5379ede..00000000 --- a/Pages/PowerPoint/PPTXToPDFUA.cshtml.cs +++ /dev/null @@ -1,115 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; -using Syncfusion.PresentationRenderer; -using Syncfusion.Pdf; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class PPTXToPDFUA : PageModel -{ - public void OnGet() - { - - } - public string Message { get; set; } - private readonly IWebHostEnvironment _hostingEnvironment; - - public PPTXToPDFUA(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string button, string view) - { - if (button == null) - return null; - // return View(); - Stream stream = GetPresentation(); - if (stream != null) - { - try - { - string output = (Request.Form.Files != null && Request.Form.Files.Count != 0) - ? Path.GetFileNameWithoutExtension(Request.Form.Files[0].FileName) - : "PPTXToPDF_Pdf_UA"; - IPresentation presentation = Presentation.Open(stream); - stream.Dispose(); - stream = null; - - // Create new instance for PresentationToPdfConverterSettings - PresentationToPdfConverterSettings settings = new PresentationToPdfConverterSettings(); - //Sets true to preserve document structured tags in the converted PDF document. - settings.AutoTag = true; - - //Convert the PowerPoint document to PDF document. - PdfDocument pdfDocument = PresentationToPdfConverter.Convert(presentation, settings); - - MemoryStream pdfStream = new MemoryStream(); - - //Save the converted PDF document to Memory stream. - pdfDocument.Save(pdfStream); - pdfStream.Position = 0; - - //Close the PDF document. - pdfDocument.Close(true); - - //Close the PowerPoint Presentation. - presentation.Close(); - - //Initialize the file stream to download the converted PDF. - FileStreamResult fileStreamResult = new FileStreamResult(pdfStream, "application/pdf"); - //Set the file name. - fileStreamResult.FileDownloadName = output + ".pdf"; - - return fileStreamResult; - } - catch - { - Message = - string.Format( - "The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - } - } - - return null; - // return View(); - } - /// - /// This method will returns the Input Presentation document or the Default Template Presentation document as Stream - /// - private Stream GetPresentation() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".pptx") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - Message = string.Format("Please choose PowerPoint Presentation document (PPTX) to convert as PDF"); - return null; - } - } - else - { - //Opens an existing document from stream - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/PowerPoint/Template.pptx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } -} \ No newline at end of file diff --git a/Pages/PowerPoint/Slide.cshtml b/Pages/PowerPoint/Slide.cshtml deleted file mode 100644 index daa44700..00000000 --- a/Pages/PowerPoint/Slide.cshtml +++ /dev/null @@ -1,54 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.Slide - -@using Syncfusion.EJ2 -@{ var Title = "Essential Presentation (Presentation) : Slide : Syncfusion"; } - -@section ActionDescription{ - This sample demonstrates how to create slides with simple text, table and image in a PowerPoint presentation. -} - -@section Description{ - Features: -
-
-
    -
  • Support for 9 pre-defined slide layouts while creating new slides.
  • -
  • Add, rearrange, duplicate, and delete slides in PowerPoint presentation.
  • -
  • Slides can be copied and pasted to the same or different PowerPoint presentation.
  • -
  • Slides can be formatted with variety of formatting options equivalent to Microsoft PowerPoint.
  • -
-
-} -@section ControlsSection{ -
- @{ - Html.BeginForm("slide", "powerpoint", FormMethod.Post); - { -
-

- Click the button to view a PowerPoint presentation generated by Essential Presentation. Please note - that Microsoft PowerPoint viewer or its equivalent is required to view the resultant document. -

-
-
-
-
- -
-
-
- Html.EndForm(); - } - } -
-} -@section Title{ - ASP.NET Core PowerPoint (Presentation) library - Slide Example - Syncfusion Demos - } -@section Meta{ - - } -@section Header{ -

Example of Slide in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/Slide.cshtml.cs b/Pages/PowerPoint/Slide.cshtml.cs deleted file mode 100644 index 9eec5abd..00000000 --- a/Pages/PowerPoint/Slide.cshtml.cs +++ /dev/null @@ -1,573 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class Slide : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public Slide(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string button) - { - if (button == null) - return null; - string basePath = _hostingEnvironment.WebRootPath; - IPresentation presentation = Presentation.Open(basePath + @"/PowerPoint/Slides.pptx"); - //New Instance of PowerPoint is Created.[Equivalent to launching MS PowerPoint with no slides]. - - //Method call to create slides - CreateFirstSlide(presentation); - CreateSecondtwo(presentation); - CreateThirdSlide(presentation); - CreateFourthSlide(presentation); - - MemoryStream ms = new MemoryStream(); - - //Saves the presentation to the memory stream. - presentation.Save(ms); - //Set the position of the stream to beginning. - ms.Position = 0; - - //Initialize the file stream to download the presentation. - FileStreamResult fileStreamResult = new FileStreamResult(ms, - "application/vnd.openxmlformats-officedocument.presentationml.presentation"); - //Set the file name. - fileStreamResult.FileDownloadName = "Slide.pptx"; - - return fileStreamResult; - } - - #region Slide - - #region Slide1 - - private void CreateFirstSlide(IPresentation presentation) - { - ISlide slide1 = presentation.Slides[0]; - IShape shape1 = slide1.Shapes[0] as IShape; - shape1.Left = 1.5 * 72; - shape1.Top = 1.94 * 72; - shape1.Width = 10.32 * 72; - shape1.Height = 2 * 72; - - ITextBody textFrame1 = shape1.TextBody; - IParagraphs paragraphs1 = textFrame1.Paragraphs; - IParagraph paragraph1 = paragraphs1.Add(); - ITextPart textPart1 = paragraph1.AddTextPart(); - paragraphs1[0].IndentLevelNumber = 0; - textPart1.Text = "Essential Presentation"; - textPart1.Font.FontName = "HelveticaNeue LT 65 Medium"; - textPart1.Font.CapsType = TextCapsType.All; - textPart1.Font.FontSize = 48; - textPart1.Font.Bold = true; - slide1.Shapes.RemoveAt(1); - } - - #endregion - - # region Slide2 - - private void CreateSecondtwo(IPresentation presentation) - { - ISlide slide2 = presentation.Slides.Add(SlideLayoutType.SectionHeader); - IShape shape1 = slide2.Shapes[0] as IShape; - shape1.Left = 0.77 * 72; - shape1.Top = 0.32 * 72; - shape1.Width = 7.96 * 72; - shape1.Height = 0.99 * 72; - - ITextBody textFrame1 = shape1.TextBody; - - //Instance to hold paragraphs in textframe - IParagraphs paragraphs1 = textFrame1.Paragraphs; - IParagraph paragraph1 = paragraphs1.Add(); - ITextPart textpart1 = paragraph1.AddTextPart(); - paragraphs1[0].HorizontalAlignment = HorizontalAlignmentType.Left; - textpart1.Text = "Slide with simple text"; - textpart1.Font.FontName = "Helvetica CE 35 Thin"; - textpart1.Font.FontSize = 40; - - IShape shape2 = slide2.Shapes[1] as IShape; - shape2.Left = 1.21 * 72; - shape2.Top = 1.66 * 72; - shape2.Width = 10.08 * 72; - shape2.Height = 4.93 * 72; - - ITextBody textFrame2 = shape2.TextBody; - - //Instance to hold paragraphs in textframe - IParagraphs paragraphs2 = textFrame2.Paragraphs; - IParagraph paragraph2 = paragraphs2.Add(); - paragraph2.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextPart textpart2 = paragraph2.AddTextPart(); - textpart2.Text = - "Lorem ipsum dolor sit amet, lacus amet amet ultricies. Quisque mi venenatis morbi libero, orci dis, mi ut et class porta, massa ligula magna enim, aliquam orci vestibulum tempus."; - textpart2.Font.FontName = "Calibri (Body)"; - textpart2.Font.FontSize = 15; - textpart2.Font.Color = ColorObject.Black; - - //Instance to hold paragraphs in textframe - IParagraph paragraph3 = paragraphs2.Add(); - paragraph3.HorizontalAlignment = HorizontalAlignmentType.Left; - textpart1 = paragraph3.AddTextPart(); - textpart1.Text = - "Turpis facilisis vitae consequat, cum a a, turpis dui consequat massa in dolor per, felis non amet."; - textpart1.Font.FontName = "Calibri (Body)"; - textpart1.Font.FontSize = 15; - textpart1.Font.Color = ColorObject.Black; - - //Instance to hold paragraphs in textframe - IParagraph paragraph4 = paragraphs2.Add(); - paragraph4.HorizontalAlignment = HorizontalAlignmentType.Left; - textpart1 = paragraph4.AddTextPart(); - textpart1.Text = - "Auctor eleifend in omnis elit vestibulum, donec non elementum tellus est mauris, id aliquam, at lacus, arcu pretium proin lacus dolor et. Eu tortor, vel ultrices amet dignissim mauris vehicula."; - textpart1.Font.FontName = "Calibri (Body)"; - textpart1.Font.FontSize = 15; - textpart1.Font.Color = ColorObject.Black; - - //Instance to hold paragraphs in textframe - IParagraph paragraph5 = paragraphs2.Add(); - paragraph5.HorizontalAlignment = HorizontalAlignmentType.Left; - textpart1 = paragraph5.AddTextPart(); - textpart1.Text = - "Vestibulum duis integer diam mi libero felis, sollicitudin id dictum etiam blandit lacus, ac condimentum magna dictumst interdum et,"; - textpart1.Font.FontName = "Calibri (Body)"; - textpart1.Font.FontSize = 15; - textpart1.Font.Color = ColorObject.Black; - - //Instance to hold paragraphs in textframe - IParagraph paragraph6 = paragraphs2.Add(); - paragraph6.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextPart textpart3 = paragraph6.AddTextPart(); - textpart1.Text = - "nam commodo mi habitasse enim fringilla nunc, amet aliquam sapien per tortor luctus. Conubia voluptates at nunc, congue lectus, malesuada nulla."; - textpart1.Font.Color = ColorObject.White; - textpart1.Font.FontName = "Calibri (Body)"; - textpart1.Font.FontSize = 15; - textpart1.Font.Color = ColorObject.Black; - - //Instance to hold paragraphs in textframe - IParagraph paragraph7 = paragraphs2.Add(); - paragraph7.HorizontalAlignment = HorizontalAlignmentType.Left; - textpart1 = paragraph7.AddTextPart(); - textpart1.Text = - "Rutrum quo morbi, feugiat sed mi turpis, ac cursus integer ornare dolor. Purus dui in et tincidunt, sed eros pede adipiscing tellus, est suscipit nulla,"; - textpart1.Font.FontName = "Calibri (Body)"; - textpart1.Font.FontSize = 15; - textpart1.Font.Color = ColorObject.Black; - - //Instance to hold paragraphs in textframe - IParagraph paragraph8 = paragraphs2.Add(); - paragraph8.HorizontalAlignment = HorizontalAlignmentType.Left; - textpart1 = paragraph8.AddTextPart(); - textpart1.Text = - "Auctor eleifend in omnis elit vestibulum, donec non elementum tellus est mauris, id aliquam, at lacus, arcu pretium proin lacus dolor et. Eu tortor, vel ultrices amet dignissim mauris vehicula."; - textpart1.Font.FontName = "Calibri (Body)"; - textpart1.Font.FontSize = 15; - textpart1.Font.Color = ColorObject.Black; - - //Instance to hold paragraphs in textframe - IParagraph paragraph9 = paragraphs2.Add(); - paragraph9.HorizontalAlignment = HorizontalAlignmentType.Left; - textpart1 = paragraph9.AddTextPart(); - textpart1.Text = - "arcu nec fringilla vel aliquam, mollis lorem rerum hac vestibulum ante nullam. Volutpat a lectus, lorem pulvinar quis. Lobortis vehicula in imperdiet orci urna."; - textpart1.Font.FontName = "Calibri (Body)"; - textpart1.Font.Color = ColorObject.Black; - textpart1.Font.FontSize = 15; - - } - - # endregion - - # region Slide3 - - private void CreateThirdSlide(IPresentation presentation) - { - ISlide slide2 = presentation.Slides.Add(SlideLayoutType.TwoContent); - IShape shape1 = slide2.Shapes[0] as IShape; - shape1.Left = 0.36 * 72; - shape1.Top = 0.51 * 72; - shape1.Width = 11.32 * 72; - shape1.Height = 1.06 * 72; - - //Add textframe in shape - ITextBody textFrame1 = shape1.TextBody; - - //Instance to hold paragraphs in textframe - IParagraphs paragraphs1 = textFrame1.Paragraphs; - paragraphs1.Add(); - IParagraph paragraph1 = paragraphs1[0]; - ITextPart textpart1 = paragraph1.AddTextPart(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Left; - - //Assign value to textpart - textpart1.Text = "Slide with Image"; - textpart1.Font.FontName = "Helvetica CE 35 Thin"; - - //Add a shape in slide - IShape shape2 = slide2.Shapes[1] as IShape; - shape2.Left = 8.03 * 72; - shape2.Top = 1.96 * 72; - shape2.Width = 4.39 * 72; - shape2.Height = 4.53 * 72; - ITextBody textFrame2 = shape2.TextBody; - - //Instance to hold paragraphs in textframe - IParagraphs paragraphs2 = textFrame2.Paragraphs; - IParagraph paragraph2 = paragraphs2.Add(); - ITextPart textpart2 = paragraph2.AddTextPart(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Left; - - textpart2.Text = - "Lorem ipsum dolor sit amet, lacus amet amet ultricies. Quisque mi venenatis morbi libero, orci dis, mi ut et class porta, massa ligula magna enim, aliquam orci vestibulum tempus."; - textpart2.Font.FontName = "Helvetica CE 35 Thin"; - textpart2.Font.FontSize = 16; - - IParagraph paragraph3 = paragraphs2.Add(); - textpart2 = paragraph3.AddTextPart(); - paragraph3.HorizontalAlignment = HorizontalAlignmentType.Left; - - textpart2.Text = - "Turpis facilisis vitae consequat, cum a a, turpis dui consequat massa in dolor per, felis non amet."; - textpart2.Font.FontName = "Helvetica CE 35 Thin"; - textpart2.Font.FontSize = 16; - - - IParagraph paragraph4 = paragraphs2.Add(); - textpart2 = paragraph4.AddTextPart(); - paragraph4.HorizontalAlignment = HorizontalAlignmentType.Left; - - textpart2.Text = - "Auctor eleifend in omnis elit vestibulum, donec non elementum tellus est mauris, id aliquam, at lacus, arcu pretium proin lacus dolor et. Eu tortor, vel ultrices amet dignissim mauris vehicula."; - textpart2.Font.FontName = "Helvetica CE 35 Thin"; - textpart2.Font.FontSize = 16; - - IShape shape3 = (IShape)slide2.Shapes[2]; - slide2.Shapes.RemoveAt(2); - - //Add a picture to the slide - string basePath = _hostingEnvironment.WebRootPath; - FileStream imageStream = new FileStream(basePath + @"/PowerPoint/tablet.jpg", FileMode.Open, FileAccess.Read); - - IPicture picture1 = slide2.Shapes.AddPicture(imageStream, 0.81 * 72, 1.96 * 72, 6.63 * 72, 4.43 * 72); - imageStream.Dispose(); - } - - # endregion - - # region Slide4 - - private void CreateFourthSlide(IPresentation presentation) - { - - ISlide slide4 = presentation.Slides.Add(SlideLayoutType.TwoContent); - IShape shape1 = slide4.Shapes[0] as IShape; - shape1.Left = 0.51 * 72; - shape1.Top = 0.34 * 72; - shape1.Width = 11.32 * 72; - shape1.Height = 1.06 * 72; - - ITextBody textFrame1 = shape1.TextBody; - - //Instance to hold paragraphs in textframe - IParagraphs paragraphs1 = textFrame1.Paragraphs; - paragraphs1.Add(); - IParagraph paragraph1 = paragraphs1[0]; - ITextPart textpart1 = paragraph1.AddTextPart(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Left; - - //Assigns value to textpart - textpart1.Text = "Slide with Table"; - textpart1.Font.FontName = "Helvetica CE 35 Thin"; - - IShape shape2 = slide4.Shapes[1] as IShape; - slide4.Shapes.Remove(shape2); - - ITable table = (ITable)slide4.Shapes.AddTable(6, 6, 0.81 * 72, 2.14 * 72, 11.43 * 72, 3.8 * 72); - table.Rows[0].Height = 0.85 * 72; - table.Rows[1].Height = 0.42 * 72; - table.Rows[2].Height = 0.85 * 72; - table.Rows[3].Height = 0.85 * 72; - table.Rows[4].Height = 0.85 * 72; - table.Rows[5].Height = 0.85 * 72; - table.HasBandedRows = true; - table.HasHeaderRow = true; - table.HasBandedColumns = false; - table.BuiltInStyle = BuiltInTableStyle.MediumStyle2Accent1; - - ICell cell1 = table.Rows[0].Cells[0]; - ITextBody textFrame2 = cell1.TextBody; - IParagraph paragraph2 = textFrame2.Paragraphs.Add(); - paragraph2.HorizontalAlignment = HorizontalAlignmentType.Center; - ITextPart textPart2 = paragraph2.AddTextPart(); - textPart2.Text = "ID"; - - ICell cell2 = table.Rows[0].Cells[1]; - ITextBody textFrame3 = cell2.TextBody; - IParagraph paragraph3 = textFrame3.Paragraphs.Add(); - paragraph3.HorizontalAlignment = HorizontalAlignmentType.Center; - ITextPart textPart3 = paragraph3.AddTextPart(); - textPart3.Text = "Company Name"; - - ICell cell3 = table.Rows[0].Cells[2]; - ITextBody textFrame4 = cell3.TextBody; - IParagraph paragraph4 = textFrame4.Paragraphs.Add(); - paragraph4.HorizontalAlignment = HorizontalAlignmentType.Center; - ITextPart textPart4 = paragraph4.AddTextPart(); - textPart4.Text = "Contact Name"; - - ICell cell4 = table.Rows[0].Cells[3]; - ITextBody textFrame5 = cell4.TextBody; - IParagraph paragraph5 = textFrame5.Paragraphs.Add(); - paragraph5.HorizontalAlignment = HorizontalAlignmentType.Center; - ITextPart textPart5 = paragraph5.AddTextPart(); - textPart5.Text = "Address"; - - ICell cell5 = table.Rows[0].Cells[4]; - ITextBody textFrame6 = cell5.TextBody; - IParagraph paragraph6 = textFrame6.Paragraphs.Add(); - paragraph6.HorizontalAlignment = HorizontalAlignmentType.Center; - ITextPart textPart6 = paragraph6.AddTextPart(); - textPart6.Text = "City"; - - ICell cell6 = table.Rows[0].Cells[5]; - ITextBody textFrame7 = cell6.TextBody; - IParagraph paragraph7 = textFrame7.Paragraphs.Add(); - paragraph7.HorizontalAlignment = HorizontalAlignmentType.Center; - ITextPart textPart7 = paragraph7.AddTextPart(); - textPart7.Text = "Country"; - - cell1 = table.Rows[1].Cells[0]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "1"; - - cell1 = table.Rows[1].Cells[1]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "New Orleans Cajun Delights"; - - cell1 = table.Rows[1].Cells[2]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "Shelley Burke"; - - cell1 = table.Rows[1].Cells[3]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "P.O. Box 78934"; - - cell1 = table.Rows[1].Cells[4]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "New Orleans"; - - cell1 = table.Rows[1].Cells[5]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "USA"; - - cell1 = table.Rows[2].Cells[0]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "2"; - - cell1 = table.Rows[2].Cells[1]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "Cooperativa de Quesos 'Las Cabras"; - - cell1 = table.Rows[2].Cells[2]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "Antonio del Valle Saavedra"; - - cell1 = table.Rows[2].Cells[3]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "Calle del Rosal 4"; - - cell1 = table.Rows[2].Cells[4]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "Oviedo"; - - cell1 = table.Rows[2].Cells[5]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "Spain"; - - cell1 = table.Rows[3].Cells[0]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "3"; - - cell1 = table.Rows[3].Cells[1]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "Mayumi"; - - cell1 = table.Rows[3].Cells[2]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "Mayumi Ohno"; - - cell1 = table.Rows[3].Cells[3]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "92 Setsuko Chuo-ku"; - - cell1 = table.Rows[3].Cells[4]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "Osaka"; - - cell1 = table.Rows[3].Cells[5]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "Japan"; - - cell1 = table.Rows[4].Cells[0]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "4"; - - cell1 = table.Rows[4].Cells[1]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "Pavlova, Ltd."; - - cell1 = table.Rows[4].Cells[2]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "Ian Devling"; - - cell1 = table.Rows[4].Cells[3]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "74 Rose St. Moonie Ponds"; - - cell1 = table.Rows[4].Cells[4]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "Melbourne"; - - cell1 = table.Rows[4].Cells[5]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "Australia"; - - cell1 = table.Rows[5].Cells[0]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "5"; - - cell1 = table.Rows[5].Cells[1]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "Specialty Biscuits, Ltd."; - - cell1 = table.Rows[5].Cells[2]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "Peter Wilson"; - - cell1 = table.Rows[5].Cells[3]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "29 King's Way"; - - cell1 = table.Rows[5].Cells[4]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "Manchester"; - - cell1 = table.Rows[5].Cells[5]; - textFrame1 = cell1.TextBody; - paragraph1 = textFrame1.Paragraphs.Add(); - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - textpart1 = paragraph1.AddTextPart(); - textpart1.Text = "UK"; - - slide4.Shapes.RemoveAt(1); - } - #endregion - #endregion -} \ No newline at end of file diff --git a/Pages/PowerPoint/SlideTransition.cshtml b/Pages/PowerPoint/SlideTransition.cshtml deleted file mode 100644 index 93581c42..00000000 --- a/Pages/PowerPoint/SlideTransition.cshtml +++ /dev/null @@ -1,67 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.SlideTransition - -@using Syncfusion.EJ2 -@{ var Title = "Essential Presentation (Presentation) : SlideTransition : Syncfusion"; } - -@section ActionDescription{ - This sample demonstrates how to create slide transition effects in PowerPoint presentation. -} - -@section Description{ - Features: -
-
-
- The below transition effects are supported as equivalent to Microsoft PowerPoint: -
    -
  • Subtle
  • -
  • Exciting
  • -
  • Dynamic Content
  • -
-
-
-
- The below transition options are supported as equivalent to Microsoft PowerPoint: -
    -
  • Effect options
  • -
  • Advance On Time
  • -
  • Advance Mouse On Click
  • -
  • Transition Duration
  • -
-
-
-} - -@section ControlsSection{ -
- @{ - Html.BeginForm("slidetransition", "powerpoint", FormMethod.Post); - { -
-

- Click the button to view a PowerPoint presentation generated by Essential Presentation. Please note - that Microsoft PowerPoint viewer or its equivalent is required to view the resultant document. -

-
-
-
-
- -
-
-
- Html.EndForm(); - } - } -
-} -@section Title{ - ASP.NET Core PowerPoint (Presentation) library - Slide Transition Example - Syncfusion Demos - } -@section Meta{ - - } -@section Header{ -

Example of Slide Transition in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/SlideTransition.cshtml.cs b/Pages/PowerPoint/SlideTransition.cshtml.cs deleted file mode 100644 index 15f251d5..00000000 --- a/Pages/PowerPoint/SlideTransition.cshtml.cs +++ /dev/null @@ -1,108 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class SlideTransition : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public SlideTransition(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string button) - { - if (button == null) - return null; - // return View(); - //Opens the presentation document as stream - string basePath = _hostingEnvironment.WebRootPath; - IPresentation presentation = Presentation.Open(basePath + @"/PowerPoint/Transition.pptx"); - //PowerPoint instance is Created. - - //Method call to create transition in slides - CreateTransition(presentation); - - MemoryStream ms = new MemoryStream(); - - //Saves the presentation to the memory stream. - presentation.Save(ms); - //Set the position of the stream to beginning. - ms.Position = 0; - - //Initialize the file stream to download the presentation. - FileStreamResult fileStreamResult = new FileStreamResult(ms, - "application/vnd.openxmlformats-officedocument.presentationml.presentation"); - //Set the file name. - fileStreamResult.FileDownloadName = "SlideTransition.pptx"; - - return fileStreamResult; - } - - #region Slide1 - - private void CreateTransition(IPresentation presentation) - { - //Get the first slide from the presentation - ISlide slide1 = presentation.Slides[0]; - - // Add the 'Wheel' transition effect to the first slide - slide1.SlideTransition.TransitionEffect = TransitionEffect.Wheel; - - // Get the second slide from the presentation - ISlide slide2 = presentation.Slides[1]; - - // Add the 'Checkerboard' transition effect to the second slide - slide2.SlideTransition.TransitionEffect = TransitionEffect.Checkerboard; - - // Add the subtype to the transition effect - slide2.SlideTransition.TransitionEffectOption = TransitionEffectOption.Across; - - // Apply the value to transition mouse on click parameter - slide2.SlideTransition.TriggerOnClick = true; - - // Get the third slide from the presentation - ISlide slide3 = presentation.Slides[2]; - - // Add the 'Orbit' transition effect for slide - slide3.SlideTransition.TransitionEffect = TransitionEffect.Orbit; - - // Add the speed for transition - slide3.SlideTransition.Speed = TransitionSpeed.Fast; - - // Get the fourth slide from the presentation - ISlide slide4 = presentation.Slides[3]; - - // Add the 'Uncover' transition effect to the slide - slide4.SlideTransition.TransitionEffect = TransitionEffect.Uncover; - - // Apply the value to advance on time for slide - slide4.SlideTransition.TriggerOnTimeDelay = true; - - // Assign the advance on time value - slide4.SlideTransition.TimeDelay = 5; - - // Get the fifth slide from the presentation - ISlide slide5 = presentation.Slides[4]; - - // Add the 'PageCurlDouble' transition effect to the slide - slide5.SlideTransition.TransitionEffect = TransitionEffect.PageCurlDouble; - - // Add the duration value for the transition effect - slide5.SlideTransition.Duration = 5; - } - #endregion -} \ No newline at end of file diff --git a/Pages/PowerPoint/SmartArt.cshtml b/Pages/PowerPoint/SmartArt.cshtml deleted file mode 100644 index 6db0bdf0..00000000 --- a/Pages/PowerPoint/SmartArt.cshtml +++ /dev/null @@ -1,52 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.SmartArt - -@using Syncfusion.EJ2 -@{ var Title = "Essential Presentation (Presentation) : SmartArt : Syncfusion"; } - -@section ActionDescription{ - This sample demonstrates how to create SmartArt diagram in a PowerPoint presentation. -} - -@section Description{ - Features: -
-
-
    -
  • Create and edit 134 default SmartArt diagram equivalent to Microsoft PowerPoint.
  • -
  • Add, modify and remove nodes of the SmartArt diagram.
  • -
-
-} -@section ControlsSection{ -
- @{ - Html.BeginForm("smartart", "powerpoint", FormMethod.Post); - { -
-

- Click the button to view a PowerPoint presentation generated by Essential Presentation. Please note - that Microsoft PowerPoint viewer or its equivalent is required to view the resultant document. -

-
-
-
-
- -
-
-
- Html.EndForm(); - } - } -
-} -@section Title{ - ASP.NET Core PowerPoint (Presentation) library - SmartArt Example - Syncfusion Demos - } -@section Meta{ - - } -@section Header{ -

Example of SmartArt in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/SmartArt.cshtml.cs b/Pages/PowerPoint/SmartArt.cshtml.cs deleted file mode 100644 index e1800f1c..00000000 --- a/Pages/PowerPoint/SmartArt.cshtml.cs +++ /dev/null @@ -1,128 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class SmartArt : PageModel -{ - public void OnGet() - { - - } - - [HttpPost] - public ActionResult OnPost(string button) - { - if (button == null) - return null; - // return View(); - IPresentation presentation = Presentation.Create(); - //New Instance of PowerPoint is Created.[Equivalent to launching MS PowerPoint with no slides]. - - //Method call to edit slides - CreateSlide1(presentation); - CreateSlide2(presentation); - CreateSlide3(presentation); - CreateSlide4(presentation); - - MemoryStream ms = new MemoryStream(); - - //Saves the presentation to the memory stream. - presentation.Save(ms); - //Set the position of the stream to beginning. - ms.Position = 0; - - //Initialize the file stream to download the presentation. - FileStreamResult fileStreamResult = new FileStreamResult(ms, - "application/vnd.openxmlformats-officedocument.presentationml.presentation"); - //Set the file name. - fileStreamResult.FileDownloadName = "SmartArt.pptx"; - - return fileStreamResult; - } - - #region Slide - - #region Slide1 - - #region Slide1 - private void CreateSlide1(IPresentation presentation) - { - ISlide slide1 = presentation.Slides.Add(SlideLayoutType.Blank); - ISmartArt smartArt = slide1.Shapes.AddSmartArt(SmartArtType.BasicBlockList, 100, 100, 640, 427); - ISmartArtNode node1 = smartArt.Nodes[0]; - node1.TextBody.AddParagraph("One"); - ISmartArtNode node2 = smartArt.Nodes[1]; - node2.TextBody.AddParagraph("Two"); - ISmartArtNode node3 = smartArt.Nodes[2]; - node3.TextBody.AddParagraph("Three"); - ISmartArtNode node4 = smartArt.Nodes[3]; - node4.TextBody.AddParagraph("Four"); - ISmartArtNode node5 = smartArt.Nodes[4]; - node5.TextBody.AddParagraph("Five"); - } - #endregion - - # region Slide2 - private void CreateSlide2(IPresentation presentation) - { - ISlide slide = presentation.Slides.Add(SlideLayoutType.Blank); - ISmartArt smartArt = slide.Shapes.AddSmartArt(SmartArtType.StepUpProcess, 100, 100, 640, 427); - ISmartArtNode node1 = smartArt.Nodes[0]; - node1.TextBody.AddParagraph("First"); - ISmartArtNode node2 = smartArt.Nodes[1]; - node2.TextBody.AddParagraph("Second"); - ISmartArtNode node3 = smartArt.Nodes[2]; - node3.TextBody.AddParagraph("Three"); - } - #endregion - - # region Slide3 - private void CreateSlide3(IPresentation presentation) - { - ISlide slide = presentation.Slides.Add(SlideLayoutType.Blank); - ISmartArt smartArt = slide.Shapes.AddSmartArt(SmartArtType.BasicCycle, 100, 100, 640, 427); - ISmartArtNode node1 = smartArt.Nodes[0]; - node1.TextBody.AddParagraph("Requirement"); - ISmartArtNode node2 = smartArt.Nodes[1]; - node2.TextBody.AddParagraph("Analyzing"); - ISmartArtNode node3 = smartArt.Nodes[2]; - node3.TextBody.AddParagraph("Estimation"); - ISmartArtNode node4 = smartArt.Nodes[3]; - node4.TextBody.AddParagraph("Implementing"); - ISmartArtNode node5 = smartArt.Nodes[4]; - node5.TextBody.AddParagraph("Testing"); - } - #endregion - - # region Slide4 - private void CreateSlide4(IPresentation presentation) - { - ISlide slide = presentation.Slides.Add(SlideLayoutType.Blank); - ISmartArt smartArt = slide.Shapes.AddSmartArt(SmartArtType.Hierarchy, 100, 100, 640, 427); - ISmartArtNode node1 = smartArt.Nodes[0]; - node1.TextBody.AddParagraph("Grand Father"); - ISmartArtNode childNode1 = node1.ChildNodes[0]; - childNode1.TextBody.AddParagraph("Son1"); - ISmartArtNode childNode2 = node1.ChildNodes[1]; - childNode2.TextBody.AddParagraph("Son2"); - ISmartArtNode childnode1 = childNode1.ChildNodes[0]; - childnode1.TextBody.AddParagraph("Son1"); - ISmartArtNode childnode2 = childNode1.ChildNodes[1]; - childnode2.TextBody.AddParagraph("Son2"); - ISmartArtNode childnode2s1 = childNode2.ChildNodes[0]; - childnode2s1.TextBody.AddParagraph("Son1"); - } - - #endregion - #endregion - #endregion -} \ No newline at end of file diff --git a/Pages/PowerPoint/Table.cshtml b/Pages/PowerPoint/Table.cshtml deleted file mode 100644 index 410b5d49..00000000 --- a/Pages/PowerPoint/Table.cshtml +++ /dev/null @@ -1,55 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.Table - -@using Syncfusion.EJ2 -@{ var Title = "Essential Presentation (Presentation) : Table : Syncfusion"; } - -@section ActionDescription{ - This sample demonstrates how to add tables in a PowerPoint presentation. -} - -@section Description{ - Features: -
-
-
    -
  • Format tables with 6 pre-defined table style options to format the entire rows and columns.
  • -
  • Format tables with 74 pre-defined table styles to change the borders and shading of the table.
  • -
  • Create, modify, and format tables to keep data organized.
  • -
  • Cell and row-level operations like adding, inserting, deleting of rows are supported.
  • -
  • Built-in table styles are available equivalent to Microsoft PowerPoint table styles.
  • -
-
-} -@section ControlsSection{ -
- @{ - Html.BeginForm("table", "powerpoint", FormMethod.Post); - { -
-

- Click the button to view a PowerPoint presentation generated by Essential Presentation. Please note - that Microsoft PowerPoint viewer or its equivalent is required to view the resultant document. -

-
-
-
-
- -
-
-
- Html.EndForm(); - } - } -
-} -@section Title{ - ASP.NET Core PowerPoint (Presentation) library - Table Example - Syncfusion Demos - } -@section Meta{ - - } -@section Header{ -

Example of Table in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/Table.cshtml.cs b/Pages/PowerPoint/Table.cshtml.cs deleted file mode 100644 index 7cce4f94..00000000 --- a/Pages/PowerPoint/Table.cshtml.cs +++ /dev/null @@ -1,1686 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class Table : PageModel -{ - public void OnGet() - { - - } - [HttpPost] - public ActionResult OnPost(string button) - { - if (button == null) - return null; - // return View(); - //New Instance of PowerPoint is Created.[Equivalent to launching MS PowerPoint with no slides]. - IPresentation presentation = Presentation.Create(); - //Method call to create slides in presentation. - CreateSlide(presentation); - MemoryStream ms = new MemoryStream(); - - //Saves the presentation to the memory stream. - presentation.Save(ms); - //Set the position of the stream to beginning. - ms.Position = 0; - - //Initialize the file stream to download the presentation. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/vnd.openxmlformats-officedocument.presentationml.presentation"); - //Set the file name. - fileStreamResult.FileDownloadName = "Table.pptx"; - - return fileStreamResult; - } - # region Slide - - private void CreateSlide(IPresentation presentation) - { - //Adding Title Slide to the first slide of the Presentation. - ISlide slide2 = presentation.Slides.Add(SlideLayoutType.TitleOnly); - IShape shape1 = slide2.Shapes[0] as IShape; - shape1.Left = 1.17 * 72; - shape1.Top = 0; - shape1.Width = 11 * 72; - shape1.Height = 1.76 * 72; - ITextBody textFrame1 = shape1.TextBody; - IParagraphs paragraphs1 = textFrame1.Paragraphs; - paragraphs1.Add(); - IParagraph paragraph1 = paragraphs1[0]; - paragraph1.HorizontalAlignment = HorizontalAlignmentType.Center; - - //Instance to hold textparts in paragraph. - ITextParts textParts1 = paragraph1.TextParts; - textParts1.Add(); - ITextPart textPart1 = textParts1[0]; - textPart1.Text = "Target "; - ; - IFont font1 = textPart1.Font; - font1.FontName = "Arial"; - font1.FontSize = 28; - font1.Bold = true; - font1.CapsType = TextCapsType.All; - textParts1.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart2 = textParts1[1]; - textPart2.Text = "VS "; - IFont font2 = textPart2.Font; - font2.FontName = "Arial"; - font2.FontSize = 18; - textParts1.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart3 = textParts1[2]; - - textPart3.Text = "PERFORMANCE"; - IFont font3 = textPart3.Font; - font3.FontName = "Arial"; - font3.FontSize = 28; - font3.Bold = true; - - //To add a new table in slide and set its stylepreset - ITable table = slide2.Shapes.AddTable(10, 9, 0.86 * 72, 1.33 * 72, 11.90 * 72, 5.26 * 72); - table.BuiltInStyle = BuiltInTableStyle.MediumStyle2Accent6; - - - //Instance to hold rows in table - IRows rows = table.Rows; - IRow row1 = rows[0]; - row1.Height = 81.44; - - //To set text alignment type inside cell - ICell cell11 = row1.Cells[0]; - cell11.TextBody.VerticalAlignment = VerticalAlignmentType.Middle; - - //To add a paragraph inside cell - IParagraphs paragraphs11 = cell11.TextBody.Paragraphs; - paragraphs11.Add(); - IParagraph paragraph11 = paragraphs11[0]; - paragraph11.HorizontalAlignment = HorizontalAlignmentType.Center; - ITextParts textParts11 = paragraph11.TextParts; - textParts11.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart11 = textParts11[0]; - textPart11.Text = "Month"; - IFont font11 = textPart11.Font; - font11.FontName = "Arial"; - font11.FontSize = 14; - font11.Bold = true; - - ICell cell12 = row1.Cells[1]; - cell12.TextBody.VerticalAlignment = VerticalAlignmentType.Middle; - - //To add a paragraph inside cell - IParagraphs paragraphs12 = cell12.TextBody.Paragraphs; - paragraphs12.Add(); - IParagraph paragraph12 = paragraphs12[0]; - paragraph12.HorizontalAlignment = HorizontalAlignmentType.Center; - ITextParts textParts12 = paragraph12.TextParts; - textParts12.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart12 = textParts12[0]; - textPart12.Text = "Product A"; - IFont font12 = textPart12.Font; - font12.FontName = "Arial"; - font12.FontSize = 14; - font12.Bold = true; - - //To set text alignment type inside cell - ICell cell13 = row1.Cells[2]; - cell13.TextBody.VerticalAlignment = VerticalAlignmentType.Middle; - - //To add a paragraph inside cell - IParagraphs paragraphs13 = cell13.TextBody.Paragraphs; - paragraphs13.Add(); - IParagraph paragraph13 = paragraphs13[0]; - paragraph13.HorizontalAlignment = HorizontalAlignmentType.Center; - ITextParts textParts13 = paragraph13.TextParts; - textParts13.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart13 = textParts13[0]; - textPart13.Text = "Product B"; - IFont font13 = textPart13.Font; - font13.FontName = "Arial"; - font13.FontSize = 14; - font13.Bold = true; - - ICell cell14 = row1.Cells[3]; - cell14.TextBody.VerticalAlignment = VerticalAlignmentType.Middle; - - //To add a paragraph inside cell - IParagraphs paragraphs14 = cell14.TextBody.Paragraphs; - paragraphs14.Add(); - IParagraph paragraph14 = paragraphs14[0]; - paragraph14.HorizontalAlignment = HorizontalAlignmentType.Center; - ITextParts textParts14 = paragraph14.TextParts; - textParts14.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart14 = textParts14[0]; - textPart14.Text = "Product C"; - IFont font14 = textPart14.Font; - font14.FontName = "Arial"; - font14.FontSize = 14; - font14.Bold = true; - - ICell cell15 = row1.Cells[4]; - cell15.TextBody.VerticalAlignment = VerticalAlignmentType.Middle; - - //To add a paragraph inside cell - IParagraphs paragraphs15 = cell15.TextBody.Paragraphs; - paragraphs15.Add(); - IParagraph paragraph15 = paragraphs15[0]; - paragraph15.HorizontalAlignment = HorizontalAlignmentType.Center; - ITextParts textParts15 = paragraph15.TextParts; - textParts15.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart15 = textParts15[0]; - textPart15.Text = "Product D"; - IFont font15 = textPart15.Font; - font15.FontName = "Arial"; - font15.FontSize = 14; - font15.Bold = true; - - ICell cell16 = row1.Cells[5]; - cell16.TextBody.VerticalAlignment = VerticalAlignmentType.Middle; - - //To add a paragraph inside cell - IParagraphs paragraphs16 = cell16.TextBody.Paragraphs; - paragraphs16.Add(); - IParagraph paragraph16 = paragraphs16[0]; - paragraph16.HorizontalAlignment = HorizontalAlignmentType.Center; - ITextParts textParts16 = paragraph16.TextParts; - textParts16.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart16 = textParts16[0]; - textPart16.Text = "Product E"; - IFont font16 = textPart16.Font; - font16.FontName = "Arial"; - font16.FontSize = 14; - font16.Bold = true; - - ICell cell17 = row1.Cells[6]; - cell17.TextBody.VerticalAlignment = VerticalAlignmentType.Middle; - - //To add a paragraph inside cell - IParagraphs paragraphs17 = cell17.TextBody.Paragraphs; - paragraphs17.Add(); - IParagraph paragraph17 = paragraphs17[0]; - paragraph17.HorizontalAlignment = HorizontalAlignmentType.Center; - ITextParts textParts17 = paragraph17.TextParts; - textParts17.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart17 = textParts17[0]; - textPart17.Text = "Product F"; - IFont font17 = textPart17.Font; - font17.FontName = "Arial"; - font17.FontSize = 14; - font17.Bold = true; - - ICell cell18 = row1.Cells[7]; - cell18.TextBody.VerticalAlignment = VerticalAlignmentType.Middle; - - //To add a paragraph inside cell - IParagraphs paragraphs18 = cell18.TextBody.Paragraphs; - paragraphs18.Add(); - IParagraph paragraph18 = paragraphs18[0]; - paragraph18.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts18 = paragraph18.TextParts; - textParts18.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart18 = textParts18[0]; - textPart18.Text = "Average "; - IFont font18 = textPart18.Font; - font18.FontName = "Arial"; - font18.FontSize = 14; - font18.Bold = true; - - ICell cell19 = row1.Cells[8]; - cell19.TextBody.VerticalAlignment = VerticalAlignmentType.Middle; - - //To add a paragraph inside cell - IParagraphs paragraphs19 = cell19.TextBody.Paragraphs; - paragraphs19.Add(); - IParagraph paragraph19 = paragraphs19[0]; - paragraph19.HorizontalAlignment = HorizontalAlignmentType.Center; - ITextParts textParts19 = paragraph19.TextParts; - textParts19.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart19 = textParts19[0]; - textPart19.Text = "Target"; - IFont font19 = textPart19.Font; - font19.FontName = "Arial"; - font19.FontSize = 14; - font19.Bold = true; - - IRow row2 = table.Rows[1]; - row2.Height = 34.90; - - ICell cell21 = row2.Cells[0]; - IParagraphs paragraphs21 = cell21.TextBody.Paragraphs; - - //To add a paragraph inside cell - paragraphs21.Add(); - IParagraph paragraph21 = paragraphs21[0]; - paragraph21.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts21 = paragraph21.TextParts; - textParts21.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart21 = textParts21[0]; - textPart21.Text = "Jan"; - IFont font21 = textPart21.Font; - font21.FontName = "Arial"; - font21.FontSize = 14; - - ICell cell22 = row2.Cells[1]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs22 = cell22.TextBody.Paragraphs; - paragraphs22.Add(); - IParagraph paragraph22 = paragraphs22[0]; - paragraph22.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts22 = paragraph22.TextParts; - textParts22.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart22 = textParts22[0]; - textPart22.Text = "20000"; - IFont font22 = textPart22.Font; - font22.FontName = "Arial"; - font22.FontSize = 14; - - ICell cell23 = row2.Cells[2]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs23 = cell23.TextBody.Paragraphs; - paragraphs23.Add(); - IParagraph paragraph23 = paragraphs23[0]; - paragraph23.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts23 = paragraph23.TextParts; - textParts23.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart23 = textParts23[0]; - textPart23.Text = "4200"; - IFont font23 = textPart23.Font; - font23.FontName = "Arial"; - font23.FontSize = 14; - - ICell cell24 = row2.Cells[3]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs24 = cell24.TextBody.Paragraphs; - paragraphs24.Add(); - IParagraph paragraph24 = paragraphs24[0]; - paragraph24.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts24 = paragraph24.TextParts; - textParts24.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart24 = textParts24[0]; - textPart24.Text = "8000"; - IFont font24 = textPart24.Font; - font24.FontName = "Arial"; - font24.FontSize = 14; - - ICell cell25 = row2.Cells[4]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs25 = cell25.TextBody.Paragraphs; - paragraphs25.Add(); - IParagraph paragraph25 = paragraphs25[0]; - paragraph25.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts25 = paragraph25.TextParts; - textParts25.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart25 = textParts25[0]; - textPart25.Text = "12000"; - IFont font25 = textPart25.Font; - font25.FontName = "Arial"; - font25.FontSize = 14; - - ICell cell26 = row2.Cells[5]; - - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs26 = cell26.TextBody.Paragraphs; - paragraphs26.Add(); - IParagraph paragraph26 = paragraphs26[0]; - paragraph26.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts26 = paragraph26.TextParts; - textParts26.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart26 = textParts26[0]; - textPart26.Text = "4700"; - IFont font26 = textPart26.Font; - font26.FontName = "Arial"; - font26.FontSize = 14; - - - ICell cell27 = row2.Cells[6]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs27 = cell27.TextBody.Paragraphs; - paragraphs27.Add(); - IParagraph paragraph27 = paragraphs27[0]; - paragraph27.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts27 = paragraph27.TextParts; - textParts27.Add(); - //Creates a textpart and assigns value to it. - ITextPart textPart27 = textParts27[0]; - textPart27.Text = "15000"; - IFont font27 = textPart27.Font; - font27.FontName = "Arial"; - font27.FontSize = 14; - - ICell cell28 = row2.Cells[7]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs28 = cell28.TextBody.Paragraphs; - paragraphs28.Add(); - IParagraph paragraph28 = paragraphs28[0]; - paragraph28.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts28 = paragraph28.TextParts; - textParts28.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart28 = textParts28[0]; - textPart28.Text = "3500"; - IFont font28 = textPart28.Font; - font28.FontName = "Arial"; - font28.FontSize = 14; - - ICell cell29 = row2.Cells[8]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs29 = cell29.TextBody.Paragraphs; - paragraphs29.Add(); - IParagraph paragraph29 = paragraphs29[0]; - paragraph29.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts29 = paragraph29.TextParts; - textParts29.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart29 = textParts29[0]; - textPart29.Text = "35000"; - IFont font29 = textPart29.Font; - font29.FontName = "Arial"; - font29.FontSize = 14; - - //To set height of the row. - IRow row3 = table.Rows[2]; - row2.Height = 34.90; - - ICell cell31 = row3.Cells[0]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs31 = cell31.TextBody.Paragraphs; - paragraphs31.Add(); - IParagraph paragraph31 = paragraphs31[0]; - paragraph31.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts31 = paragraph31.TextParts; - textParts31.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart31 = textParts31[0]; - textPart31.Text = "Feb"; - IFont font31 = textPart31.Font; - font31.FontName = "Arial"; - font31.FontSize = 14; - - ICell cell32 = row3.Cells[1]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs32 = cell32.TextBody.Paragraphs; - paragraphs32.Add(); - IParagraph paragraph32 = paragraphs32[0]; - paragraph32.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts32 = paragraph32.TextParts; - textParts32.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart32 = textParts32[0]; - textPart32.Text = "8300"; - IFont font32 = textPart32.Font; - font32.FontName = "Arial"; - font32.FontSize = 14; - - ICell cell33 = row3.Cells[2]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs33 = cell33.TextBody.Paragraphs; - paragraphs33.Add(); - IParagraph paragraph33 = paragraphs33[0]; - paragraph33.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts33 = paragraph33.TextParts; - textParts33.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart33 = textParts33[0]; - textPart33.Text = "19000"; - IFont font33 = textPart33.Font; - font33.FontName = "Arial"; - font33.FontSize = 14; - - ICell cell34 = row3.Cells[3]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs34 = cell34.TextBody.Paragraphs; - paragraphs34.Add(); - IParagraph paragraph34 = paragraphs34[0]; - paragraph34.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts34 = paragraph34.TextParts; - textParts34.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart34 = textParts34[0]; - textPart34.Text = "21000"; - IFont font34 = textPart34.Font; - font34.FontName = "Arial"; - font34.FontSize = 14; - - ICell cell35 = row3.Cells[4]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs35 = cell35.TextBody.Paragraphs; - paragraphs35.Add(); - IParagraph paragraph35 = paragraphs35[0]; - paragraph35.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts35 = paragraph35.TextParts; - textParts35.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart35 = textParts35[0]; - textPart35.Text = "15230"; - IFont font35 = textPart35.Font; - font35.FontName = "Arial"; - font35.FontSize = 14; - - ICell cell36 = row3.Cells[5]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs36 = cell36.TextBody.Paragraphs; - paragraphs36.Add(); - IParagraph paragraph36 = paragraphs36[0]; - paragraph36.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts36 = paragraph36.TextParts; - textParts36.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart36 = textParts36[0]; - textPart36.Text = "7230"; - IFont font36 = textPart36.Font; - font36.FontName = "Arial"; - font36.FontSize = 14; - - ICell cell37 = row3.Cells[6]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs37 = cell37.TextBody.Paragraphs; - paragraphs37.Add(); - IParagraph paragraph37 = paragraphs37[0]; - paragraph37.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts37 = paragraph37.TextParts; - textParts37.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart37 = textParts37[0]; - textPart37.Text = "1800"; - IFont font37 = textPart37.Font; - font37.FontName = "Arial"; - font37.FontSize = 14; - - ICell cell38 = row3.Cells[7]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs38 = cell38.TextBody.Paragraphs; - paragraphs38.Add(); - IParagraph paragraph38 = paragraphs38[0]; - paragraph38.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts38 = paragraph38.TextParts; - textParts38.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart38 = textParts38[0]; - textPart38.Text = "13000"; - IFont font38 = textPart38.Font; - font38.FontName = "Arial"; - font38.FontSize = 14; - - ICell cell39 = row3.Cells[8]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs39 = cell39.TextBody.Paragraphs; - paragraphs39.Add(); - IParagraph paragraph39 = paragraphs39[0]; - paragraph39.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts39 = paragraph39.TextParts; - textParts39.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart39 = textParts39[0]; - textPart39.Text = "18000"; - IFont font39 = textPart39.Font; - font39.FontName = "Arial"; - font39.FontSize = 14; - - IRow row4 = table.Rows[3]; - row2.Height = 34.90; - - ICell cell41 = row4.Cells[0]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs41 = cell41.TextBody.Paragraphs; - paragraphs41.Add(); - IParagraph paragraph41 = paragraphs41[0]; - paragraph41.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts41 = paragraph41.TextParts; - textParts41.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart41 = textParts41[0]; - textPart41.Text = "Mar"; - IFont font41 = textPart41.Font; - font41.FontName = "Arial"; - font41.FontSize = 14; - - ICell cell42 = row4.Cells[1]; - - IParagraphs paragraphs42 = cell42.TextBody.Paragraphs; - paragraphs42.Add(); - IParagraph paragraph42 = paragraphs42[0]; - paragraph42.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts42 = paragraph42.TextParts; - textParts42.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart42 = textParts42[0]; - textPart42.Text = "4600"; - IFont font42 = textPart42.Font; - font42.FontName = "Arial"; - font42.FontSize = 14; - - ICell cell43 = row4.Cells[2]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs43 = cell43.TextBody.Paragraphs; - paragraphs43.Add(); - IParagraph paragraph43 = paragraphs43[0]; - paragraph43.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts43 = paragraph43.TextParts; - textParts43.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart43 = textParts43[0]; - textPart43.Text = "9000"; - IFont font43 = textPart43.Font; - font43.FontName = "Arial"; - font43.FontSize = 14; - - ICell cell44 = row4.Cells[3]; - - IParagraphs paragraphs44 = cell44.TextBody.Paragraphs; - paragraphs44.Add(); - IParagraph paragraph44 = paragraphs44[0]; - paragraph44.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts44 = paragraph44.TextParts; - textParts44.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart44 = textParts44[0]; - textPart44.Text = "7500"; - IFont font44 = textPart44.Font; - font44.FontName = "Arial"; - font44.FontSize = 14; - - ICell cell45 = row4.Cells[4]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs45 = cell45.TextBody.Paragraphs; - paragraphs45.Add(); - IParagraph paragraph45 = paragraphs45[0]; - paragraph45.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts45 = paragraph45.TextParts; - textParts45.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart45 = textParts45[0]; - textPart45.Text = "8000"; - IFont font45 = textPart45.Font; - font45.FontName = "Arial"; - font45.FontSize = 14; - - ICell cell46 = row4.Cells[5]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs46 = cell46.TextBody.Paragraphs; - paragraphs46.Add(); - IParagraph paragraph46 = paragraphs46[0]; - paragraph46.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts46 = paragraph46.TextParts; - textParts46.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart46 = textParts46[0]; - textPart46.Text = "30000"; - IFont font46 = textPart46.Font; - font46.FontName = "Arial"; - font46.FontSize = 14; - - ICell cell47 = row4.Cells[6]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs47 = cell47.TextBody.Paragraphs; - paragraphs47.Add(); - IParagraph paragraph47 = paragraphs47[0]; - paragraph47.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts47 = paragraph47.TextParts; - textParts47.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart47 = textParts47[0]; - textPart47.Text = "22000"; - IFont font47 = textPart47.Font; - font47.FontName = "Arial"; - font47.FontSize = 14; - - ICell cell48 = row4.Cells[7]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs48 = cell48.TextBody.Paragraphs; - paragraphs48.Add(); - IParagraph paragraph48 = paragraphs48[0]; - paragraph48.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts48 = paragraph48.TextParts; - textParts48.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart48 = textParts48[0]; - textPart48.Text = "4500"; - IFont font48 = textPart48.Font; - font48.FontName = "Arial"; - font48.FontSize = 14; - - ICell cell49 = row4.Cells[8]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs49 = cell49.TextBody.Paragraphs; - paragraphs49.Add(); - IParagraph paragraph49 = paragraphs49[0]; - paragraph49.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts49 = paragraph49.TextParts; - textParts49.Add(); - ITextPart textPart49 = textParts49[0]; - - textPart49.Text = "13200"; - IFont font49 = textPart49.Font; - font49.FontName = "Arial"; - font49.FontSize = 14; - - IRow row5 = table.Rows[4]; - row2.Height = 34.90; - - ICell cell51 = row5.Cells[0]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs51 = cell51.TextBody.Paragraphs; - paragraphs51.Add(); - IParagraph paragraph51 = paragraphs51[0]; - paragraph51.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts51 = paragraph51.TextParts; - textParts51.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart51 = textParts51[0]; - textPart51.Text = "Apr"; - IFont font51 = textPart51.Font; - font51.FontName = "Arial"; - font51.FontSize = 14; - - ICell cell52 = row5.Cells[1]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs52 = cell52.TextBody.Paragraphs; - paragraphs52.Add(); - IParagraph paragraph52 = paragraphs52[0]; - paragraph52.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts52 = paragraph52.TextParts; - textParts52.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart52 = textParts52[0]; - textPart52.Text = "3530"; - IFont font52 = textPart52.Font; - font52.FontName = "Arial"; - font52.FontSize = 14; - - ICell cell53 = row5.Cells[2]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs53 = cell53.TextBody.Paragraphs; - paragraphs53.Add(); - IParagraph paragraph53 = paragraphs53[0]; - paragraph53.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts53 = paragraph53.TextParts; - textParts53.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart53 = textParts53[0]; - textPart53.Text = "13430"; - IFont font53 = textPart53.Font; - font53.FontName = "Arial"; - font53.FontSize = 14; - - ICell cell54 = row5.Cells[3]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs54 = cell54.TextBody.Paragraphs; - paragraphs54.Add(); - IParagraph paragraph54 = paragraphs54[0]; - paragraph54.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts54 = paragraph54.TextParts; - textParts54.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart54 = textParts54[0]; - textPart54.Text = "3550"; - IFont font54 = textPart54.Font; - font54.FontName = "Arial"; - font54.FontSize = 14; - - ICell cell55 = row5.Cells[4]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs55 = cell55.TextBody.Paragraphs; - paragraphs55.Add(); - IParagraph paragraph55 = paragraphs55[0]; - paragraph55.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts55 = paragraph55.TextParts; - textParts55.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart55 = textParts55[0]; - textPart55.Text = "10670"; - IFont font55 = textPart55.Font; - font55.FontName = "Arial"; - font55.FontSize = 14; - - ICell cell56 = row5.Cells[5]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs56 = cell56.TextBody.Paragraphs; - paragraphs56.Add(); - IParagraph paragraph56 = paragraphs56[0]; - paragraph56.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts56 = paragraph56.TextParts; - textParts56.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart56 = textParts56[0]; - textPart56.Text = "27860"; - IFont font56 = textPart56.Font; - font56.FontName = "Arial"; - font56.FontSize = 14; - - ICell cell57 = row5.Cells[6]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs57 = cell57.TextBody.Paragraphs; - paragraphs57.Add(); - IParagraph paragraph57 = paragraphs57[0]; - paragraph57.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts57 = paragraph57.TextParts; - textParts57.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart57 = textParts57[0]; - textPart57.Text = "5414"; - IFont font57 = textPart57.Font; - font57.FontName = "Arial"; - font57.FontSize = 14; - - ICell cell58 = row5.Cells[7]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs58 = cell58.TextBody.Paragraphs; - paragraphs58.Add(); - IParagraph paragraph58 = paragraphs58[0]; - paragraph58.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts58 = paragraph58.TextParts; - textParts58.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart58 = textParts58[0]; - textPart58.Text = "5600"; - IFont font58 = textPart58.Font; - font58.FontName = "Arial"; - font58.FontSize = 14; - - ICell cell59 = row5.Cells[8]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs59 = cell59.TextBody.Paragraphs; - paragraphs59.Add(); - IParagraph paragraph59 = paragraphs59[0]; - paragraph59.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts59 = paragraph59.TextParts; - textParts59.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart59 = textParts59[0]; - textPart59.Text = "50000"; - IFont font59 = textPart59.Font; - font59.FontName = "Arial"; - font59.FontSize = 14; - - //To set row height - IRow row6 = table.Rows[5]; - row6.Height = 34.90; - - ICell cell61 = row6.Cells[0]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs61 = cell61.TextBody.Paragraphs; - paragraphs61.Add(); - IParagraph paragraph61 = paragraphs61[0]; - paragraph61.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts61 = paragraph61.TextParts; - textParts61.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart61 = textParts61[0]; - textPart61.Text = "May"; - IFont font61 = textPart61.Font; - font61.FontName = "Arial"; - font61.FontSize = 14; - - ICell cell62 = row6.Cells[1]; - - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs62 = cell62.TextBody.Paragraphs; - paragraphs62.Add(); - IParagraph paragraph62 = paragraphs62[0]; - paragraph62.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts62 = paragraph62.TextParts; - textParts62.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart62 = textParts62[0]; - textPart62.Text = "10293"; - IFont font62 = textPart62.Font; - font62.FontName = "Arial"; - font62.FontSize = 14; - - ICell cell63 = row6.Cells[2]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs63 = cell63.TextBody.Paragraphs; - paragraphs63.Add(); - IParagraph paragraph63 = paragraphs63[0]; - paragraph63.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts63 = paragraph63.TextParts; - textParts63.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart63 = textParts63[0]; - textPart63.Text = "23760"; - IFont font63 = textPart63.Font; - font63.FontName = "Arial"; - font63.FontSize = 14; - - ICell cell64 = row6.Cells[3]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs64 = cell64.TextBody.Paragraphs; - paragraphs64.Add(); - IParagraph paragraph64 = paragraphs64[0]; - paragraph64.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts64 = paragraph64.TextParts; - textParts64.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart64 = textParts64[0]; - textPart64.Text = "10378"; - IFont font64 = textPart64.Font; - font64.FontName = "Arial"; - font64.FontSize = 14; - - ICell cell65 = row6.Cells[4]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs65 = cell65.TextBody.Paragraphs; - paragraphs65.Add(); - IParagraph paragraph65 = paragraphs65[0]; - paragraph65.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts65 = paragraph65.TextParts; - textParts65.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart65 = textParts65[0]; - textPart65.Text = "24857"; - IFont font65 = textPart65.Font; - font65.FontName = "Arial"; - font65.FontSize = 14; - - ICell cell66 = row6.Cells[5]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs66 = cell66.TextBody.Paragraphs; - paragraphs66.Add(); - IParagraph paragraph66 = paragraphs66[0]; - paragraph66.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts66 = paragraph66.TextParts; - textParts66.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart66 = textParts66[0]; - textPart66.Text = "12104"; - IFont font66 = textPart66.Font; - font66.FontName = "Arial"; - font66.FontSize = 14; - - ICell cell67 = row6.Cells[6]; - - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs67 = cell67.TextBody.Paragraphs; - paragraphs67.Add(); - IParagraph paragraph67 = paragraphs67[0]; - paragraph67.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts67 = paragraph67.TextParts; - textParts67.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart67 = textParts67[0]; - textPart67.Text = "21350"; - IFont font67 = textPart67.Font; - font67.FontName = "Arial"; - font67.FontSize = 14; - - ICell cell68 = row6.Cells[7]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs68 = cell68.TextBody.Paragraphs; - paragraphs68.Add(); - IParagraph paragraph68 = paragraphs68[0]; - paragraph68.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts68 = paragraph68.TextParts; - textParts68.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart68 = textParts68[0]; - textPart68.Text = "17023"; - IFont font68 = textPart68.Font; - font68.FontName = "Arial"; - font68.FontSize = 14; - - ICell cell69 = row6.Cells[8]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs69 = cell69.TextBody.Paragraphs; - paragraphs69.Add(); - IParagraph paragraph69 = paragraphs69[0]; - paragraph69.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts69 = paragraph69.TextParts; - textParts69.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart69 = textParts69[0]; - textPart69.Text = "25460"; - IFont font69 = textPart69.Font; - font69.FontName = "Arial"; - font69.FontSize = 14; - - //To set row height - IRow row7 = table.Rows[6]; - row7.Height = 34.90; - - ICell cell71 = row7.Cells[0]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs71 = cell71.TextBody.Paragraphs; - paragraphs71.Add(); - IParagraph paragraph71 = paragraphs71[0]; - paragraph71.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts71 = paragraph71.TextParts; - textParts71.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart71 = textParts71[0]; - textPart71.Text = "Jun"; - IFont font71 = textPart71.Font; - font71.FontName = "Arial"; - font71.FontSize = 14; - - ICell cell72 = row7.Cells[1]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs72 = cell72.TextBody.Paragraphs; - paragraphs72.Add(); - IParagraph paragraph72 = paragraphs72[0]; - paragraph72.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts72 = paragraph72.TextParts; - textParts72.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart72 = textParts72[0]; - textPart72.Text = "9070"; - IFont font72 = textPart72.Font; - font72.FontName = "Arial"; - font72.FontSize = 14; - - ICell cell73 = row7.Cells[2]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs73 = cell73.TextBody.Paragraphs; - paragraphs73.Add(); - IParagraph paragraph73 = paragraphs73[0]; - paragraph73.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts73 = paragraph73.TextParts; - textParts73.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart73 = textParts73[0]; - textPart73.Text = "8218"; - IFont font73 = textPart73.Font; - font73.FontName = "Arial"; - font73.FontSize = 14; - - ICell cell74 = row7.Cells[3]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs74 = cell74.TextBody.Paragraphs; - paragraphs74.Add(); - IParagraph paragraph74 = paragraphs74[0]; - paragraph74.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts74 = paragraph74.TextParts; - textParts74.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart74 = textParts74[0]; - textPart74.Text = "23480"; - IFont font74 = textPart74.Font; - font74.FontName = "Arial"; - font74.FontSize = 14; - - ICell cell75 = row7.Cells[4]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs75 = cell75.TextBody.Paragraphs; - paragraphs75.Add(); - IParagraph paragraph75 = paragraphs75[0]; - paragraph75.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts75 = paragraph75.TextParts; - textParts75.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart75 = textParts75[0]; - textPart75.Text = "20492"; - IFont font75 = textPart75.Font; - font75.FontName = "Arial"; - font75.FontSize = 14; - - ICell cell76 = row7.Cells[5]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs76 = cell76.TextBody.Paragraphs; - paragraphs76.Add(); - IParagraph paragraph76 = paragraphs76[0]; - paragraph76.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts76 = paragraph76.TextParts; - textParts76.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart76 = textParts76[0]; - textPart76.Text = "9103"; - IFont font76 = textPart76.Font; - font76.FontName = "Arial"; - font76.FontSize = 14; - - ICell cell77 = row7.Cells[6]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs77 = cell77.TextBody.Paragraphs; - paragraphs77.Add(); - IParagraph paragraph77 = paragraphs77[0]; - paragraph77.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts77 = paragraph77.TextParts; - textParts77.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart77 = textParts77[0]; - textPart77.Text = "12300"; - IFont font77 = textPart77.Font; - font77.FontName = "Arial"; - font77.FontSize = 14; - - ICell cell78 = row7.Cells[7]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs78 = cell78.TextBody.Paragraphs; - paragraphs78.Add(); - IParagraph paragraph78 = paragraphs78[0]; - paragraph78.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts78 = paragraph78.TextParts; - textParts78.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart78 = textParts78[0]; - textPart78.Text = "14590"; - IFont font78 = textPart78.Font; - font78.FontName = "Arial"; - font78.FontSize = 14; - - ICell cell79 = row7.Cells[8]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs79 = cell79.TextBody.Paragraphs; - paragraphs79.Add(); - IParagraph paragraph79 = paragraphs79[0]; - paragraph79.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts79 = paragraph79.TextParts; - textParts79.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart79 = textParts79[0]; - textPart79.Text = "21600"; - IFont font79 = textPart79.Font; - font79.FontName = "Arial"; - font79.FontSize = 14; - - IRow row8 = table.Rows[7]; - row8.Height = 34.90; - - ICell cell81 = row8.Cells[0]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs81 = cell81.TextBody.Paragraphs; - paragraphs81.Add(); - IParagraph paragraph81 = paragraphs81[0]; - paragraph81.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts81 = paragraph81.TextParts; - textParts81.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart81 = textParts81[0]; - textPart81.Text = "Jul"; - IFont font81 = textPart81.Font; - font81.FontName = "Arial"; - font81.FontSize = 14; - - ICell cell82 = row8.Cells[1]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs82 = cell82.TextBody.Paragraphs; - paragraphs82.Add(); - IParagraph paragraph82 = paragraphs82[0]; - paragraph82.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts82 = paragraph82.TextParts; - textParts82.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart82 = textParts82[0]; - textPart82.Text = "23500"; - IFont font82 = textPart82.Font; - font82.FontName = "Arial"; - font82.FontSize = 14; - - ICell cell83 = row8.Cells[2]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs83 = cell83.TextBody.Paragraphs; - paragraphs83.Add(); - IParagraph paragraph83 = paragraphs83[0]; - paragraph83.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts83 = paragraph83.TextParts; - textParts83.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart83 = textParts83[0]; - textPart83.Text = "19230"; - IFont font83 = textPart83.Font; - font83.FontName = "Arial"; - font83.FontSize = 14; - - ICell cell84 = row8.Cells[3]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs84 = cell84.TextBody.Paragraphs; - paragraphs84.Add(); - IParagraph paragraph84 = paragraphs84[0]; - paragraph84.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts84 = paragraph84.TextParts; - textParts84.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart84 = textParts84[0]; - textPart84.Text = "87390"; - IFont font84 = textPart84.Font; - font84.FontName = "Arial"; - font84.FontSize = 14; - - ICell cell85 = row8.Cells[4]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs85 = cell85.TextBody.Paragraphs; - paragraphs85.Add(); - IParagraph paragraph85 = paragraphs85[0]; - paragraph85.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts85 = paragraph85.TextParts; - textParts85.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart85 = textParts85[0]; - textPart85.Text = "25030"; - IFont font85 = textPart85.Font; - font85.FontName = "Arial"; - font85.FontSize = 14; - - ICell cell86 = row8.Cells[5]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs86 = cell86.TextBody.Paragraphs; - paragraphs86.Add(); - IParagraph paragraph86 = paragraphs86[0]; - paragraph86.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts86 = paragraph86.TextParts; - textParts86.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart86 = textParts86[0]; - textPart86.Text = "28000"; - IFont font86 = textPart86.Font; - font86.FontName = "Arial"; - font86.FontSize = 14; - - ICell cell87 = row8.Cells[6]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs87 = cell87.TextBody.Paragraphs; - paragraphs87.Add(); - IParagraph paragraph87 = paragraphs87[0]; - paragraph87.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts87 = paragraph87.TextParts; - textParts87.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart87 = textParts87[0]; - textPart87.Text = "11890"; - IFont font87 = textPart87.Font; - font87.FontName = "Arial"; - font87.FontSize = 14; - - ICell cell88 = row8.Cells[7]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs88 = cell88.TextBody.Paragraphs; - paragraphs88.Add(); - IParagraph paragraph88 = paragraphs88[0]; - paragraph88.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts88 = paragraph88.TextParts; - textParts88.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart88 = textParts88[0]; - textPart88.Text = "16000"; - IFont font88 = textPart88.Font; - font88.FontName = "Arial"; - font88.FontSize = 14; - - ICell cell89 = row8.Cells[8]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs89 = cell89.TextBody.Paragraphs; - paragraphs89.Add(); - IParagraph paragraph89 = paragraphs89[0]; - paragraph89.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts89 = paragraph89.TextParts; - textParts89.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart89 = textParts89[0]; - textPart89.Text = "37800"; - IFont font89 = textPart89.Font; - font89.FontName = "Arial"; - font89.FontSize = 14; - - - //To set row height. - IRow row9 = table.Rows[8]; - row9.Height = 34.90; - - ICell cell91 = row9.Cells[0]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs91 = cell91.TextBody.Paragraphs; - paragraphs91.Add(); - IParagraph paragraph91 = paragraphs91[0]; - paragraph91.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts91 = paragraph91.TextParts; - textParts91.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart91 = textParts91[0]; - textPart91.Text = "Aug"; - IFont font91 = textPart91.Font; - font91.FontName = "Arial"; - font91.FontSize = 14; - - ICell cell92 = row9.Cells[1]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs92 = cell92.TextBody.Paragraphs; - paragraphs92.Add(); - IParagraph paragraph92 = paragraphs92[0]; - paragraph92.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts92 = paragraph92.TextParts; - textParts92.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart92 = textParts92[0]; - textPart92.Text = "39000"; - IFont font92 = textPart92.Font; - font92.FontName = "Arial"; - font92.FontSize = 14; - - ICell cell93 = row9.Cells[2]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs93 = cell93.TextBody.Paragraphs; - paragraphs93.Add(); - IParagraph paragraph93 = paragraphs93[0]; - paragraph93.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts93 = paragraph93.TextParts; - textParts93.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart93 = textParts93[0]; - textPart93.Text = "30301"; - IFont font93 = textPart93.Font; - font93.FontName = "Arial"; - font93.FontSize = 14; - - ICell cell94 = row9.Cells[3]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs94 = cell94.TextBody.Paragraphs; - paragraphs94.Add(); - IParagraph paragraph94 = paragraphs94[0]; - paragraph94.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts94 = paragraph94.TextParts; - textParts94.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart94 = textParts94[0]; - textPart94.Text = "78356"; - IFont font94 = textPart94.Font; - font94.FontName = "Arial"; - font94.FontSize = 14; - - ICell cell95 = row9.Cells[4]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs95 = cell95.TextBody.Paragraphs; - paragraphs95.Add(); - IParagraph paragraph95 = paragraphs95[0]; - paragraph95.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts95 = paragraph95.TextParts; - textParts95.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart95 = textParts95[0]; - textPart95.Text = "21121"; - IFont font95 = textPart95.Font; - font95.FontName = "Arial"; - font95.FontSize = 14; - - ICell cell96 = row9.Cells[5]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs96 = cell96.TextBody.Paragraphs; - paragraphs96.Add(); - IParagraph paragraph96 = paragraphs96[0]; - paragraph96.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts96 = paragraph96.TextParts; - textParts96.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart96 = textParts96[0]; - textPart96.Text = "30443"; - IFont font96 = textPart96.Font; - font96.FontName = "Arial"; - font96.FontSize = 14; - - ICell cell97 = row9.Cells[6]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs97 = cell97.TextBody.Paragraphs; - paragraphs97.Add(); - IParagraph paragraph97 = paragraphs97[0]; - paragraph97.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts97 = paragraph97.TextParts; - textParts97.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart97 = textParts97[0]; - textPart97.Text = "23230"; - IFont font97 = textPart97.Font; - font97.FontName = "Arial"; - font97.FontSize = 14; - - ICell cell98 = row9.Cells[7]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs98 = cell98.TextBody.Paragraphs; - paragraphs98.Add(); - IParagraph paragraph98 = paragraphs98[0]; - paragraph98.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts98 = paragraph98.TextParts; - textParts98.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart98 = textParts98[0]; - textPart98.Text = "25000"; - IFont font98 = textPart98.Font; - font98.FontName = "Arial"; - font98.FontSize = 14; - - ICell cell99 = row9.Cells[8]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs99 = cell99.TextBody.Paragraphs; - paragraphs99.Add(); - IParagraph paragraph99 = paragraphs99[0]; - paragraph99.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts99 = paragraph99.TextParts; - textParts99.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart99 = textParts99[0]; - textPart99.Text = "40900"; - IFont font99 = textPart99.Font; - font99.FontName = "Arial"; - font99.FontSize = 14; - - //To set row height - IRow row10 = table.Rows[9]; - row10.Height = 34.90; - - ICell cell101 = row10.Cells[0]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs101 = cell101.TextBody.Paragraphs; - paragraphs101.Add(); - IParagraph paragraph101 = paragraphs101[0]; - paragraph101.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts101 = paragraph101.TextParts; - textParts101.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart101 = textParts101[0]; - textPart101.Text = "Sep"; - IFont font101 = textPart101.Font; - font101.FontName = "Arial"; - font101.FontSize = 14; - - ICell cell102 = row10.Cells[1]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs102 = cell102.TextBody.Paragraphs; - paragraphs102.Add(); - IParagraph paragraph102 = paragraphs102[0]; - paragraph102.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts102 = paragraph102.TextParts; - textParts102.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart102 = textParts102[0]; - textPart102.Text = "14340"; - IFont font102 = textPart102.Font; - font102.FontName = "Arial"; - font102.FontSize = 14; - - ICell cell103 = row10.Cells[2]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs103 = cell103.TextBody.Paragraphs; - paragraphs103.Add(); - IParagraph paragraph103 = paragraphs103[0]; - paragraph103.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts103 = paragraph103.TextParts; - textParts103.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart103 = textParts103[0]; - textPart103.Text = "19403"; - IFont font103 = textPart103.Font; - font103.FontName = "Arial"; - font103.FontSize = 14; - - ICell cell104 = row10.Cells[3]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs104 = cell104.TextBody.Paragraphs; - paragraphs104.Add(); - IParagraph paragraph104 = paragraphs104[0]; - paragraph104.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts104 = paragraph104.TextParts; - textParts104.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart104 = textParts104[0]; - textPart104.Text = "89024"; - IFont font104 = textPart104.Font; - font104.FontName = "Arial"; - font104.FontSize = 14; - - ICell cell105 = row10.Cells[4]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs105 = cell105.TextBody.Paragraphs; - paragraphs105.Add(); - IParagraph paragraph105 = paragraphs105[0]; - paragraph105.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts105 = paragraph105.TextParts; - textParts105.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart105 = textParts105[0]; - textPart105.Text = "1230"; - IFont font105 = textPart105.Font; - font105.FontName = "Arial"; - font105.FontSize = 14; - - ICell cell106 = row10.Cells[5]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs106 = cell106.TextBody.Paragraphs; - paragraphs106.Add(); - IParagraph paragraph106 = paragraphs106[0]; - paragraph106.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts106 = paragraph106.TextParts; - textParts106.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart106 = textParts106[0]; - textPart106.Text = "12561"; - IFont font106 = textPart106.Font; - font106.FontName = "Arial"; - font106.FontSize = 14; - - ICell cell107 = row10.Cells[6]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs107 = cell107.TextBody.Paragraphs; - paragraphs107.Add(); - IParagraph paragraph107 = paragraphs107[0]; - paragraph107.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts107 = paragraph107.TextParts; - textParts107.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart107 = textParts107[0]; - textPart107.Text = "29000"; - IFont font107 = textPart107.Font; - font107.FontName = "Arial"; - font107.FontSize = 14; - font106.Color = ColorObject.FromArgb(1055, 1102, 0); - - ICell cell108 = row10.Cells[7]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs108 = cell108.TextBody.Paragraphs; - paragraphs108.Add(); - IParagraph paragraph108 = paragraphs108[0]; - paragraph108.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts108 = paragraph108.TextParts; - textParts108.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart108 = textParts108[0]; - textPart108.Text = "33400"; - IFont font108 = textPart108.Font; - font108.FontName = "Arial"; - font108.FontSize = 14; - - ICell cell109 = row10.Cells[8]; - - //Instance to hold paragraphs in cell. - IParagraphs paragraphs109 = cell109.TextBody.Paragraphs; - paragraphs109.Add(); - IParagraph paragraph109 = paragraphs109[0]; - paragraph109.HorizontalAlignment = HorizontalAlignmentType.Left; - ITextParts textParts109 = paragraph109.TextParts; - textParts109.Add(); - - //Creates a textpart and assigns value to it. - ITextPart textPart109 = textParts109[0]; - textPart109.Text = "29800"; - IFont font109 = textPart109.Font; - font109.FontName = "Arial"; - font109.FontSize = 14; - } - #endregion -} \ No newline at end of file diff --git a/Pages/PowerPoint/WriteProtection.cshtml b/Pages/PowerPoint/WriteProtection.cshtml deleted file mode 100644 index 557b1228..00000000 --- a/Pages/PowerPoint/WriteProtection.cshtml +++ /dev/null @@ -1,57 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.PowerPoint.WriteProtection - -@using Syncfusion.EJ2 -@{ var Title = "Essential Presentation (Presentation) : WriteProtection : Syncfusion"; } - -@section ActionDescription{ - This sample demonstrates how to set write protection for a PowerPoint presentation with password. -} - -@section Description{ - Features: -
-
-
    -
  • Set write protection for PowerPoint presentation with password.
  • -
  • Remove write protection of PowerPoint presentation.
  • -
-
-} -@section ControlsSection{ -
- @{ - Html.BeginForm("writeprotection", "powerpoint", FormMethod.Post); - { -
-

- Click the button to view a PowerPoint presentation generated by Essential Presentation. Please note - that Microsoft PowerPoint viewer or its equivalent is required to view the resultant document. -

-
-
- Password : - -   -
-
-
-
- -
-
-
- Html.EndForm(); - } - } -
-} -@section Title{ - ASP.NET Core PowerPoint (Presentation) library - Write Protection Example - Syncfusion Demos - } -@section Meta{ - - } -@section Header{ -

Example of Write Protection in ASP.NET Core PowerPoint (Presentation) Library

- } \ No newline at end of file diff --git a/Pages/PowerPoint/WriteProtection.cshtml.cs b/Pages/PowerPoint/WriteProtection.cshtml.cs deleted file mode 100644 index 146a40a0..00000000 --- a/Pages/PowerPoint/WriteProtection.cshtml.cs +++ /dev/null @@ -1,56 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Presentation; - -namespace EJ2CoreSampleBrowser.Pages.PowerPoint; - -public class WriteProtection : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public WriteProtection(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - [HttpPost] - public ActionResult OnPost(string button, string Password) - { - if (button == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - //Open a existing PowerPoint presentation. - IPresentation presentation = Presentation.Open(basePath + @"/PowerPoint/Syncfusion Presentation.pptx"); - - if (Password == null) - Password = string.Empty; - - //Set the write protection for presentation instance - presentation.SetWriteProtection(Password); - - MemoryStream ms = new MemoryStream(); - - //Initialize the file stream to download the presentation. - FileStreamResult fileStreamResult = new FileStreamResult(ms, "application/vnd.openxmlformats-officedocument.presentationml.presentation"); - //Set the file name. - fileStreamResult.FileDownloadName = "ProtectedPresentation.pptx"; - - //Saves the presentation to the memory stream. - presentation.Save(ms); - //Set the position of the stream to beginning. - ms.Position = 0; - - return fileStreamResult; - } -} \ No newline at end of file diff --git a/Pages/Word/AdvancedReplace.cshtml b/Pages/Word/AdvancedReplace.cshtml deleted file mode 100644 index eefb11af..00000000 --- a/Pages/Word/AdvancedReplace.cshtml +++ /dev/null @@ -1,68 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.AdvancedReplace - -@using Syncfusion.EJ2 -@{var Title = "Essential Word (DocIO) : Find, Replace with Formatting : Syncfusion";} -@section ControlsSection{ -
- @{Html.BeginForm("advancedreplace", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
- Save As : - - -   - - -   - - -
-
- -   - -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to replace a specific content in the Word document with another document using the Find and Replace functionality of Essential Word (DocIO) library. -
-} -@section Description{ -
- DocIO allows you to find and replace a specific content in the Word document with another document. -
    -
  • - You can replace a specific content with another part of the document or another Word document. -
  • -
  • - You can replace the content by retaining the same formatting for the new content. -
  • -
  • - You can also replace it with any document elements like image, paragraph, table, etc., -
  • -
-
-
- More information about the Find and Replace functionality can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Advanced Replace Example - Syncfusion Demos - } -@section Header{ -

Example of Advanced Replace in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/AdvancedReplace.cshtml.cs b/Pages/Word/AdvancedReplace.cshtml.cs deleted file mode 100644 index 1ed7f442..00000000 --- a/Pages/Word/AdvancedReplace.cshtml.cs +++ /dev/null @@ -1,109 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class AdvancedReplace : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public AdvancedReplace(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1, string Button) - { - if (Group1 == null) - return null; - // return View(); - // try - // { - string basePath = _hostingEnvironment.WebRootPath; - string dataPathTemp = basePath + @"/Word/SourceTemplate1.doc"; - string dataPathTemplate = basePath + @"/Word/SourceTemplate2.doc"; - string dataPathMaster = basePath + @"/Word/MasterTemplate.doc"; - string contenttype1 = "application/msword"; - //Load Template document stream. - FileStream fileStream = new FileStream(dataPathMaster, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - if (Button == "View Template") - { - return File(fileStream, contenttype1, "MasterTemplate.doc"); - } - - fileStream.Dispose(); - fileStream = null; - - //Creating new documents. - WordDocument docSource1 = new WordDocument(); - WordDocument docSource2 = new WordDocument(); - WordDocument docMaster = new WordDocument(); - //Load Templates. - docSource1.Open(dataPathTemp, FormatType.Doc); - docSource2.Open(dataPathTemplate, FormatType.Doc); - docMaster.Open(dataPathMaster, FormatType.Doc); - //Search for a string and store in TextSelection - //The TextSelection copies a text segment with formatting. - TextSelection selection1 = docSource1.Find("PlaceHolder text is replaced with this formatted animated text", - false, false); - //Get the text segment to replace the tex across multiple paragraphs - TextBodyPart replacePart = new TextBodyPart(docSource2); - foreach (TextBodyItem bodyItem in docSource2.LastSection.Body.ChildEntities) - replacePart.BodyItems.Add(bodyItem.Clone()); - //Replacing the placeholder inside Master Template with matches found while - //search the two template documents. - docMaster.Replace("PlaceHolder1", selection1, true, true, true); - docMaster.ReplaceSingleLine((new System.Text.RegularExpressions.Regex( - "PlaceHolder2Start:Suppliers/Vendors of Northwind." + - "Customers of Northwind.Employee details of Northwind traders.The product information.The inventory details.The shippers." + - "PO transactions i.e Purchase Order transactions.Sales Order transaction.Inventory transactions.Invoices.PlaceHolder2End")), - replacePart); - - FormatType type = FormatType.Docx; - string filename = "AdvancedReplace.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "AdvancedReplace.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "AdvancedReplace.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - docMaster.Save(ms, type); - docMaster.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - // } - // catch (Exception) - // { - // } - // - // return View(); - } -} \ No newline at end of file diff --git a/Pages/Word/AutoShapes.cshtml b/Pages/Word/AutoShapes.cshtml deleted file mode 100644 index 66b52200..00000000 --- a/Pages/Word/AutoShapes.cshtml +++ /dev/null @@ -1,68 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.AutoShapes - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : AutoShapes : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("autoshapes", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to create a Word document with Auto shapes using Essential DocIO. -
-} -@section Description{ -
- With DocIO, you can create an Auto shape and insert it into the Word Open XML Format document (DOCX, DOTX, DOCM, DOTM). You can add text to the shape and format the shape in the document. -
    -
  • - You can insert shape as "in line with text" or "position relative to the page" in the Word document. -
  • -
  • - Shapes in the Word document can be retrieved by its name, title, etc., and its content or appearance can be modified. -
  • -
  • - You can make shapes in the Word document accessible by defining alternate text. -
  • -
-
-
- More information about the Auto shapes can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - AutoShapes Example - Syncfusion Demos - } -@section Header{ -

Example of AutoShapes in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/AutoShapes.cshtml.cs b/Pages/Word/AutoShapes.cshtml.cs deleted file mode 100644 index 76f80b8a..00000000 --- a/Pages/Word/AutoShapes.cshtml.cs +++ /dev/null @@ -1,174 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Syncfusion.DocIORenderer; -using Syncfusion.Pdf; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class AutoShapes : PageModel -{ - public void OnGet() - { - - } - - public ActionResult OnPost(string Group1) - { - if (Group1 == null) - return null; - // return View(); - - //Initialize Word document - WordDocument doc = new WordDocument(); - //Ensure Minimum - doc.EnsureMinimal(); - //Append AutoShape - Shape shape = doc.LastParagraph.AppendShape(AutoShapeType.RoundedRectangle, 130, 45); - //Set horizontal alignment - shape.HorizontalAlignment = ShapeHorizontalAlignment.Center; - //Set horizontal origin - shape.HorizontalOrigin = HorizontalOrigin.Page; - //Set vertical origin - shape.VerticalOrigin = VerticalOrigin.Page; - //Set vertical position - shape.VerticalPosition = 50; - //Set AllowOverlap to true for overlapping shapes - shape.WrapFormat.AllowOverlap = true; - //Set Fill Color - shape.FillFormat.Color = Syncfusion.Drawing.Color.Blue; - //Set Content vertical alignment - shape.TextFrame.TextVerticalAlignment = VerticalAlignment.Middle; - //Add Texbody contents to Shape - IWParagraph para = shape.TextBody.AddParagraph(); - para.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - para.AppendText("Requirement").ApplyCharacterFormat(new WCharacterFormat(doc) - { Bold = true, TextColor = Syncfusion.Drawing.Color.White, FontSize = 12, FontName = "Verdana" }); - - shape = doc.LastParagraph.AppendShape(AutoShapeType.DownArrow, 45, 45); - shape.HorizontalAlignment = ShapeHorizontalAlignment.Center; - shape.HorizontalOrigin = HorizontalOrigin.Page; - shape.VerticalOrigin = VerticalOrigin.Page; - shape.VerticalPosition = 95; - shape.WrapFormat.AllowOverlap = true; - - shape = doc.LastParagraph.AppendShape(AutoShapeType.RoundedRectangle, 130, 45); - shape.HorizontalAlignment = ShapeHorizontalAlignment.Center; - shape.HorizontalOrigin = HorizontalOrigin.Page; - shape.VerticalOrigin = VerticalOrigin.Page; - shape.VerticalPosition = 140; - shape.WrapFormat.AllowOverlap = true; - shape.FillFormat.Color = Syncfusion.Drawing.Color.Orange; - shape.TextFrame.TextVerticalAlignment = VerticalAlignment.Middle; - para = shape.TextBody.AddParagraph(); - para.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - para.AppendText("Design").ApplyCharacterFormat(new WCharacterFormat(doc) - { Bold = true, TextColor = Syncfusion.Drawing.Color.White, FontSize = 12, FontName = "Verdana" }); - - shape = doc.LastParagraph.AppendShape(AutoShapeType.DownArrow, 45, 45); - shape.HorizontalAlignment = ShapeHorizontalAlignment.Center; - shape.HorizontalOrigin = HorizontalOrigin.Page; - shape.VerticalOrigin = VerticalOrigin.Page; - shape.VerticalPosition = 185; - shape.WrapFormat.AllowOverlap = true; - - shape = doc.LastParagraph.AppendShape(AutoShapeType.RoundedRectangle, 130, 45); - shape.HorizontalAlignment = ShapeHorizontalAlignment.Center; - shape.HorizontalOrigin = HorizontalOrigin.Page; - shape.VerticalOrigin = VerticalOrigin.Page; - shape.VerticalPosition = 230; - shape.WrapFormat.AllowOverlap = true; - shape.FillFormat.Color = Syncfusion.Drawing.Color.Blue; - shape.TextFrame.TextVerticalAlignment = VerticalAlignment.Middle; - para = shape.TextBody.AddParagraph(); - para.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - para.AppendText("Execution").ApplyCharacterFormat(new WCharacterFormat(doc) - { Bold = true, TextColor = Syncfusion.Drawing.Color.White, FontSize = 12, FontName = "Verdana" }); - - shape = doc.LastParagraph.AppendShape(AutoShapeType.DownArrow, 45, 45); - shape.HorizontalAlignment = ShapeHorizontalAlignment.Center; - shape.HorizontalOrigin = HorizontalOrigin.Page; - shape.VerticalOrigin = VerticalOrigin.Page; - shape.VerticalPosition = 275; - shape.WrapFormat.AllowOverlap = true; - - shape = doc.LastParagraph.AppendShape(AutoShapeType.RoundedRectangle, 130, 45); - shape.HorizontalAlignment = ShapeHorizontalAlignment.Center; - shape.HorizontalOrigin = HorizontalOrigin.Page; - shape.VerticalOrigin = VerticalOrigin.Page; - shape.VerticalPosition = 320; - shape.WrapFormat.AllowOverlap = true; - shape.FillFormat.Color = Syncfusion.Drawing.Color.Violet; - shape.TextFrame.TextVerticalAlignment = VerticalAlignment.Middle; - para = shape.TextBody.AddParagraph(); - para.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - para.AppendText("Testing").ApplyCharacterFormat(new WCharacterFormat(doc) - { Bold = true, TextColor = Syncfusion.Drawing.Color.White, FontSize = 12, FontName = "Verdana" }); - - shape = doc.LastParagraph.AppendShape(AutoShapeType.DownArrow, 45, 45); - shape.HorizontalAlignment = ShapeHorizontalAlignment.Center; - shape.HorizontalOrigin = HorizontalOrigin.Page; - shape.VerticalOrigin = VerticalOrigin.Page; - shape.VerticalPosition = 365; - shape.WrapFormat.AllowOverlap = true; - - shape = doc.LastParagraph.AppendShape(AutoShapeType.RoundedRectangle, 130, 45); - shape.HorizontalAlignment = ShapeHorizontalAlignment.Center; - shape.HorizontalOrigin = HorizontalOrigin.Page; - shape.VerticalOrigin = VerticalOrigin.Page; - shape.VerticalPosition = 410; - shape.WrapFormat.AllowOverlap = true; - shape.FillFormat.Color = Syncfusion.Drawing.Color.PaleVioletRed; - shape.TextFrame.TextVerticalAlignment = VerticalAlignment.Middle; - para = shape.TextBody.AddParagraph(); - para.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - para.AppendText("Release").ApplyCharacterFormat(new WCharacterFormat(doc) - { Bold = true, TextColor = Syncfusion.Drawing.Color.White, FontSize = 12, FontName = "Verdana" }); - - - string filename = ""; - string contenttype = ""; - MemoryStream ms = new MemoryStream(); - - #region Document SaveOption - - //Save as .docx format - if (Group1 == "WordDocx") - { - filename = "AutoShapes.docx"; - contenttype = "application/vnd.ms-word.document.12"; - doc.Save(ms, FormatType.Docx); - } - //Save as .xml format - else if (Group1 == "WordML") - { - filename = "AutoShapes.xml"; - contenttype = "application/msword"; - doc.Save(ms, FormatType.WordML); - } - //Save as .pdf format - else if (Group1 == "Pdf") - { - filename = "AutoShapes.pdf"; - contenttype = "application/pdf"; - DocIORenderer renderer = new DocIORenderer(); - PdfDocument pdfDoc = renderer.ConvertToPDF(doc); - pdfDoc.Save(ms); - pdfDoc.Close(); - } - - #endregion Document SaveOption - - doc.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } -} \ No newline at end of file diff --git a/Pages/Word/BarChart.cshtml b/Pages/Word/BarChart.cshtml deleted file mode 100644 index c5d360de..00000000 --- a/Pages/Word/BarChart.cshtml +++ /dev/null @@ -1,68 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.BarChart - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : BarChart : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("barchart", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to insert a bar chart into the Word document using Essential DocIO. -
-} -@section Description{ -
- With DocIO, you can create business or survey reports with intuitive graphical data visualization using chart in Word document and export as PDF. -
    -
  • - You can create chart in the Word document by using data from an existing Excel file. -
  • -
  • - You can also enable the data table to visualize the chart data. -
  • -
  • - You can save the chart in Word document as image. -
  • -
-
-
- More information about the charts can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Bar Chart Example - Syncfusion Demos - } -@section Header{ -

Example of Bar Chart in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/BarChart.cshtml.cs b/Pages/Word/BarChart.cshtml.cs deleted file mode 100644 index 8d8300da..00000000 --- a/Pages/Word/BarChart.cshtml.cs +++ /dev/null @@ -1,118 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Syncfusion.OfficeChart; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIORenderer; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class BarChart : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public BarChart(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1) - { - if (Group1 == null) - return null; - // return View(); - - //A new document is created. - WordDocument document = new WordDocument(); - //Add new section to the Word document - IWSection section = document.AddSection(); - //Set page margins of the section - section.PageSetup.Margins.All = 72; - //Add new paragraph to the section - IWParagraph paragraph = section.AddParagraph(); - //Apply heading style to the title paragraph - paragraph.ApplyStyle(BuiltinStyle.Heading1); - //Apply center alignment to the paragraph - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - //Append text to the paragraph - paragraph.AppendText("Northwind Management Report").CharacterFormat.TextColor = - Syncfusion.Drawing.Color.FromArgb(46, 116, 181); - //Add new paragraph - paragraph = section.AddParagraph(); - //Set before spacing to the paragraph - paragraph.ParagraphFormat.BeforeSpacing = 20; - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/Excel_Template.xlsx"; - //Load the excel template as stream - Stream excelStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read); - //Create and Append chart to the paragraph with excel stream as parameter - WChart BarChart = paragraph.AppendChart(excelStream, 1, "B2:C6", 470, 300); - //Set chart data - BarChart.ChartType = OfficeChartType.Bar_Clustered; - BarChart.ChartTitle = "Purchase Details"; - BarChart.ChartTitleArea.FontName = "Calibri (Body)"; - BarChart.ChartTitleArea.Size = 14; - //Set name to chart series - BarChart.Series[0].Name = "Sum of Purchases"; - BarChart.Series[1].Name = "Sum of Future Expenses"; - //Set Chart Data table - BarChart.HasDataTable = true; - BarChart.DataTable.HasBorders = true; - BarChart.DataTable.HasHorzBorder = true; - BarChart.DataTable.HasVertBorder = true; - BarChart.DataTable.ShowSeriesKeys = true; - BarChart.HasLegend = false; - //Setting background color - BarChart.ChartArea.Fill.ForeColor = Syncfusion.Drawing.Color.FromArgb(208, 206, 206); - BarChart.PlotArea.Fill.ForeColor = Syncfusion.Drawing.Color.FromArgb(208, 206, 206); - //Setting line pattern to the chart area - BarChart.PrimaryCategoryAxis.Border.LinePattern = OfficeChartLinePattern.None; - BarChart.PrimaryValueAxis.Border.LinePattern = OfficeChartLinePattern.None; - BarChart.ChartArea.Border.LinePattern = OfficeChartLinePattern.None; - BarChart.PrimaryValueAxis.MajorGridLines.Border.LineColor = Syncfusion.Drawing.Color.FromArgb(175, 171, 171); - //Set label for primary catagory axis - BarChart.PrimaryCategoryAxis.CategoryLabels = BarChart.ChartData[2, 1, 6, 1]; - - string filename = ""; - string contenttype = ""; - MemoryStream ms = new MemoryStream(); - - #region Document SaveOption - - if (Group1 == "WordDocx") - { - filename = "BarChart.docx"; - contenttype = "application/msword"; - document.Save(ms, FormatType.Docx); - } - else if (Group1 == "WordML") - { - filename = "BarChart.xml"; - contenttype = "application/msword"; - document.Save(ms, FormatType.WordML); - } - else - { - filename = "BarChart.pdf"; - contenttype = "application/pdf"; - DocIORenderer renderer = new DocIORenderer(); - renderer.ConvertToPDF(document).Save(ms); - } - - #endregion Document SaveOption - - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } -} \ No newline at end of file diff --git a/Pages/Word/BookmarkNavigation.cshtml b/Pages/Word/BookmarkNavigation.cshtml deleted file mode 100644 index d31aafd9..00000000 --- a/Pages/Word/BookmarkNavigation.cshtml +++ /dev/null @@ -1,73 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.BookmarkNavigation - -@using Syncfusion.EJ2 -@{var Title = "Essential DocIO (Word) : Bookmark Navigation : Syncfusion";} -@section ControlsSection{ -
- @{Html.BeginForm("bookmarknavigation", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Save As : - - -   - - -   - - -
-
-
- -      - -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to navigate between the bookmarks in a Word document and edit its content using Bookmark Navigation functionality of Essential Word (DocIO) library.  -
-} -@section Description{ -
- DocIO allows you to insert or delete bookmarks in the Word document and edit its content. -
    -
  • - You can easily identify a part of the document for future reference by adding bookmark. -
  • -
  • - Bookmark navigation lets you navigate to a specific bookmark and get its content as new document. -
  • -
  • - You can insert, replace or delete the contents of a specific bookmark in the Word document. -
  • -
  • - You can select the column range for bookmarks inside tables in Word documents using FirstColumn and LastColumn APIs. -
  • -
-
-
- More information about the bookmarks can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Bookmark Navigation Example - Syncfusion Demos - } -@section Header{ -

Example of Bookmark Navigation in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/BookmarkNavigation.cshtml.cs b/Pages/Word/BookmarkNavigation.cshtml.cs deleted file mode 100644 index 8b620201..00000000 --- a/Pages/Word/BookmarkNavigation.cshtml.cs +++ /dev/null @@ -1,252 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class BookmarkNavigation : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public BookmarkNavigation(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1, string Button) - { - if (Group1 == null) - return null; - // return View(); - if (Button == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/Bookmark_Template.docx"; - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - string contenttype1 = "application/vnd.ms-word.document.12"; - if (Button == "View Template") - return File(fileStream, contenttype1, "Bookmark_Template.docx"); - - #region BookmarkNavigation - - // Creating a new document. - WordDocument document = new WordDocument(); - //Adds section with one empty paragraph to the Word document - document.EnsureMinimal(); - //Sets the page margins - document.LastSection.PageSetup.Margins.All = 72f; - //Appends bookmark to the paragraph - document.LastParagraph.AppendBookmarkStart("NorthwindDatabase"); - document.LastParagraph.AppendText("Northwind database with normalization concept"); - document.LastParagraph.AppendBookmarkEnd("NorthwindDatabase"); - basePath = _hostingEnvironment.WebRootPath; - dataPath = basePath + @"/Word/Bookmark_Template.docx"; - string dataPathTemp = basePath + @"/Word/BkmkDocumentPart_Template.docx"; - // Open an existing template document with single section to get Northwind.information - WordDocument nwdInformation = new WordDocument(); - nwdInformation.Open(dataPath, FormatType.Doc); - // Open an existing template document with multiple section to get Northwind data. - WordDocument templateDocument = new WordDocument(); - templateDocument.Open(dataPathTemp, FormatType.Doc); - // Creating a bookmark navigator. Which help us to navigate through the - // bookmarks in the template document. - BookmarksNavigator bk = new BookmarksNavigator(templateDocument); - // Move to the NorthWind bookmark in template document - bk.MoveToBookmark("NorthWind"); - //Gets the bookmark content as WordDocumentPart - WordDocumentPart documentPart = bk.GetContent(); - // Creating a bookmark navigator. Which help us to navigate through the - // bookmarks in the Northwind information document. - bk = new BookmarksNavigator(nwdInformation); - // Move to the information bookmark - bk.MoveToBookmark("Information"); - // Get the content of information bookmark. - TextBodyPart bodyPart = bk.GetBookmarkContent(); - // Creating a bookmark navigator. Which help us to navigate through the - // bookmarks in the destination document. - bk = new BookmarksNavigator(document); - // Move to the NorthWind database in the destination document - bk.MoveToBookmark("NorthwindDatabase"); - //Replace the bookmark content using word document parts - bk.ReplaceContent(documentPart); - // Move to the Northwind_Information in the destination document - bk.MoveToBookmark("Northwind_Information"); - // Replacing content of Northwind_Information bookmark. - bk.ReplaceBookmarkContent(bodyPart); - - #region Bookmark selection for table - - // Creating a bookmark navigator. Which help us to navigate through the - // bookmarks in the Northwind information document. - bk = new BookmarksNavigator(nwdInformation); - bk.MoveToBookmark("SuppliersTable"); - //Sets the column index where the bookmark starts within the table - bk.CurrentBookmark.FirstColumn = 1; - //Sets the column index where the bookmark ends within the table - bk.CurrentBookmark.LastColumn = 5; - // Get the content of suppliers table bookmark. - bodyPart = bk.GetBookmarkContent(); - // Creating a bookmark navigator. Which help us to navigate through the - // bookmarks in the destination document. - bk = new BookmarksNavigator(document); - bk.MoveToBookmark("Table"); - bk.ReplaceBookmarkContent(bodyPart); - - #endregion - - // Move to the text bookmark - bk.MoveToBookmark("Text"); - //Deletes the bookmark content - bk.DeleteBookmarkContent(true); - // Inserting text inside the bookmark. This will preserve the source formatting - bk.InsertText("Northwind Database contains the following table:"); - - #region tableinsertion - - WTable tbl = new WTable(document); - tbl.TableFormat.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.None; - tbl.TableFormat.IsAutoResized = true; - tbl.ResetCells(8, 2); - IWParagraph paragraph; - tbl.Rows[0].IsHeader = true; - paragraph = tbl[0, 0].AddParagraph(); - paragraph.AppendText("Suppliers"); - paragraph.BreakCharacterFormat.FontName = "Calibri"; - paragraph.BreakCharacterFormat.FontSize = 10; - - paragraph = tbl[0, 1].AddParagraph(); - paragraph.AppendText("1"); - paragraph.BreakCharacterFormat.FontName = "Calibri"; - paragraph.BreakCharacterFormat.FontSize = 10; - - paragraph = tbl[1, 0].AddParagraph(); - paragraph.AppendText("Customers"); - paragraph.BreakCharacterFormat.FontName = "Calibri"; - paragraph.BreakCharacterFormat.FontSize = 10; - - paragraph = tbl[1, 1].AddParagraph(); - paragraph.AppendText("1"); - paragraph.BreakCharacterFormat.FontName = "Calibri"; - paragraph.BreakCharacterFormat.FontSize = 10; - - paragraph = tbl[2, 0].AddParagraph(); - paragraph.AppendText("Employees"); - paragraph.BreakCharacterFormat.FontName = "Calibri"; - paragraph.BreakCharacterFormat.FontSize = 10; - - paragraph = tbl[2, 1].AddParagraph(); - paragraph.AppendText("3"); - paragraph.BreakCharacterFormat.FontName = "Calibri"; - paragraph.BreakCharacterFormat.FontSize = 10; - - paragraph = tbl[3, 0].AddParagraph(); - paragraph.AppendText("Products"); - paragraph.BreakCharacterFormat.FontName = "Calibri"; - paragraph.BreakCharacterFormat.FontSize = 10; - - paragraph = tbl[3, 1].AddParagraph(); - paragraph.AppendText("1"); - paragraph.BreakCharacterFormat.FontName = "Calibri"; - paragraph.BreakCharacterFormat.FontSize = 10; - - paragraph = tbl[4, 0].AddParagraph(); - paragraph.AppendText("Inventory"); - paragraph.BreakCharacterFormat.FontName = "Calibri"; - paragraph.BreakCharacterFormat.FontSize = 10; - - paragraph = tbl[4, 1].AddParagraph(); - paragraph.AppendText("2"); - paragraph.BreakCharacterFormat.FontName = "Calibri"; - paragraph.BreakCharacterFormat.FontSize = 10; - - paragraph = tbl[5, 0].AddParagraph(); - paragraph.AppendText("Shippers"); - paragraph.BreakCharacterFormat.FontName = "Calibri"; - paragraph.BreakCharacterFormat.FontSize = 10; - - paragraph = tbl[5, 1].AddParagraph(); - paragraph.AppendText("1"); - paragraph.BreakCharacterFormat.FontName = "Calibri"; - paragraph.BreakCharacterFormat.FontSize = 10; - - paragraph = tbl[6, 0].AddParagraph(); - paragraph.AppendText("PO Transactions"); - paragraph.BreakCharacterFormat.FontName = "Calibri"; - paragraph.BreakCharacterFormat.FontSize = 10; - - paragraph = tbl[6, 1].AddParagraph(); - paragraph.AppendText("3"); - paragraph.BreakCharacterFormat.FontName = "Calibri"; - paragraph.BreakCharacterFormat.FontSize = 10; - - paragraph = tbl[7, 0].AddParagraph(); - paragraph.AppendText("Sales Transactions"); - paragraph.BreakCharacterFormat.FontName = "Calibri"; - paragraph.BreakCharacterFormat.FontSize = 10; - - paragraph = tbl[7, 1].AddParagraph(); - paragraph.AppendText("7"); - paragraph.BreakCharacterFormat.FontName = "Calibri"; - paragraph.BreakCharacterFormat.FontSize = 10; - - bk.InsertTable(tbl); - - #endregion tableinsertion - - //Move to image bookmark - bk.MoveToBookmark("Image"); - //Deletes the bookmark content - bk.DeleteBookmarkContent(true); - // Inserting image to the bookmark. - IWPicture pic = bk.InsertParagraphItem(ParagraphItemType.Picture) as WPicture; - - FileStream imageStream = - new FileStream(basePath + @"/images/Word/Northwind.png", FileMode.Open, FileAccess.Read); - pic.LoadImage(imageStream); - pic.WidthScale = 50f; // It reduce the image size because it don't fit - pic.HeightScale = 75f; // in document page. - - #endregion BookmarkNavigation - - FormatType type = FormatType.Docx; - string filename = "Bookmark Navigation.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "Bookmark Navigation.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "Bookmark Navigation.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } -} \ No newline at end of file diff --git a/Pages/Word/Bookmarks.cshtml b/Pages/Word/Bookmarks.cshtml deleted file mode 100644 index a8ee38d3..00000000 --- a/Pages/Word/Bookmarks.cshtml +++ /dev/null @@ -1,68 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.Bookmarks - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Bookmark : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("bookmarks", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to insert bookmarks into the Word document using Essential DocIO. -
-} -@section Description{ -
- Bookmark helps to identify a part of the document for future reference. The document elements like paragraph, table, etc., can be marked with a bookmark and it can be accessed by its name. -
    -
  • - With DocIO, you can insert and delete bookmarks in the Word document. -
  • -
  • - Using bookmark navigator, you can navigate through the document elements and select a specific bookmark in the Word document. -
  • -
  • - Once after selecting a bookmark, you can edit, modify or delete the contents within that bookmark. -
  • -
-
-
- More information about the bookmarks can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Bookmarks Example - Syncfusion Demos - } -@section Header{ -

Example of Bookmarks in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/Bookmarks.cshtml.cs b/Pages/Word/Bookmarks.cshtml.cs deleted file mode 100644 index b0bc2f10..00000000 --- a/Pages/Word/Bookmarks.cshtml.cs +++ /dev/null @@ -1,120 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class Bookmarks : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public Bookmarks(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1) - { - if (Group1 == null) - return null; - // return View(); - - #region BookmarkCreation - - // Creating a new document. - WordDocument document = new WordDocument(); - // Adding a section to the document. - IWSection section = document.AddSection(); - // Adding a new paragraph to the section. - IWParagraph paragraph = section.AddParagraph(); - // Writing text - paragraph.AppendText("This document demonstrates Essential DocIO's Bookmark functionality.").CharacterFormat - .FontSize = 14f; - // Adding paragraph to the section. - section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.AppendText("1. Inserting Bookmark Text").CharacterFormat.FontSize = 12f; - - // Adding paragraph to the section. - section.AddParagraph(); - paragraph = section.AddParagraph(); - - // BookmarkStart. - paragraph.AppendBookmarkStart("Bookmark"); - // Write bookmark - paragraph.AppendText("Bookmark Text"); - // BookmarkEnd. - paragraph.AppendBookmarkEnd("Bookmark"); - - // Adding paragraph to the section. - section.AddParagraph(); - paragraph = section.AddParagraph(); - // Indicating hidden bookmark text start. - paragraph.AppendBookmarkStart("_HiddenText"); - // Writing bookmark text - paragraph.AppendText("2. Hidden Bookmark Text").CharacterFormat.Font = - new Syncfusion.Drawing.Font("Comic Sans MS", 10); - // Indicating hidden bookmark text end. - paragraph.AppendBookmarkEnd("_HiddenText"); - - section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.AppendText("3. Nested Bookmarks").CharacterFormat.FontSize = 12f; - - // Writing nested bookmarks - section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.AppendBookmarkStart("Main"); - paragraph.AppendText(" Main data "); - paragraph.AppendBookmarkStart("Nested"); - paragraph.AppendText(" Nested data "); - paragraph.AppendBookmarkStart("NestedNested"); - paragraph.AppendText(" Nested Nested "); - paragraph.AppendBookmarkEnd("NestedNested"); - paragraph.AppendText(" data Nested "); - paragraph.AppendBookmarkEnd("Nested"); - paragraph.AppendText(" Data Main "); - paragraph.AppendBookmarkEnd("Main"); - - #endregion BookmarkCreation - - FormatType type = FormatType.Docx; - string filename = "Bookmarks.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "Bookmarks.doc"; - contenttype = "application/msword"; - } - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "Bookmarks.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } -} \ No newline at end of file diff --git a/Pages/Word/CloneandMerge.cshtml b/Pages/Word/CloneandMerge.cshtml deleted file mode 100644 index 4f788c99..00000000 --- a/Pages/Word/CloneandMerge.cshtml +++ /dev/null @@ -1,94 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.CloneandMerge - -@using Syncfusion.EJ2 -@{var Title = " Essential DocIO (Word) : Clone, Merge : Syncfusion";} -@section ControlsSection{ -
- @{Html.BeginForm("cloneandmerge", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- - -
- - -
-
- Import Contents: - -
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
- -} -@section ActionDescription{ -
- This sample demonstrates how to clone and merge Word documents using Essential DocIO. -
-} -@section Description{ -
- DocIO allows you to combine multiple documents into single document. -
    -
  • - You can also clone the specific text, paragraph, tables, section etc. from one document to another document. -
  • -
  • - Formatting options are also available for maintaining the formats between the documents. -
  • -
  • - DocIO supports the import options like keep source formatting, merge formatting, text only, use destination styles, continue and restart list numbering. -
  • -
-
-
- More information about clone and merge functionality can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Clone and Merge Example - Syncfusion Demos - } -@section Header{ -

Example of Clone and Merge in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/CloneandMerge.cshtml.cs b/Pages/Word/CloneandMerge.cshtml.cs deleted file mode 100644 index 117b5322..00000000 --- a/Pages/Word/CloneandMerge.cshtml.cs +++ /dev/null @@ -1,109 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class CloneandMerge : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public CloneandMerge(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1, string Group2, string ImportOptions) - { - if (Group1 == null) - return null; - // return View(); - if (Group2 == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/Adventure.docx"; - string dataPathTemp = basePath + @"/Word/Northwind.docx"; - // Opens a source document. - WordDocument document = new WordDocument(); - document.Open(dataPathTemp, FormatType.Docx); - if (Group2 == "UseImportcontents") - { - document.ImportContent(new WordDocument(dataPath, FormatType.Doc), GetImportOption(ImportOptions)); - } - else - { - //Specifies the import option for the cloning the contents. - document.ImportOptions = GetImportOption(ImportOptions); - // Read the source template document - WordDocument destinationDocument = new WordDocument(); - destinationDocument.Open(dataPath, FormatType.Doc); - // Enumerate all the sections from the source document. - foreach (IWSection sec in destinationDocument.Sections) - { - // Cloning all the sections one by one and merging it to the destination document. - document.Sections.Add(sec.Clone()); - // Setting section break code to be the same as the template. - document.LastSection.BreakCode = sec.BreakCode; - } - } - - FormatType type = FormatType.Docx; - string filename = "CloneAndMerge.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "CloneAndMerge.doc"; - contenttype = "application/msword"; - } - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "CloneAndMerge.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - private ImportOptions GetImportOption(string value) - { - switch (value) - { - case "0": - return ImportOptions.KeepSourceFormatting; - case "1": - return ImportOptions.MergeFormatting; - case "2": - return ImportOptions.KeepTextOnly; - case "3": - return ImportOptions.UseDestinationStyles; - case "4": - return ImportOptions.ListContinueNumbering; - case "5": - return ImportOptions.ListRestartNumbering; - } - return ImportOptions.UseDestinationStyles; - } -} \ No newline at end of file diff --git a/Pages/Word/CompareDocuments.cshtml b/Pages/Word/CompareDocuments.cshtml deleted file mode 100644 index 37f3b08b..00000000 --- a/Pages/Word/CompareDocuments.cshtml +++ /dev/null @@ -1,54 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.CompareDocuments - -@using Syncfusion.EJ2 -@{ - var Title = "Essential DocIO (Word) : Compare Documents : Syncfusion"; -} -@section ControlsSection{ -
- @{Html.BeginForm("comparedocuments", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
- -
-
-
- -
-
-
- Html.EndForm(); - } - } -
-} - -@section ActionDescription{ -
- This sample demonstrates how to compare two Word documents using .NET Word (DocIO) library. With this, you can easily identify the changes between two versions of a document. -
-} -@section Description{ -
- The .NET Word library (DocIO) allows you to compare two Word documents and highlight the changes, such as insertions, deletions, and formatting, as tracked changes. -
-
- More information about comparing Word document can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) Library � Compare Documents Example � Syncfusion Demos - } -@section Header{ -

Example of Compare Documents in ASP.NET Core Word (DocIO) Library.

- } \ No newline at end of file diff --git a/Pages/Word/CompareDocuments.cshtml.cs b/Pages/Word/CompareDocuments.cshtml.cs deleted file mode 100644 index b288bc6c..00000000 --- a/Pages/Word/CompareDocuments.cshtml.cs +++ /dev/null @@ -1,77 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class CompareDocuments : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public CompareDocuments(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Compare, string DetectFormat) - { - if (Compare == null) - { - return null; - // return View(); - } - - string basePath = _hostingEnvironment.WebRootPath; - //Loads the original template document. - string dataPathField = basePath + @"/Word/OriginalDocument.docx"; - using (FileStream originalDocumentStream = - new FileStream(dataPathField, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - using (WordDocument originalDocument = new WordDocument(originalDocumentStream, FormatType.Docx)) - { - //Loads the revised template document. - dataPathField = basePath + @"/Word/RevisedDocument.docx"; - using (FileStream revisedDocumentStream = - new FileStream(dataPathField, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - using (WordDocument revisedDocument = new WordDocument(revisedDocumentStream, FormatType.Docx)) - { - if (DetectFormat == "DetectFormat") - { - //Compares the original document with revised document - originalDocument.Compare(revisedDocument, "Nancy Davolio", DateTime.Now.AddDays(-1)); - } - else - { - //Disable the flag to ignore the formatting changes while comparing the documents - ComparisonOptions comparisonOptions = new ComparisonOptions(); - comparisonOptions.DetectFormatChanges = false; - originalDocument.Compare(revisedDocument, "Nancy Davolio", DateTime.Now.AddDays(-1), - comparisonOptions); - } - - FormatType type = FormatType.Docx; - string filename = "CompareDocuments.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - MemoryStream ms = new MemoryStream(); - originalDocument.Save(ms, type); - ms.Position = 0; - return File(ms, contenttype, filename); - } - } - } - } - } -} \ No newline at end of file diff --git a/Pages/Word/CreateEquation.cshtml b/Pages/Word/CreateEquation.cshtml deleted file mode 100644 index acd181f6..00000000 --- a/Pages/Word/CreateEquation.cshtml +++ /dev/null @@ -1,62 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.CreateEquation - -@using Syncfusion.EJ2 -@{ var Title = " Essential DocIO (Word) : Create Equation : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("createequation", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document or PDF. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document and PDF viewer is required to view the resultant PDF. -
-
- Save As : - - -   - - -
-
-
- -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to create a Word document with mathematical equations using Essential DocIO. -
-} -@section Description{ -
- With DocIO, you can create mathematical equations from scratch and insert it into Word documents (DOCX, DOTX, DOCM, DOTM, and XML). -
    -
  • - You can insert an equation in line with text or floating within a line. -
  • -
  • - You can create all types of mathematical equations such as fraction, summation, integral, matrix, and more. -
  • -
-
-
- More information about mathematical equations can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Create Equation Example - Syncfusion Demos - } -@section Header{ -

Example of Create Equation in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/CreateEquation.cshtml.cs b/Pages/Word/CreateEquation.cshtml.cs deleted file mode 100644 index a168fc9c..00000000 --- a/Pages/Word/CreateEquation.cshtml.cs +++ /dev/null @@ -1,708 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Syncfusion.Office; -using Syncfusion.DocIORenderer; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class CreateEquation : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public CreateEquation(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public IActionResult OnPost(string Button, string Group1) - { - if (Button == null) - return null; - // return View(); - - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/Create Equation.docx"; - - // Creates an empty Word document instance. - WordDocument document = new WordDocument(); - // Opens template document. - document.Open(dataPath, FormatType.Docx); - //Gets the last section in the document - WSection section = document.LastSection; - //Sets page margins - document.LastSection.PageSetup.Margins.All = 72; - //Adds new paragraph to the section - IWParagraph paragraph = section.AddParagraph(); - - //Appends text to paragraph - IWTextRange textRange = paragraph.AppendText("Mathematical equations"); - textRange.CharacterFormat.FontSize = 28; - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - paragraph.ParagraphFormat.AfterSpacing = 12; - - #region Sum to the power of n - - //Adds new paragraph to the section - paragraph = AddParagraph(section, "This is an expansion of the sum (1+X) to the power of n."); - //Creates an equation with sum to the power of N - CreateSumToThePowerOfN(paragraph); - - #endregion - - #region Fourier series - - //Adds new paragraph to the section - paragraph = AddParagraph(section, "This is a Fourier series for the function of period 2L"); - //Creates a Fourier series equation - CreateFourierseries(paragraph); - - #endregion - - #region Triple scalar product - - //Adds new paragraph to the section - paragraph = AddParagraph(section, "This is an expansion of triple scalar product"); - //Creates a triple scalar product equation - CreateTripleScalarProduct(paragraph); - - #endregion - - #region Gamma function - - //Adds new paragraph to the section - paragraph = AddParagraph(section, "This is an expansion of gamma function"); - //Creates a gamma function equation - CreateGammaFunction(paragraph); - - #endregion - - #region Vector relation - - //Adds new paragraph to the section - paragraph = AddParagraph(section, "This is an expansion of vector relation "); - //Creates a vector relation equation - CreateVectorRelation(paragraph); - - #endregion - - string filename = ""; - string contenttype = ""; - MemoryStream ms = new MemoryStream(); - - #region Document SaveOption - - if (Group1 == "WordDocx") - { - filename = "CreateEquation.docx"; - contenttype = "application/msword"; - document.Save(ms, FormatType.Docx); - } - else - { - filename = "CreateEquation.pdf"; - contenttype = "application/pdf"; - DocIORenderer renderer = new DocIORenderer(); - renderer.ConvertToPDF(document).Save(ms); - } - - #endregion Document SaveOption - - document.Close(); - - ms.Position = 0; - return File(ms, contenttype, filename); - } - - #region Helper Methods - - /// - /// Adds new paragraph into the section - /// - /// Represents a section in Word document - /// Represents a text to append in paragraph - /// Returns a paragraph to add equation - private IWParagraph AddParagraph(IWSection section, string text) - { - //Adds new paragraph to the section - IWParagraph paragraph = section.AddParagraph(); - //Adds new paragraph to add text - paragraph = section.AddParagraph(); - //Appends text to paragraph - paragraph.AppendText(text); - paragraph.ParagraphFormat.AfterSpacing = 12; - paragraph.ParagraphFormat.BeforeSpacing = 12; - //Adds new paragraph to add equation - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.AfterSpacing = 12; - return paragraph; - } - - /// - /// Creates an expansion of triple scalar product - /// - /// Represents a paragraph to add MathML element - private void CreateTripleScalarProduct(IWParagraph paragraph) - { - WordDocument document = paragraph.Document; - //Creates a MathML element - WMath math = paragraph.AppendMath(); - //Adds an office math - IOfficeMath officeMath = math.MathParagraph.Maths.Add(); - - #region Math text - - //Unicode value of middle dot - string middleDot = "\u00B7"; - string multiplicationSign = "\u00D7"; - string text = "A" + middleDot + "B" + multiplicationSign + "C"; - //Adds a math item - IOfficeMathRunElement officeMathParaItem = AddMathText(document, officeMath, text); - //Sets style for math text - officeMathParaItem.MathFormat.Style = MathStyleType.Bold; - - //Adds math text - officeMathParaItem = AddMathText(document, officeMath, "="); - //Sets style for math text - officeMathParaItem.MathFormat.Style = MathStyleType.Bold; - - //Adds math text - text = "A" + multiplicationSign + "B" + middleDot + "C"; - officeMathParaItem = AddMathText(document, officeMath, text); - //Sets style for math text - officeMathParaItem.MathFormat.Style = MathStyleType.Bold; - - //Adds math text - officeMathParaItem = AddMathText(document, officeMath, "="); - - #endregion - - #region Delimiter - - //Adds a delimiter - IOfficeMathDelimiter mathDelimiter = - officeMath.Functions.Add(MathFunctionType.Delimiter) as IOfficeMathDelimiter; - //Sets begin character for delimiter - mathDelimiter.BeginCharacter = "|"; - //Sets end character for delimiter - mathDelimiter.EndCharacter = "|"; - //Apply formats for delimiter - mathDelimiter.ControlProperties = new WCharacterFormat(document); - (mathDelimiter.ControlProperties as WCharacterFormat).Italic = true; - - //Adds arguments for delimiter - officeMath = mathDelimiter.Equation.Add() as IOfficeMath; - - #region Matrix - - //Add matrix into delimiter - IOfficeMathMatrix mathMatrix = officeMath.Functions.Add(MathFunctionType.Matrix) as IOfficeMathMatrix; - //Add columns in matrix - mathMatrix.Columns.Add(); - mathMatrix.Columns.Add(); - mathMatrix.Columns.Add(); - - - #region First row - - //Adds a new row - IOfficeMathMatrixRow mathMatrixRow = mathMatrix.Rows.Add(); - ///Add values to row - AddMatrixRowValues(document, mathMatrixRow, "A"); - - #endregion - - #region Second row - - //Adds a new row - mathMatrixRow = mathMatrix.Rows.Add(); - ///Add values to row - AddMatrixRowValues(document, mathMatrixRow, "B"); - - #endregion - - #region Third row - - //Adds a new row - mathMatrixRow = mathMatrix.Rows.Add(); - ///Add values to row - AddMatrixRowValues(document, mathMatrixRow, "C"); - - #endregion - - #endregion - - #endregion - } - - /// - /// Creates an expansion of vector relation - /// - /// Represents a paragraph to add MathML element - private void CreateVectorRelation(IWParagraph paragraph) - { - WordDocument document = paragraph.Document; - //Creates a MathML element - WMath math = paragraph.AppendMath(); - - IOfficeMath officeMath = math.MathParagraph.Maths.Add(); - //Adds an accent equation - AddMathAccent(document, officeMath, 8407, "A"); - - //Adds a math text - string middleDot = "\u00B7"; - officeMath = math.MathParagraph.Maths.Add(); - IOfficeMathRunElement officeMathParaItem = AddMathText(document, officeMath, middleDot); - - //Adds an accent equation - officeMath = math.MathParagraph.Maths.Add(); - AddMathAccent(document, officeMath, 8407, "B"); - - //Adds a math text - officeMath = math.MathParagraph.Maths.Add(); - string multiplicationSign = "\u00D7"; - officeMathParaItem = AddMathText(document, officeMath, multiplicationSign); - - //Adds an accent equation - officeMath = math.MathParagraph.Maths.Add(); - AddMathAccent(document, officeMath, 8407, "C"); - - //Adds a math text - officeMath = math.MathParagraph.Maths.Add(); - officeMathParaItem = AddMathText(document, officeMath, "="); - - //Adds an accent equation - officeMath = math.MathParagraph.Maths.Add(); - AddMathAccent(document, officeMath, 8407, "A"); - - //Adds a math text - officeMath = math.MathParagraph.Maths.Add(); - officeMathParaItem = AddMathText(document, officeMath, multiplicationSign); - - //Adds an accent equation - officeMath = math.MathParagraph.Maths.Add(); - AddMathAccent(document, officeMath, 8407, "B"); - - //Adds a math text - officeMath = math.MathParagraph.Maths.Add(); - officeMathParaItem = AddMathText(document, officeMath, middleDot); - - //Adds an accent equation - officeMath = math.MathParagraph.Maths.Add(); - AddMathAccent(document, officeMath, 8407, "C"); - } - - /// - /// Converts short value to string - /// - /// Represents a short value - private static string ConvertShortToString(short value) - { - char chrValue = Convert.ToChar(value); - string strValue = Convert.ToString(chrValue); - return strValue; - } - - /// - /// Creates an equation with sum to the power of N - /// - /// Represents a paragraph to add MathML element - private void CreateSumToThePowerOfN(IWParagraph paragraph) - { - WordDocument document = paragraph.Document; - //Creates a new MathML element - WMath math = paragraph.AppendMath(); - - IOfficeMath officeMath = math.MathParagraph.Maths.Add(); - //Adds a math script element - IOfficeMathScript mathScript = AddMathScript(officeMath, MathScriptType.Superscript); - - #region Delimiter equation - - //Adds a delimiter - IOfficeMathDelimiter mathDelimiter = - mathScript.Equation.Functions.Add(MathFunctionType.Delimiter) as IOfficeMathDelimiter; - //Adds an office math in the delimiter - officeMath = mathDelimiter.Equation.Add() as IOfficeMath; - //Adds a math text - IOfficeMathRunElement mathParaItem = AddMathText(document, officeMath, "1+x"); - //Adds a math text - mathParaItem = AddMathText(document, mathScript.Script, "n"); - - #endregion - - //Adds a math text - officeMath = math.MathParagraph.Maths.Add(1); - mathParaItem = AddMathText(document, officeMath, "=1+"); - - #region Fraction equation - - //Adds a math fraction - IOfficeMathFraction mathFraction = - math.MathParagraph.Maths.Add().Functions.Add(MathFunctionType.Fraction) as IOfficeMathFraction; - //Adds a numerator text - AddMathText(document, mathFraction.Numerator, "nx"); - //Adds a denominator text - AddMathText(document, mathFraction.Denominator, "1!"); - - #endregion - - //Adds a math text - officeMath = math.MathParagraph.Maths.Add(); - mathParaItem = AddMathText(document, officeMath, "+"); - - #region Fraction equation - - //Adds a math fraction - mathFraction = math.MathParagraph.Maths.Add().Functions.Add(MathFunctionType.Fraction) as IOfficeMathFraction; - - #region Numerator - - //Adds a numerator text - AddMathText(document, mathFraction.Numerator, "n"); - - //Adds a delimiter - mathDelimiter = mathFraction.Numerator.Functions.Add(MathFunctionType.Delimiter) as IOfficeMathDelimiter; - //Adds a math text for delimiter - officeMath = mathDelimiter.Equation.Add() as IOfficeMath; - AddMathText(document, officeMath, "n-1"); - - //Adds a math script - mathScript = mathFraction.Numerator.Functions.Add(MathFunctionType.SubSuperscript) as IOfficeMathScript; - //Adds a math text for Superscript - AddMathText(document, mathScript.Equation, "x"); - AddMathText(document, mathScript.Script, "2"); - - #endregion - - #region Denominator - - //Adds a math text for denominator - AddMathText(document, mathFraction.Denominator, "2!"); - - #endregion - - #endregion - - //Adds a math text - officeMath = math.MathParagraph.Maths.Add(); - AddMathText(document, officeMath, "+..."); - } - - /// - /// Creates an expansion of Gamma function - /// - /// Represents a paragraph to add MathML element - private void CreateGammaFunction(IWParagraph paragraph) - { - WordDocument document = paragraph.Document; - //Creates a new MathML element - WMath math = paragraph.AppendMath(); - - //Adds a math text - IOfficeMath officeMath = math.MathParagraph.Maths.Add(); - //Unicode value of capital gamma - string capitalGamma = "\u0393"; - IOfficeMathRunElement officeMathParaItem = AddMathText(document, officeMath, capitalGamma); - //Sets MathML style format for the text - officeMathParaItem.MathFormat.Style = MathStyleType.Regular; - - //Adds a delimiter equation - IOfficeMathDelimiter mathDelimiter = - math.MathParagraph.Maths.Add().Functions.Add(MathFunctionType.Delimiter) as IOfficeMathDelimiter; - //Adds a equation to the delimiter - officeMath = mathDelimiter.Equation.Add(); - //Adds a math text - officeMathParaItem = AddMathText(document, officeMath, "z"); - - //Adds a math text - officeMath = math.MathParagraph.Maths.Add(); - officeMathParaItem = AddMathText(document, officeMath, "="); - - //Adds an n array element - IOfficeMathNArray mathNAry = - math.MathParagraph.Maths.Add().Functions.Add(MathFunctionType.NArray) as IOfficeMathNArray; - //Adds a math text - AddMathText(document, mathNAry.Subscript, "0"); - - //Adds a math text - string infinitySymbol = "\u221E"; - AddMathText(document, mathNAry.Superscript, infinitySymbol); - - //Adds a math superscript - IOfficeMathScript mathScript = AddMathScript(mathNAry.Equation, MathScriptType.Superscript); - //Adds a math text for Superscript - AddMathText(document, mathScript.Equation, "t"); - AddMathText(document, mathScript.Script, "z-1"); - //Adds a Superscript - mathScript = AddMathScript(mathNAry.Equation, MathScriptType.Superscript); - - AddMathText(document, mathScript.Equation, "e"); - AddMathText(document, mathScript.Script, "-t"); - - //Adds a math text in n Array equation - AddMathText(document, mathNAry.Equation, "dt"); - - //Adds a math text - AddMathText(document, math.MathParagraph.Maths.Add(), "="); - - //Adds a fraction equation - IOfficeMathFraction mathFraction = - math.MathParagraph.Maths.Add().Functions.Add(MathFunctionType.Fraction) as IOfficeMathFraction; - //Adds a math script - mathScript = AddMathScript(mathFraction.Numerator, MathScriptType.Superscript); - - //Adds a math text for Superscript - AddMathText(document, mathScript.Equation, "e"); - AddMathText(document, mathScript.Script, "-"); - //Unicode of small gamma - string smallGamma = "\u03B3"; - AddMathText(document, mathScript.Script, smallGamma); - AddMathText(document, mathScript.Script, "z"); - - - //Adds a math text for denominator - AddMathText(document, mathFraction.Denominator, "z"); - - //Adds an n-array element - mathNAry = math.MathParagraph.Maths.Add().Functions.Add(MathFunctionType.NArray) as IOfficeMathNArray; - //Unicode value of n-array product - string symbol = "\u220F"; - //Adds a n-array character - mathNAry.NArrayCharacter = symbol; - //Adds a math text - AddMathText(document, mathNAry.Subscript, "k=1"); - //Adds a math text - AddMathText(document, mathNAry.Superscript, infinitySymbol); - - //Adds a math script - mathScript = AddMathScript(mathNAry.Equation, MathScriptType.Superscript); - //Adds a math delimiter element - mathDelimiter = mathScript.Equation.Functions.Add(MathFunctionType.Delimiter) as IOfficeMathDelimiter; - //Adds a equation to the delimiter equation collection - officeMath = mathDelimiter.Equation.Add(); - //Adds a math text - AddMathText(document, officeMath, "1+"); - - //Adds a fraction element - mathFraction = officeMath.Functions.Add(MathFunctionType.Fraction) as IOfficeMathFraction; - //Adds a math text for numerator - AddMathText(document, mathFraction.Numerator, "z"); - //Adds a math text for denominator - AddMathText(document, mathFraction.Denominator, "k"); - - //Adds a math text - AddMathText(document, mathScript.Script, "-1"); - //Adds a Superscript equation - mathScript = AddMathScript(mathNAry.Equation, MathScriptType.Superscript); - //Adds a math text for Superscript - AddMathText(document, mathScript.Equation, "e"); - AddMathText(document, mathScript.Script, "z"); - officeMathParaItem = AddMathText(document, mathScript.Script, "/"); - officeMathParaItem.MathFormat.HasLiteral = true; - AddMathText(document, mathScript.Script, "k"); - - //Adds a math text - AddMathText(document, math.MathParagraph.Maths.Add(), ","); - - //Adds a math text - officeMathParaItem = AddMathText(document, math.MathParagraph.Maths.Add(), " "); - //Sets style for math text - officeMathParaItem.MathFormat.Style = MathStyleType.Regular; - - //Adds a math text - AddMathText(document, math.MathParagraph.Maths.Add(), smallGamma); - string text = "\u2248" + "0.577216"; - AddMathText(document, math.MathParagraph.Maths.Add(), text); - } - - /// - /// Creates a Fourier series equation - /// - /// Represents a paragraph to add MathML element - private void CreateFourierseries(IWParagraph paragraph) - { - WordDocument document = paragraph.Document; - //Creates a new MathML element - WMath math = paragraph.AppendMath(); - - //Adds a math - IOfficeMath officeMath = math.MathParagraph.Maths.Add(); - //Adds a math text - AddMathText(document, officeMath, "f"); - - //Adds a math delimiter - IOfficeMathDelimiter mathDelimiter = - math.MathParagraph.Maths.Add().Functions.Add(MathFunctionType.Delimiter) as IOfficeMathDelimiter; - //Adds a math in the delimiter - officeMath = mathDelimiter.Equation.Add() as IOfficeMath; - //Adds a math text - AddMathText(document, officeMath, "x"); - AddMathText(document, math.MathParagraph.Maths.Add(), "="); - //Adds a Subscript equation - IOfficeMathScript mathScript = AddMathScript(math.MathParagraph.Maths.Add(), MathScriptType.Subscript); - //Adds a math text - AddMathText(document, mathScript.Equation, "a"); - AddMathText(document, mathScript.Script, "0"); - - //Adds a math text - AddMathText(document, math.MathParagraph.Maths.Add(), "+"); - - //Adds a math n-array - IOfficeMathNArray mathNAry = - math.MathParagraph.Maths.Add().Functions.Add(MathFunctionType.NArray) as IOfficeMathNArray; - //Unicode value of n-array summation - string sigma = "\u2211"; - //Sets the value as the n-array character - mathNAry.NArrayCharacter = sigma; - mathNAry.HasGrow = true; - //Adds a math text - AddMathText(document, mathNAry.Subscript, "n=1"); - - //Adds a math text - string infinitySymbol = "\u221E"; - AddMathText(document, mathNAry.Superscript, infinitySymbol); - //Adds a math delimiter - mathDelimiter = mathNAry.Equation.Functions.Add(MathFunctionType.Delimiter) as IOfficeMathDelimiter; - //Adds an math in the delimiter equation collection - officeMath = mathDelimiter.Equation.Add() as IOfficeMath; - //Adds a math script - mathScript = AddMathScript(officeMath, MathScriptType.Subscript); - - //Adds a math text - AddMathText(document, mathScript.Equation, "a"); - - //Adds a math text - AddMathText(document, mathScript.Script, "n"); - - //Adds a math function - IOfficeMathFunction mathFunction = officeMath.Functions.Add(MathFunctionType.Function) as IOfficeMathFunction; - //Adds a math text - IOfficeMathRunElement mathParaItem = AddMathText(document, mathFunction.FunctionName, "cos"); - mathParaItem.MathFormat.Style = MathStyleType.Regular; - - //Adds a math fraction - IOfficeMathFraction mathFraction = - mathFunction.Equation.Functions.Add(MathFunctionType.Fraction) as IOfficeMathFraction; - //Adds a math text - //Unicode value of PI - string pi = "\uD835\uDF0B"; - string text = "n" + pi + "x"; - AddMathText(document, mathFraction.Numerator, text); - AddMathText(document, mathFraction.Denominator, "L"); - - //Adds a math text - AddMathText(document, officeMath, "+"); - //Adds a math script - mathScript = AddMathScript(officeMath, MathScriptType.Subscript); - //Adds a math text - AddMathText(document, mathScript.Equation, "b"); - AddMathText(document, mathScript.Script, "n"); - - //Adds a function - mathFunction = officeMath.Functions.Add(MathFunctionType.Function) as IOfficeMathFunction; - //Adds a math text - mathParaItem = AddMathText(document, mathFunction.FunctionName, "sin"); - mathParaItem.MathFormat.Style = MathStyleType.Regular; - - //Adds a math fraction element - mathFraction = mathFunction.Equation.Functions.Add(MathFunctionType.Fraction) as IOfficeMathFraction; - //Adds a math text for numerator - AddMathText(document, mathFraction.Numerator, text); - //Adds a math text for denominator - AddMathText(document, mathFraction.Denominator, "L"); - } - - /// - /// Adds a math text - /// - /// Represents a Word document to add math text - /// Represents an office math to add math text - /// Represents the text to set for math item - private IOfficeMathRunElement AddMathText(WordDocument document, IOfficeMath officeMath, string text) - { - //Adds math text - IOfficeMathRunElement officeMathParaItem = - officeMath.Functions.Add(MathFunctionType.RunElement) as IOfficeMathRunElement; - officeMathParaItem.Item = new WTextRange(document); - //Set math text value - (officeMathParaItem.Item as WTextRange).Text = text; - return officeMathParaItem; - } - - /// - /// Adds a math Subscript or Superscript equation - /// - private IOfficeMathScript AddMathScript(IOfficeMath officeMath, MathScriptType mathScriptType) - { - IOfficeMathScript mathScript = officeMath.Functions.Add(MathFunctionType.SubSuperscript) as IOfficeMathScript; - //Sets the script type as Subscript or Superscript - mathScript.ScriptType = mathScriptType; - return mathScript; - } - - /// - /// Adds a accent equation - /// - /// Represents a Word document - /// Represents a office math to add accent equation - /// Represents a accent character - /// Represents a text for accent equation - private void AddMathAccent(WordDocument document, IOfficeMath officeMath, short accentCharValue, string text) - { - IOfficeMathAccent mathAccent = officeMath.Functions.Add(MathFunctionType.Accent) as IOfficeMathAccent; - //Sets the accent character from short value - mathAccent.AccentCharacter = ConvertShortToString(accentCharValue); - //Adds a math text - IOfficeMathRunElement officeMathParaItem = AddMathText(document, mathAccent.Equation, text); - } - - /// - /// Add values in matrix row - /// - /// Represents a Word document to add matrix - /// Represents a matrix row to add values - /// Represents a base text value for Subscript and Superscript equation - private void AddMatrixRowValues(WordDocument document, IOfficeMathMatrixRow mathMatrixRow, string text) - { - //Adds arguments for matrix row - IOfficeMath officeMath = mathMatrixRow.Arguments[0]; - //Adds a Subscript - IOfficeMathScript mathScript = AddMathScript(officeMath, MathScriptType.Subscript); - //Adds a math text - IOfficeMathRunElement officeMathParaItem = AddMathText(document, mathScript.Equation, text); - //Adds math text - officeMathParaItem = AddMathText(document, mathScript.Script, "x"); - - //Adds arguments for matrix row - officeMath = mathMatrixRow.Arguments[1]; - //Adds a script - mathScript = AddMathScript(officeMath, MathScriptType.Subscript); - //Adds math text - officeMathParaItem = AddMathText(document, mathScript.Equation, text); - //Adds math text - officeMathParaItem = AddMathText(document, mathScript.Script, "y"); - - //Adds arguments for matrix row - officeMath = mathMatrixRow.Arguments[2]; - //Adds a script - mathScript = AddMathScript(officeMath, MathScriptType.Subscript); - //Adds math text - officeMathParaItem = AddMathText(document, mathScript.Equation, text); - //Adds math text - officeMathParaItem = AddMathText(document, mathScript.Script, "z"); - } - - #endregion -} \ No newline at end of file diff --git a/Pages/Word/CreateSmartArt.cshtml b/Pages/Word/CreateSmartArt.cshtml deleted file mode 100644 index 5606fd3e..00000000 --- a/Pages/Word/CreateSmartArt.cshtml +++ /dev/null @@ -1,70 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.CreateSmartArt - -@using Syncfusion.EJ2 -@{var Title = " Essential DocIO (Word) : Create SmartArt : Syncfusion";} -@section ControlsSection{ -
- @{Html.BeginForm("createsmartart", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Choose SmartArt Type: - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to create a Word document with SmartArt graphics using the .NET Word Library (DocIO). -
-} -@section Description{ -
- The .NET Word Library (DocIO) supports creating SmartArt graphics from scratch and inserting them into Word documents (DOCX, DOTX, DOCM, and DOTM). -
    -
  • - Create 134 default SmartArt graphics equivalent to those in Microsoft Word. -
  • -
  • - Insert SmartArt as 'in line with text' or 'position relative to the page' in a Word document. -
  • -
  • - Add, modify, and remove SmartArt nodes. -
  • -
-
-
- More information about SmartArt can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Create SmartArt Example - Syncfusion Demos - } -@section Header{ -

Example of Create SmartArt in ASP.NET Core Word (DocIO) Library

- } diff --git a/Pages/Word/CreateSmartArt.cshtml.cs b/Pages/Word/CreateSmartArt.cshtml.cs deleted file mode 100644 index 88bc6502..00000000 --- a/Pages/Word/CreateSmartArt.cshtml.cs +++ /dev/null @@ -1,647 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Syncfusion.Office; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class CreateSmartArt : PageModel -{ - private readonly IWebHostEnvironment _hostingEnvironment; - public CreateSmartArt(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public void OnGet() - { - - } - - public IActionResult OnPost(string SmartArtType) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/CreateSmartArtInput.docx"; - - // Creates an empty Word document instance. - WordDocument document = new WordDocument(); - // Opens a document. - document.Open(dataPath, FormatType.Docx); - - string filename = ""; - switch (SmartArtType) - { - case "0": - // Create a List SmartArt diagram. - CreateListSmartArt(document); - filename = "CreateListSmartArt.docx"; - break; - case "1": - // Create a Process SmartArt diagram. - CreateProcessSmartArt(document); - filename = "CreateProcessSmartArt.docx"; - break; - case "2": - // Create a Cycle SmartArt diagram. - CreateCycleSmartArt(document); - filename = "CreateCycleSmartArt.docx"; - break; - case "3": - // Create a Hierarchy SmartArt diagram. - CreateHierarchySmartArt(document); - filename = "CreateHierarchySmartArt.docx"; - break; - case "4": - // Create a Relationship SmartArt diagram. - CreateRelationshipSmartArt(document); - filename = "CreateRelationshipSmartArt.docx"; - break; - case "5": - // Create a Matrix SmartArt diagram. - CreateMatrixSmartArt(document); - filename = "CreateMatrixSmartArt.docx"; - break; - case "6": - // Create a Pyramid SmartArt diagram. - CreatePyramidSmartArt(document); - filename = "CreatePyramidSmartArt.docx"; - break; - case "7": - // Create a Picture SmartArt diagram. Pass basePath to load images. - CreatePictureSmartArt(document, basePath); - filename = "CreatePictureSmartArt.docx"; - break; - } - - FormatType type = FormatType.Docx; - string contenttype = "application/vnd.ms-word.document.12"; - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - - /// - /// Creates a list SmartArt diagrams. - /// - /// The Word document where the SmartArt diagram will be added. - private void CreateListSmartArt(WordDocument document) - { - IWSection section = document.Sections[0]; - // Retrieves the first paragraph and add text. - IWParagraph paragraph = section.Paragraphs[0]; - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - IWTextRange textRange = paragraph.AppendText("Project Planning List"); - textRange.CharacterFormat.FontSize = 28f; - paragraph = section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - - // Add SmartArt with "Vertical Chevron List" layout. - WSmartArt verticalChevronListSmartArt = paragraph.AppendSmartArt(OfficeSmartArtType.VerticalChevronList, 432, 252); - - // Add the "Planning" phase node. - IOfficeSmartArtNode planningNode = verticalChevronListSmartArt.Nodes[0]; - planningNode.TextBody.Text = "Planning"; - planningNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 15f; - AddSmartArtChildNode(planningNode, "Set clear objectives.", "Allocate resources effectively.", 23f); - - // Add the "Execution" phase node. - IOfficeSmartArtNode executionNode = verticalChevronListSmartArt.Nodes[1]; - executionNode.TextBody.Text = "Execution"; - executionNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 15f; - AddSmartArtChildNode(executionNode, "Assign tasks to the team.", "Track progress regularly.", 23f); - - // Add the "Review" phase node. - IOfficeSmartArtNode reviewNode = verticalChevronListSmartArt.Nodes[2]; - reviewNode.TextBody.Text = "Review"; - reviewNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 15f; - AddSmartArtChildNode(reviewNode, "Analyze outcomes.", "Identify lessons learned.", 23f); - - paragraph = section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - - // Add SmartArt with "Horizontal BulletList" layout - WSmartArt horizontalBulletListSmartArt = paragraph.AppendSmartArt(OfficeSmartArtType.HorizontalBulletList, 432, 252); - // Add the "Planning" phase node. - planningNode = horizontalBulletListSmartArt.Nodes[0]; - planningNode.TextBody.Text = "Planning"; - planningNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 20f; - AddSmartArtChildNode(planningNode, "Set clear objectives.", "Allocate resources effectively.", 20f); - - // Add the "Execution" phase node - executionNode = horizontalBulletListSmartArt.Nodes[1]; - executionNode.TextBody.Text = "Execution"; - executionNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 20f; - AddSmartArtChildNode(executionNode, "Assign tasks to the team.", "Track progress regularly.", 20f); - - // Add the "Review" phase node - reviewNode = horizontalBulletListSmartArt.Nodes[2]; - reviewNode.TextBody.Text = "Review"; - reviewNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 20f; - AddSmartArtChildNode(reviewNode, "Analyze outcomes.", "Identify lessons learned.", 20f); - } - - /// - /// Creates a Process SmartArt diagrams. - /// - /// The Word document where the SmartArt diagram will be added. - private void CreateProcessSmartArt(WordDocument document) - { - IWSection section = document.Sections[0]; - - // Retrieves the first paragraph and add text. - IWParagraph paragraph = section.Paragraphs[0]; - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - IWTextRange textRange1 = paragraph.AppendText("Healthy Lifestyle Journey"); - textRange1.CharacterFormat.FontSize = 28f; - textRange1.CharacterFormat.FontName = "Times New Roman"; - paragraph = section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - - // Add SmartArt with "Segmented Process" layout - WSmartArt segmentedProcessSmartArt = paragraph.AppendSmartArt(OfficeSmartArtType.SegmentedProcess, 432, 252); - - // Add the "Start" phase node - IOfficeSmartArtNode startProcess = segmentedProcessSmartArt.Nodes[0]; - startProcess.TextBody.Text = "Start"; - startProcess.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 15f; - AddSmartArtChildNode(startProcess, "Begin exercise and eat balanced meals.", "Stay hydrated and prioritize sleep.", 12f); - - // Add the "Track" phase node - IOfficeSmartArtNode trackProcess = segmentedProcessSmartArt.Nodes[1]; - trackProcess.TextBody.Text = "Track"; - trackProcess.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 15f; - AddSmartArtChildNode(trackProcess, "Record physical activity and food intake.", "Use a fitness app or journal.", 12f); - - // Add the "Sustain" phase node - IOfficeSmartArtNode sustainProcess = segmentedProcessSmartArt.Nodes[2]; - sustainProcess.TextBody.Text = "Sustain"; - sustainProcess.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 15f; - AddSmartArtChildNode(sustainProcess, "Maintain healthy habits consistently.", "Set goals for continuous improvement.", 12f); - - paragraph = section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - - // Add SmartArt with "StepUp Process" layout - WSmartArt stepUpProcessSmartArt = paragraph.AppendSmartArt(OfficeSmartArtType.StepUpProcess, 432, 252); - - // Add the "Start" phase node - IOfficeSmartArtNode startNode = stepUpProcessSmartArt.Nodes[0]; - startNode.TextBody.Text = "Start"; - startNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 17f; - startNode.ChildNodes.Add(); - startNode.ChildNodes.Add(); - AddSmartArtChildNode(startNode, "Begin exercise and eat balanced meals.", "Stay hydrated and prioritize sleep.", 13f); - - // Add the "Track" phase node - IOfficeSmartArtNode trackNode = stepUpProcessSmartArt.Nodes[1]; - trackNode.TextBody.Text = "Track"; - trackNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 17f; - trackNode.ChildNodes.Add(); - trackNode.ChildNodes.Add(); - AddSmartArtChildNode(trackNode, "Record physical activity and food intake.", "Use a fitness app or journal.", 13f); - - // Add the "Sustain" phase node - IOfficeSmartArtNode sustainNode = stepUpProcessSmartArt.Nodes[2]; - sustainNode.TextBody.Text = "Sustain"; - sustainNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 17f; - sustainNode.ChildNodes.Add(); - sustainNode.ChildNodes.Add(); - AddSmartArtChildNode(sustainNode, "Maintain healthy habits consistently.", "Set goals for continuous improvement.", 13f); - } - - /// - /// Creates a Cycle SmartArt diagrams. - /// - /// The Word document where the SmartArt diagram will be added. - private void CreateCycleSmartArt(WordDocument document) - { - IWSection section = document.Sections[0]; - - // Retrieves the first paragraph and add text. - IWParagraph paragraph = section.Paragraphs[0]; - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - IWTextRange textRange1 = paragraph.AppendText("Customer Service Cycle"); - textRange1.CharacterFormat.FontSize = 28f; - paragraph = section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - - // Add SmartArt with "Block Cycle" layout - WSmartArt blockCycleSmartArt = paragraph.AppendSmartArt(OfficeSmartArtType.BlockCycle, 432, 252); - - // Add the "Inquiry" phase node - IOfficeSmartArtNode inquiryNode = blockCycleSmartArt.Nodes[0]; - inquiryNode.TextBody.Text = "Inquiry"; - inquiryNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 15f; - - // Add the "Response" phase node - IOfficeSmartArtNode responseNode = blockCycleSmartArt.Nodes[1]; - responseNode.TextBody.Text = "Response"; - responseNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 15f; - - // Add the "Resolution" phase node - IOfficeSmartArtNode resolutionNode = blockCycleSmartArt.Nodes[2]; - resolutionNode.TextBody.Text = "Resolution"; - resolutionNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 15f; - - // Add the "Feedback" phase node - IOfficeSmartArtNode feedBackNode = blockCycleSmartArt.Nodes[3]; - feedBackNode.TextBody.Text = "Feedback"; - feedBackNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 15f; - - // Add the "Follow-up" phase node - IOfficeSmartArtNode followupNode = blockCycleSmartArt.Nodes[4]; - followupNode.TextBody.Text = "Follow-up"; - followupNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 15f; - - paragraph = section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - - // Add SmartArt with "Basic Cycle" layout - WSmartArt basicCycleSmartArt = paragraph.AppendSmartArt(OfficeSmartArtType.BasicCycle, 432, 252); - - // Add the "Inquiry" phase node - IOfficeSmartArtNode inquiryCycleNode = basicCycleSmartArt.Nodes[0]; - inquiryCycleNode.TextBody.Text = "Inquiry"; - inquiryCycleNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 11f; - - // Add the "Response" phase node - IOfficeSmartArtNode responseCycleNode = basicCycleSmartArt.Nodes[1]; - responseCycleNode.TextBody.Text = "Response"; - responseCycleNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 11f; - - // Add the "Resolution" phase node - IOfficeSmartArtNode resolutionCycleNode = basicCycleSmartArt.Nodes[2]; - resolutionCycleNode.TextBody.Text = "Resolution"; - resolutionCycleNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 11f; - - // Add the "Feedback" phase node - IOfficeSmartArtNode feedbackCycleNode = basicCycleSmartArt.Nodes[3]; - feedbackCycleNode.TextBody.Text = "Feedback"; - feedbackCycleNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 11f; - - // Add the "Follow-up" phase node - IOfficeSmartArtNode followupCycleNode = basicCycleSmartArt.Nodes[4]; - followupCycleNode.TextBody.Text = "Follow-up"; - followupCycleNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 11f; - - } - - /// - /// Creates a Hierarchy SmartArt diagrams. - /// - /// The Word document where the SmartArt diagram will be added. - private void CreateHierarchySmartArt(WordDocument document) - { - IWSection section = document.Sections[0]; - - // Retrieves the first paragraph and add text. - IWParagraph paragraph = section.Paragraphs[0]; - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - IWTextRange textRange1 = paragraph.AppendText("Company Organizational Structure"); - textRange1.CharacterFormat.FontSize = 28f; - - paragraph = section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - - // Add SmartArt with "Hierarchy" layout - WSmartArt hierarchySmartArt = paragraph.AppendSmartArt(OfficeSmartArtType.Hierarchy, 432, 252); - - // Configure the "Manager" node and its hierarchy - IOfficeSmartArtNode manager = hierarchySmartArt.Nodes[0]; - manager.TextBody.Text = "Manager"; - manager.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 20f; - manager.ChildNodes[0].TextBody.Text = "Team Lead 1"; - manager.ChildNodes[0].TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 20f; - manager.ChildNodes[0].ChildNodes[0].TextBody.Text = "Employee 1"; - manager.ChildNodes[0].ChildNodes[0].TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 20f; - manager.ChildNodes[0].ChildNodes[1].TextBody.Text = "Employee 2"; - manager.ChildNodes[0].ChildNodes[1].TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 20f; - manager.ChildNodes[1].TextBody.Text = "Team Lead 2"; - manager.ChildNodes[1].TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 20f; - manager.ChildNodes[1].ChildNodes[0].TextBody.Text = "Employee 3"; - manager.ChildNodes[1].ChildNodes[0].TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 20f; - - paragraph = section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - - // Add SmartArt with "Horizontal Hierarchy" layout - WSmartArt horizontalHierarchySmartArt = paragraph.AppendSmartArt(OfficeSmartArtType.HorizontalHierarchy, 432, 252); - // Configure the "Manager" node and its hierarchy - IOfficeSmartArtNode horizontalHierarchy = horizontalHierarchySmartArt.Nodes[0]; - horizontalHierarchy.TextBody.Text = "Manager"; - horizontalHierarchy.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 24f; - horizontalHierarchy.ChildNodes[0].TextBody.Text = "Team Lead 1"; - horizontalHierarchy.ChildNodes[0].TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 24f; - horizontalHierarchy.ChildNodes[0].ChildNodes[0].TextBody.Text = "Employee 1"; - horizontalHierarchy.ChildNodes[0].ChildNodes[0].TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 24f; - horizontalHierarchy.ChildNodes[0].ChildNodes[1].TextBody.Text = "Employee 2"; - horizontalHierarchy.ChildNodes[0].ChildNodes[1].TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 24f; - horizontalHierarchy.ChildNodes[1].TextBody.Text = "Team Lead 2"; - horizontalHierarchy.ChildNodes[1].TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 24f; - horizontalHierarchy.ChildNodes[1].ChildNodes[0].TextBody.Text = "Employee 3"; - horizontalHierarchy.ChildNodes[1].ChildNodes[0].TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 24f; - } - - /// - /// Creates a Relationship SmartArt diagrams. - /// - /// The Word document where the SmartArt diagram will be added. - private void CreateRelationshipSmartArt(WordDocument document) - { - IWSection section = document.Sections[0]; - - // Retrieves the first paragraph and add text. - IWParagraph paragraph = section.Paragraphs[0]; - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - IWTextRange textRange1 = paragraph.AppendText("Remote Work vs Office Work"); - textRange1.CharacterFormat.FontSize = 28f; - - paragraph = section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - - // Add SmartArt with "Counter Balance Arrows" layout - WSmartArt counterBalanceArrowsSmartArt = paragraph.AppendSmartArt(OfficeSmartArtType.CounterBalanceArrows, 432, 252); - // Add the "Remote Work" phase node - IOfficeSmartArtNode remoteWorkNode = counterBalanceArrowsSmartArt.Nodes[0]; - remoteWorkNode.TextBody.Text = "Remote Work"; - remoteWorkNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 19f; - remoteWorkNode.ChildNodes.Add(); - remoteWorkNode.ChildNodes.Add(); - AddSmartArtChildNode(remoteWorkNode, "Flexibility", "Work-Life Balance", 15f); - - // Add the "Office Work" phase node - IOfficeSmartArtNode officeWorkNode = counterBalanceArrowsSmartArt.Nodes[1]; - officeWorkNode.TextBody.Text = "Office Work"; - officeWorkNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 19f; - officeWorkNode.ChildNodes.Add(); - officeWorkNode.ChildNodes.Add(); - AddSmartArtChildNode(officeWorkNode, "Collaboration", "Structured Environment", 15f); - - paragraph = section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - - // Add SmartArt with "Opposing Ideas" layout - WSmartArt opposingIdeasSmartArt = paragraph.AppendSmartArt(OfficeSmartArtType.OpposingIdeas, 432, 252); - - // Add the "Remote Work" phase node - remoteWorkNode = opposingIdeasSmartArt.Nodes[0]; - remoteWorkNode.TextBody.Text = "Remote Work"; - remoteWorkNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 15f; - remoteWorkNode.ChildNodes.Add(); - AddSmartArtChildNode(remoteWorkNode, "Flexibility", "Work-Life Balance", 20f); - - // Add the "Office Work" phase node - officeWorkNode = opposingIdeasSmartArt.Nodes[1]; - officeWorkNode.TextBody.Text = "Office Work"; - officeWorkNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 15f; - officeWorkNode.ChildNodes.Add(); - AddSmartArtChildNode(officeWorkNode, "Collaboration", "Structured Environment", 20f); - } - - /// - /// Creates a Matrix SmartArt diagrams. - /// - /// The Word document where the SmartArt diagram will be added. - private void CreateMatrixSmartArt(WordDocument document) - { - IWSection section = document.Sections[0]; - - // Retrieves the first paragraph and add text. - IWParagraph paragraph = section.Paragraphs[0]; - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - IWTextRange textRange1 = paragraph.AppendText("Marketing Campaign Process"); - textRange1.CharacterFormat.FontSize = 28f; - - paragraph = section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - - // Add SmartArt with "Grid Matrix" layout - WSmartArt gridMatrixSmartArt = paragraph.AppendSmartArt(OfficeSmartArtType.GridMatrix, 432, 252); - - // Add the "Planning" phase node - IOfficeSmartArtNode planningNode = gridMatrixSmartArt.Nodes[0]; - planningNode.TextBody.Text = "Planning"; - planningNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 13f; - planningNode.ChildNodes.Add(); - planningNode.ChildNodes.Add(); - AddSmartArtChildNode(planningNode, "Define goals and target audience.", "Identify key messaging and channels.", 10f); - - // Add the "Execution" phase node - IOfficeSmartArtNode executionNode = gridMatrixSmartArt.Nodes[1]; - executionNode.TextBody.Text = "Execution"; - executionNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 13f; - executionNode.ChildNodes.Add(); - executionNode.ChildNodes.Add(); - AddSmartArtChildNode(executionNode, "Create content and implement strategies.", "Launch campaigns across chosen platforms.", 10f); - - // Add the "Monitoring" phase node - IOfficeSmartArtNode monitoringNode = gridMatrixSmartArt.Nodes[2]; - monitoringNode.TextBody.Text = "Monitoring"; - monitoringNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 13f; - monitoringNode.ChildNodes.Add(); - monitoringNode.ChildNodes.Add(); - AddSmartArtChildNode(monitoringNode, "Track performance and engagement.", "Collect data and identify trends.", 10f); - - // Add the "Optimization" phase node - IOfficeSmartArtNode optimizingNode = gridMatrixSmartArt.Nodes[3]; - optimizingNode.TextBody.Text = "Optimization"; - optimizingNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 13f; - optimizingNode.ChildNodes.Add(); - optimizingNode.ChildNodes.Add(); - AddSmartArtChildNode(optimizingNode, "Adjust strategies based on insights.", "Fine-tune campaigns for better results.", 10f); - - paragraph = section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - - // Add SmartArt with "Cycle Matrix" layout - WSmartArt cycleMatrixSmartArt = paragraph.AppendSmartArt(OfficeSmartArtType.CycleMatrix, 432, 252); - - // Add the "Planning" phase node - planningNode = cycleMatrixSmartArt.Nodes[0]; - planningNode.TextBody.Text = "Planning"; - planningNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 12f; - planningNode.ChildNodes.Add(); - AddSmartArtChildNode(planningNode, "Define goals and target audience.", "Identify key messaging and channels.", 8f); - - // Add the "Execution" phase node - executionNode = cycleMatrixSmartArt.Nodes[1]; - executionNode.TextBody.Text = "Execution"; - executionNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 12f; - executionNode.ChildNodes.Add(); - AddSmartArtChildNode(executionNode, "Create content and implement strategies.", "Launch campaigns across chosen platforms.", 8f); - - // Add the "Monitoring" phase node - monitoringNode = cycleMatrixSmartArt.Nodes[2]; - monitoringNode.TextBody.Text = "Monitoring"; - monitoringNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 12f; - monitoringNode.ChildNodes.Add(); - AddSmartArtChildNode(monitoringNode, "Track performance and engagement.", "Collect data and identify trends.", 8f); - - // Add the "Optimization" phase node - optimizingNode = cycleMatrixSmartArt.Nodes[3]; - optimizingNode.TextBody.Text = "Optimization"; - optimizingNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 12f; - optimizingNode.ChildNodes.Add(); - AddSmartArtChildNode(optimizingNode, "Adjust strategies based on insights.", "Fine-tune campaigns for better results.", 8f); - - } - - /// - /// Creates a Pyramid SmartArt diagrams. - /// - /// The Word document where the SmartArt diagram will be added. - private void CreatePyramidSmartArt(WordDocument document) - { - IWSection section = document.Sections[0]; - - // Retrieves the first paragraph and add text. - IWParagraph paragraph = section.Paragraphs[0]; - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - IWTextRange textRange1 = paragraph.AppendText("Personal Growth"); - textRange1.CharacterFormat.FontSize = 28f; - - paragraph = section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - - // Add SmartArt with "Basic Pyramid" layout - WSmartArt basicPyramidSmartArt = paragraph.AppendSmartArt(OfficeSmartArtType.BasicPyramid, 432, 252); - - // Add the "Achievement" phase node - IOfficeSmartArtNode achievementNode = basicPyramidSmartArt.Nodes[0]; - achievementNode.TextBody.Text = "Achievement"; - achievementNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 26f; - - // Add the "Skill Development" phase node - IOfficeSmartArtNode SkilldevelopmentNode = basicPyramidSmartArt.Nodes[1]; - SkilldevelopmentNode.TextBody.Text = "Skill Development"; - SkilldevelopmentNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 26f; - - // Add the "Self-Awareness" phase node - IOfficeSmartArtNode selfAwarenessNode = basicPyramidSmartArt.Nodes[2]; - selfAwarenessNode.TextBody.Text = "Self-Awareness"; - selfAwarenessNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 26f; - - paragraph = section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - - // Add SmartArt with "Pyramid List" layout - WSmartArt pyramidListSmartArt = paragraph.AppendSmartArt(OfficeSmartArtType.PyramidList, 432, 252); - - // Add the "Self-Awareness" phase node - selfAwarenessNode = pyramidListSmartArt.Nodes[0]; - selfAwarenessNode.TextBody.Text = "Self-Awareness"; - selfAwarenessNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 20f; - - // Add the "Skill Development" phase node - SkilldevelopmentNode = pyramidListSmartArt.Nodes[1]; - SkilldevelopmentNode.TextBody.Text = "Skill Development"; - SkilldevelopmentNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 20f; - - // Add the "Achievement" phase node - achievementNode = pyramidListSmartArt.Nodes[2]; - achievementNode.TextBody.Text = "Achievement"; - achievementNode.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 20f; - } - - /// - /// Creates a Picture SmartArt diagrams. - /// - /// The Word document where the SmartArt diagram will be added. - private void CreatePictureSmartArt(WordDocument document, string basePath) - { - IWSection section = document.Sections[0]; - - // Retrieves the first paragraph and add text. - IWParagraph paragraph = section.Paragraphs[0]; - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - WTextRange textRange1 = paragraph.AppendText("Employee Report") as WTextRange; - textRange1.CharacterFormat.FontSize = 28f; - - paragraph = section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - - // Add SmartArt with "Picture Strips" layout - WSmartArt pictureStripsSmartArt = paragraph.AppendSmartArt(OfficeSmartArtType.PictureStrips, 432, 252); - - // Add the "Employee1" phase node - IOfficeSmartArtNode employeeNode1 = pictureStripsSmartArt.Nodes[0]; - employeeNode1.TextBody.Text = "Nancy Davolio"; - employeeNode1.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 25f; - AddPicture(employeeNode1, basePath + @"/images/Word/Nancy Davolio.png"); - - // Add the "Employee2" phase node - IOfficeSmartArtNode employeeNode2 = pictureStripsSmartArt.Nodes[1]; - employeeNode2.TextBody.Text = "Andrew Fuller"; - employeeNode2.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 25f; - AddPicture(employeeNode2, basePath + @"/images/Word/Andrew Fuller.png"); - - // Add the "Employee3" phase node - IOfficeSmartArtNode employeeNode3 = pictureStripsSmartArt.Nodes[2]; - employeeNode3.TextBody.Text = "Janet Leverling"; - employeeNode3.TextBody.Paragraphs[0].TextParts[0].Font.FontSize = 25f; - AddPicture(employeeNode3, basePath + @"/images/Word/Janet Leverling.png"); - } - - /// - /// Adds two child nodes to a given SmartArt node and applies formatting. - /// - /// The SmartArt node to which child nodes will be added. - /// Text content for the first child node. - /// Text content for the second child node. - /// Font size to be applied to the child nodes. - private void AddSmartArtChildNode(IOfficeSmartArtNode node, string childText1, string childText2, float fontSize) - { - node.ChildNodes[0].TextBody.Text = childText1; - node.ChildNodes[1].TextBody.Text = childText2; - for (int i = 0; i < node.ChildNodes.Count; i++) - { - node.ChildNodes[i].TextBody.Paragraphs[0].TextParts[0].Font.FontSize = fontSize; - } - } - - /// - /// Loads an image from the specified file path and assigns it to the given SmartArt node. - /// - /// The SmartArt node where the image will be applied. - /// The file path of the image to be assigned. - private void AddPicture(IOfficeSmartArtNode node, string imagePath) - { - // Load the image and assign it to the SmartArt node - FileStream pictureStream = new FileStream(imagePath, FileMode.Open); - MemoryStream memoryStream = new MemoryStream(); - pictureStream.CopyTo(memoryStream); - - //Convert the memory stream into a byte array - byte[] picByte = memoryStream.ToArray(); - node.Shapes[1].Fill.FillType = OfficeShapeFillType.Picture; - node.Shapes[1].Fill.PictureFill.ImageBytes = picByte; - //Dispose the image stream. - pictureStream.Dispose(); - memoryStream.Dispose(); - } -} diff --git a/Pages/Word/CreateUsingLaTeX.cshtml b/Pages/Word/CreateUsingLaTeX.cshtml deleted file mode 100644 index 5d50cc68..00000000 --- a/Pages/Word/CreateUsingLaTeX.cshtml +++ /dev/null @@ -1,71 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.CreateUsingLaTeX - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Create using LaTeX : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("createusinglatex", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document or PDF. Please note that a Word-compatible viewer is required to open and view the Word document and a PDF viewer is required to view the resultant PDF. -
- LaTeX to create equation : -
-
- -
-
-
- Save As : - - -   - - -
-
-
- -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to create a Word document with mathematical equation using LaTeX using the .NET Word (DocIO) library. -
-} -@section Description{ -
- The .NET Word (DocIO) library provides support for creating mathematical equations from scratch using LaTeX and inserting them into Word documents (DOCX, DOTX, DOCM, DOTM, and XML). -
    -
  • - You can insert an equation in line with the text or float it within a line. -
  • -
  • - You can create various types of mathematical equations, including fractions, summations, integrals, matrices, and more. -
  • -
  • - You can also create equations using LaTeX. -
  • -
-
-
- More information about mathematical equations can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library – Create equation using LaTeX example - Syncfusion Demos - } -@section Header{ -

Example of Create Equation using LaTeX in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/CreateUsingLaTeX.cshtml.cs b/Pages/Word/CreateUsingLaTeX.cshtml.cs deleted file mode 100644 index 9e3f0a0c..00000000 --- a/Pages/Word/CreateUsingLaTeX.cshtml.cs +++ /dev/null @@ -1,87 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Syncfusion.DocIORenderer; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class CreateUsingLaTeX : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public CreateUsingLaTeX(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public IActionResult OnPost(string LaTeX, string Button, string Group1) - { - if (Button == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/Create Equation.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - // Creates an empty Word document instance. - WordDocument document = new WordDocument(); - // Opens template document. - document.Open(dataPath, FormatType.Docx); - - //Get the last section in the document - WSection section = document.LastSection; - //Set page margins - section.PageSetup.Margins.All = 72; - //Add new paragraph to the section - IWParagraph paragraph = section.AddParagraph(); - - //Append text to paragraph - IWTextRange textRange = paragraph.AppendText("Mathematical equation"); - textRange.CharacterFormat.FontSize = 28; - paragraph.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - paragraph.ParagraphFormat.AfterSpacing = 12; - - //Add new paragraph to the section. - paragraph = section.AddParagraph(); - - //Append mathematical equation using LaTeX. - if (!string.IsNullOrEmpty(LaTeX)) - paragraph.AppendMath(LaTeX); - - string filename = ""; - MemoryStream ms = new MemoryStream(); - - #region Document SaveOption - - if (Group1 == "WordDocx") - { - filename = "CreateEquationLaTeX.docx"; - contenttype = "application/msword"; - document.Save(ms, FormatType.Docx); - } - else - { - filename = "CreateEquationLaTeX.pdf"; - contenttype = "application/pdf"; - DocIORenderer renderer = new DocIORenderer(); - renderer.ConvertToPDF(document).Save(ms); - } - - #endregion Document SaveOption - - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } -} \ No newline at end of file diff --git a/Pages/Word/DOCtoODT.cshtml b/Pages/Word/DOCtoODT.cshtml deleted file mode 100644 index ab739019..00000000 --- a/Pages/Word/DOCtoODT.cshtml +++ /dev/null @@ -1,54 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.DOCtoODT - -@using Syncfusion.EJ2 -@{ var Title = " Essential DocIO (Word) : Export, Word to ODT, Conversion : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("doctoodt", "word", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view the resultant ODT document generated by Essential DocIO. -
-
- Select Document : - @Html.TextBox("file", "", new { type = "file", accept = ".doc,.docx,.rtf,.dot,.dotm,.dotx,docm,.xml" }) -
-
-
- -
-
- @Model.Message -
-
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to convert the Word document to ODT using Essential DocIO. -
-} -@section Description{ -
- DocIO provides support to convert the Word document to Open Document Text format. -
-
- More information about ODT conversion can be found on this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Word to ODT Example - Syncfusion Demos - } -@section Header{ -

Example of Word to ODT in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/DOCtoODT.cshtml.cs b/Pages/Word/DOCtoODT.cshtml.cs deleted file mode 100644 index 7d13d3be..00000000 --- a/Pages/Word/DOCtoODT.cshtml.cs +++ /dev/null @@ -1,81 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class DOCtoODT : PageModel -{ - public void OnGet() - { - - } - - public string Message { get; set; } - - public ActionResult OnPost(string button) - { - if (button == null) - return null; - // return View(); - if (Request.Form.Files != null) - { - var extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - if (extension == ".doc" || extension == ".docx" || extension == ".dot" || extension == ".dotx" || - extension == ".dotm" || extension == ".docm" - || extension == ".xml" || extension == ".rtf") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - WordDocument document = new WordDocument(stream, FormatType.Automatic); - stream.Dispose(); - stream = null; - //Convert word document into ODT document - try - { - #region Document SaveOption - - //Save as .odt format - FormatType type = FormatType.Odt; - string filename = "WordToODT.odt"; - string contenttype = "application/msword"; - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - catch (Exception) - { - } - finally - { - - } - } - else - { - Message = string.Format("Please choose Word format document to convert to ODT"); - } - } - else - { - Message = - string.Format("Browse a Word document and then click the button to convert as a ODT document"); - } - - return null; - // return View(); - } -} \ No newline at end of file diff --git a/Pages/Word/DocumentProtection.cshtml b/Pages/Word/DocumentProtection.cshtml deleted file mode 100644 index 2583eb6b..00000000 --- a/Pages/Word/DocumentProtection.cshtml +++ /dev/null @@ -1,96 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.DocumentProtection - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Document Protection : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("documentprotection", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Protection Type : - -
-
- - -
-
- Password : - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
- - -} -@section ActionDescription{ -
- This sample demonstrates how to protect the Word document from editing using Essential DocIO. -
-} -@section Description{ -
- The .NET Word Library (DocIO) supports all Microsoft Word protection types and enables disabling document protection. -
    -
  • - Generate forms restricted to filling form fields only. -
  • -
  • - Generate documents allowing only adding or modifying comments. -
  • -
  • - Generate documents allowing only accepting or rejecting revisions. -
  • -
  • - Generate documents with full editing restriction, permitting only content viewing. -
  • -
  • - Add editable ranges to allow everyone to edit specific parts, even in protected documents. -
  • -
-
-
- More information about the document protection can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Document Protection Example - Syncfusion Demos - } -@section Header{ -

Example of Document Protection in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/DocumentProtection.cshtml.cs b/Pages/Word/DocumentProtection.cshtml.cs deleted file mode 100644 index 866c1380..00000000 --- a/Pages/Word/DocumentProtection.cshtml.cs +++ /dev/null @@ -1,143 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class DocumentProtection : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public DocumentProtection(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Protection_Type, string Password1, string EditableRangeOption) - { - WordDocument document; - ProtectionType protectionType; - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - //Loads the template document. - if (Protection_Type == "AllowOnlyFormFields") - { - dataPath = basePath + @"/Word/TemplateFormFields.docx"; - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - document = new WordDocument(fileStream, FormatType.Docx); - fileStream.Dispose(); - fileStream = null; - // Sets the protection type as allow only Form Fields. - protectionType = ProtectionType.AllowOnlyFormFields; - } - else if (Protection_Type == "AllowOnlyComments") - { - dataPath = basePath + @"/Word/TemplateComments.docx"; - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - document = new WordDocument(fileStream, FormatType.Docx); - fileStream.Dispose(); - fileStream = null; - if (EditableRangeOption == "EditableRange") - // If the "Make part of the document editable for everyone" checkbox is checked, - // add editable ranges to allow unrestricted editing in specific sections. - AddEditableRange(document); - // Sets the protection type as allow only Comments. - protectionType = ProtectionType.AllowOnlyComments; - } - else if (Protection_Type == "AllowOnlyRevisions") - { - dataPath = basePath + @"/Word/TemplateRevisions.docx"; - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - document = new WordDocument(fileStream, FormatType.Docx); - fileStream.Dispose(); - fileStream = null; - // Enables track changes in the document. - document.TrackChanges = true; - // Sets the protection type as allow only Revisions. - protectionType = ProtectionType.AllowOnlyRevisions; - } - else if (Protection_Type == "AllowOnlyReading") - { - dataPath = basePath + @"/Word/TemplateReading.docx"; - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - document = new WordDocument(fileStream, FormatType.Docx); - fileStream.Dispose(); - fileStream = null; - if(EditableRangeOption == "EditableRange") - // If the "Make part of the document editable for everyone" checkbox is checked, - // add editable ranges to allow unrestricted editing in specific sections. - AddEditableRange(document); - // Set the protection type of the entire document to 'AllowOnlyReading' - // Only the specified editable ranges will remain editable - protectionType = ProtectionType.AllowOnlyReading; - } - else - { - dataPath = basePath + @"/Word/TemplateFormFields.docx"; - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - document = new WordDocument(fileStream, FormatType.Docx); - fileStream.Dispose(); - fileStream = null; - // Sets the protection type as allow only Form Fields. - protectionType = ProtectionType.AllowOnlyFormFields; - } - - // Enforces protection of the document. - if (string.IsNullOrEmpty(Password1)) - document.Protect(protectionType); - else - document.Protect(protectionType, Password1); - - FormatType type = FormatType.Docx; - string filename = Protection_Type + ".docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - private void AddEditableRange(WordDocument document) - { - // Access the paragraph - WParagraph paragraph = document.Sections[0].Body.ChildEntities[5] as WParagraph; - // Create a new editable range start - EditableRangeStart editableRangeStart = new EditableRangeStart(document); - // Insert the editable range start at the beginning of the selected paragraph - paragraph.ChildEntities.Insert(0, editableRangeStart); - // Set the editor group for the editable range to allow everyone to edit - editableRangeStart.EditorGroup = EditorType.Everyone; - // Append an editable range end to close the editable region - paragraph.AppendEditableRangeEnd(); - - // Access the first table in the first section of the document - WTable table = document.Sections[0].Tables[0] as WTable; - // Access the paragraph in the third row and third column of the table - paragraph = table[2, 2].ChildEntities[0] as WParagraph; - // Create a new editable range start for the table cell paragraph - editableRangeStart = new EditableRangeStart(document); - // Insert the editable range start at the beginning of the paragraph - paragraph.ChildEntities.Insert(0, editableRangeStart); - // Set the editor group for the editable range to allow everyone to edit - editableRangeStart.EditorGroup = EditorType.Everyone; - // Apply editable range to second column only - editableRangeStart.FirstColumn = 1; - editableRangeStart.LastColumn = 1; - // Access the paragraph - paragraph = table[5, 2].ChildEntities[0] as WParagraph; - // Append an editable range end to close the editable region - paragraph.AppendEditableRangeEnd(); - } -} \ No newline at end of file diff --git a/Pages/Word/DocumentSettings.cshtml b/Pages/Word/DocumentSettings.cshtml deleted file mode 100644 index 9301a450..00000000 --- a/Pages/Word/DocumentSettings.cshtml +++ /dev/null @@ -1,65 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.DocumentSettings - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Document Properties : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("documentsettings", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to apply various document settings to the Word document using Essential DocIO. -
-} -@section Description{ -
- Document settings includes page setup options, print settings, built-in and custom document properties, document variables.  -
    -
  • - Using DocIO, you can create Word documents with these settings. -
  • -
  • - You can also define or modify these settings in an existing Word document. -
  • -
-
-
- More information about the document properties can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Document Settings Example - Syncfusion Demos - } -@section Header{ -

Example of Document Settings in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/DocumentSettings.cshtml.cs b/Pages/Word/DocumentSettings.cshtml.cs deleted file mode 100644 index c546772b..00000000 --- a/Pages/Word/DocumentSettings.cshtml.cs +++ /dev/null @@ -1,149 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class DocumentSettings : PageModel -{ - public void OnGet() - { - - } - - public ActionResult OnPost(string Group1) - { - if (Group1 == null) - return null; - // return View(); - //A new document is created. - WordDocument document = new WordDocument(); - //Adding a section to the document. - IWSection section = document.AddSection(); - //Adding a paragraph to the section. - IWParagraph paragraph = section.AddParagraph(); - - #region DocVariable - - string name = "John Smith"; - string address = "Cary, NC"; - //Get the variables in the existing document - DocVariables dVariable = document.Variables; - //Add doc variables - dVariable.Add("Customer Name", name); - dVariable.Add("Customer Address", address); - - #endregion DocVariable - - #region Document Properties - - //Setting document Properties - document.BuiltinDocumentProperties.Author = "Essential DocIO"; - document.BuiltinDocumentProperties.ApplicationName = "Essential DocIO"; - document.BuiltinDocumentProperties.Category = "Document Generator"; - document.BuiltinDocumentProperties.Comments = "This document was generated using Essential DocIO"; - document.BuiltinDocumentProperties.Company = "Syncfusion Inc"; - document.BuiltinDocumentProperties.Subject = "Native Word Generator"; - document.BuiltinDocumentProperties.Keywords = "Syncfusion"; - document.BuiltinDocumentProperties.Manager = "Sync Manager"; - document.BuiltinDocumentProperties.Title = "Essential DocIO"; - - // Add a custom document Property - document.CustomDocumentProperties.Add("My_Doc_Date", DateTime.Today); - document.CustomDocumentProperties.Add("My_Doc", true); - document.CustomDocumentProperties.Add("My_ID", 1031); - document.CustomDocumentProperties.Add("My_Comment", "Essential DocIO"); - //Remove a custome property - document.CustomDocumentProperties.Remove("My_Doc"); - - #endregion Document Properties - - IWTextRange text = paragraph.AppendText(""); - text.CharacterFormat.FontName = "Calibri"; - text.CharacterFormat.FontSize = 13; - text = paragraph.AppendText( - "This document is created with various Document Properties Summary Information and page settings information \n\n You can view Document Properties through: File -> Properties -> Summary/Custom."); - text.CharacterFormat.FontName = "Calibri"; - text.CharacterFormat.FontSize = 13; - - #region Page setup - - // Write section properties - section.PageSetup.PageSize = new Syncfusion.Drawing.SizeF(500, 750); - section.PageSetup.Orientation = PageOrientation.Landscape; - section.PageSetup.Margins.Bottom = 100; - section.PageSetup.Margins.Top = 100; - section.PageSetup.Margins.Left = 50; - section.PageSetup.Margins.Right = 50; - section.PageSetup.PageBordersApplyType = PageBordersApplyType.AllPages; - section.PageSetup.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.DoubleWave; - section.PageSetup.Borders.Color = Syncfusion.Drawing.Color.DarkBlue; - section.PageSetup.VerticalAlignment = PageAlignment.Middle; - - #endregion Page setup - - paragraph = section.AddParagraph(); - text = paragraph.AppendText(""); - text.CharacterFormat.FontName = "Calibri"; - text.CharacterFormat.FontSize = 13; - - text = paragraph.AppendText("\n\n You can view Page setup options through File -> PageSetup."); - text.CharacterFormat.FontName = "Calibri"; - text.CharacterFormat.FontSize = 13; - - #region Get document variables - - paragraph = document.LastSection.AddParagraph(); - dVariable = document.Variables; - text = paragraph.AppendText("\n\n Document Variables\n"); - text.CharacterFormat.FontName = "Calibri"; - text.CharacterFormat.FontSize = 13; - text.CharacterFormat.Bold = true; - text = paragraph.AppendText("\n" + dVariable.GetNameByIndex(1) + ": " + dVariable.GetValueByIndex(1)); - text.CharacterFormat.FontName = "Calibri"; - text.CharacterFormat.FontSize = 13; - //Display the current variable count - text = paragraph.AppendText("\n\nDocument Variables Count: " + dVariable.Count); - text.CharacterFormat.FontName = "Calibri"; - text.CharacterFormat.FontSize = 13; - - #endregion Get document variables - - FormatType type = FormatType.Docx; - string filename = "DocumentSettings.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "DocumentSettings.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "DocumentSettings.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } -} \ No newline at end of file diff --git a/Pages/Word/EditEquation.cshtml b/Pages/Word/EditEquation.cshtml deleted file mode 100644 index ab3d2444..00000000 --- a/Pages/Word/EditEquation.cshtml +++ /dev/null @@ -1,64 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.EditEquation - -@using Syncfusion.EJ2 -@{ var Title = " Essential DocIO (Word) : Edit Equation : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("editequation", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document or PDF. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document and PDF viewer is required to view the resultant PDF. -
-
- Save As : - - -   - - -
-
-
- -   - -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to modify a mathematical equation in a Word document using Essential DocIO. -
-} -@section Description{ -
- DocIO allows you to modify a mathematical equation in the Word document. -
    -
  • - You can modify the text in the equation field. -
  • -
  • - You can change the format of an equation. -
  • -
-
-
- More information about mathematical equations can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Edit Equation Example - Syncfusion Demos - } -@section Header{ -

Example of Edit Equation in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/EditEquation.cshtml.cs b/Pages/Word/EditEquation.cshtml.cs deleted file mode 100644 index f928edd4..00000000 --- a/Pages/Word/EditEquation.cshtml.cs +++ /dev/null @@ -1,124 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Syncfusion.Office; -using Syncfusion.DocIORenderer; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class EditEquation : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public EditEquation(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public IActionResult OnPost(string Button, string Group1) - { - if (Button == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/Mathematical Equation.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - // Load Template document stream. - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - if (Button == "View Template") - return File(fileStream, contenttype, "Mathematical Equation.docx"); - - // Creates an empty Word document instance. - WordDocument document = new WordDocument(); - // Opens template document. - document.Open(dataPath, FormatType.Docx); - //Gets the last section in the document - WSection section = document.LastSection; - //Gets paragraph from Word document - WParagraph paragraph = document.LastSection.Body.ChildEntities[3] as WParagraph; - - //Gets MathML from the paragraph - WMath math = paragraph.ChildEntities[0] as WMath; - //Gets the radical equation - IOfficeMathRadical mathRadical = math.MathParagraph.Maths[0].Functions[1] as IOfficeMathRadical; - //Gets the fraction equation in radical - IOfficeMathFraction mathFraction = mathRadical.Equation.Functions[0] as IOfficeMathFraction; - //Gets the n-array in fraction - IOfficeMathNArray mathNAry = mathFraction.Numerator.Functions[0] as IOfficeMathNArray; - //Gets the math script in n-array - IOfficeMathScript mathScript = mathNAry.Equation.Functions[0] as IOfficeMathScript; - //Gets the delimiter in math script - IOfficeMathDelimiter mathDelimiter = mathScript.Equation.Functions[0] as IOfficeMathDelimiter; - //Gets the math script in delimiter - mathScript = mathDelimiter.Equation[0].Functions[0] as IOfficeMathScript; - //Gets the math run element in math script - IOfficeMathRunElement mathParaItem = mathScript.Equation.Functions[0] as IOfficeMathRunElement; - //Modifies the math text value - (mathParaItem.Item as WTextRange).Text = "x"; - - //Gets the math bar in delimiter - IOfficeMathBar mathBar = mathDelimiter.Equation[0].Functions[2] as IOfficeMathBar; - //Gets the math run element in bar - mathParaItem = mathBar.Equation.Functions[0] as IOfficeMathRunElement; - //Modifies the math text value - (mathParaItem.Item as WTextRange).Text = "x"; - - //Gets the paragraph from Word document - paragraph = document.LastSection.Body.ChildEntities[6] as WParagraph; - //Gets MathML from the paragraph - math = paragraph.ChildEntities[0] as WMath; - //Gets the math script equation - mathScript = math.MathParagraph.Maths[0].Functions[0] as IOfficeMathScript; - //Gets the math run element in math script - mathParaItem = mathScript.Equation.Functions[0] as IOfficeMathRunElement; - //Modifies the math text value - (mathParaItem.Item as WTextRange).Text = "x"; - - //Gets the paragraph from Word document - paragraph = document.LastSection.Body.ChildEntities[7] as WParagraph; - //Gets MathML from the paragraph - WMath math2 = paragraph.ChildEntities[0] as WMath; - //Gets bar equation - mathBar = math2.MathParagraph.Maths[0].Functions[0] as IOfficeMathBar; - //Gets the math run element in bar - mathParaItem = mathBar.Equation.Functions[0] as IOfficeMathRunElement; - //Gets the math text - (mathParaItem.Item as WTextRange).Text = "x"; - - string filename = ""; - MemoryStream ms = new MemoryStream(); - - #region Document SaveOption - - if (Group1 == "WordDocx") - { - filename = "EditEquation.docx"; - contenttype = "application/msword"; - document.Save(ms, FormatType.Docx); - } - else - { - filename = "EditEquation.pdf"; - contenttype = "application/pdf"; - DocIORenderer renderer = new DocIORenderer(); - renderer.ConvertToPDF(document).Save(ms); - } - - #endregion Document SaveOption - - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } -} \ No newline at end of file diff --git a/Pages/Word/EditSmartArt.cshtml b/Pages/Word/EditSmartArt.cshtml deleted file mode 100644 index c8dd5c2b..00000000 --- a/Pages/Word/EditSmartArt.cshtml +++ /dev/null @@ -1,54 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.EditSmartArt - -@using Syncfusion.EJ2 -@{ var Title = " Essential DocIO (Word) : Edit SmartArt : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("editsmartart", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
- -   - -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to modify SmartArt graphics in a Word document using the .NET Word Library (DocIO). -
-} -@section Description{ -
- The .NET Word Library (DocIO) allows you to modify SmartArt graphics in Word documents. -
    -
  • - Change the text in SmartArt nodes. -
  • -
  • - Modify the format of SmartArt nodes and the SmartArt container. -
  • -
-
-
- More information about SmartArt can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Edit SmartArt Example - Syncfusion Demos - } -@section Header{ -

Example of Edit SmartArt in ASP.NET Core Word (DocIO) Library

- } diff --git a/Pages/Word/EditSmartArt.cshtml.cs b/Pages/Word/EditSmartArt.cshtml.cs deleted file mode 100644 index 35aebca2..00000000 --- a/Pages/Word/EditSmartArt.cshtml.cs +++ /dev/null @@ -1,94 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Syncfusion.Office; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class EditSmartArt : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public EditSmartArt(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public IActionResult OnPost(string Button) - { - if (Button == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/EditSmartArtInput.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - //Loads Template document stream. - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - if (Button == "View Template") - return File(fileStream, contenttype, "EditSmartArtInput.docx"); - - //Loads file stream into Word document. - WordDocument document = new WordDocument(fileStream, FormatType.Docx); - fileStream.Dispose(); - fileStream = null; - //Gets the last paragraph in the document. - WParagraph paragraph = document.LastParagraph; - //Retrieves the SmartArt object from the paragraph. - WSmartArt smartArt = paragraph.ChildEntities[0] as WSmartArt; - //Sets the background fill type of the SmartArt to solid. - smartArt.Background.FillType = OfficeShapeFillType.Solid; - //Sets the background color of the SmartArt. - smartArt.Background.SolidFill.Color = Color.FromArgb(255, 242, 169, 132); - //Gets the first node of the SmartArt. - IOfficeSmartArtNode node = smartArt.Nodes[0]; - //Modifies the text content of the first node. - node.TextBody.Text = "Goals"; - //Retrieves the first shape of the node. - IOfficeSmartArtShape shape = node.Shapes[0]; - //Sets the fill color of the shape. - shape.Fill.SolidFill.Color = Color.FromArgb(255, 160, 43, 147); - //Sets the line format color of the shape. - shape.LineFormat.Fill.SolidFill.Color = Color.FromArgb(255, 160, 43, 147); - //Gets the first child node of the current node. - IOfficeSmartArtNode childNode = node.ChildNodes[0]; - //Modifies the text content of the child node. - childNode.TextBody.Text = "Set clear goals to the team."; - //Sets the line format color of the first shape in the child node. - childNode.Shapes[0].LineFormat.Fill.SolidFill.Color = Color.FromArgb(255, 160, 43, 147); - - //Retrieves the second node in the SmartArt and updates its text content. - node = smartArt.Nodes[1]; - node.TextBody.Text = "Progress"; - - //Retrieves the third node in the SmartArt and updates its text content. - node = smartArt.Nodes[2]; - node.TextBody.Text = "Result"; - //Retrieves the first shape of the third node. - shape = node.Shapes[0]; - //Sets the fill color of the shape. - shape.Fill.SolidFill.Color = Color.FromArgb(255, 78, 167, 46); - //Sets the line format color of the shape. - shape.LineFormat.Fill.SolidFill.Color = Color.FromArgb(255, 78, 167, 46); - //Sets the line format color of the first shape in the child node. - node.ChildNodes[0].Shapes[0].LineFormat.Fill.SolidFill.Color = Color.FromArgb(255, 78, 167, 46); - - string filename = "EditSmartArt.docx"; - MemoryStream ms = new MemoryStream(); - document.Save(ms, FormatType.Docx); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } -} \ No newline at end of file diff --git a/Pages/Word/EditUsingLaTeX.cshtml b/Pages/Word/EditUsingLaTeX.cshtml deleted file mode 100644 index 7f1ede15..00000000 --- a/Pages/Word/EditUsingLaTeX.cshtml +++ /dev/null @@ -1,70 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.EditUsingLaTeX - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Edit using LaTeX : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("editusinglatex", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document or PDF. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document and PDF viewer is required to view the resultant PDF. -
- LaTeX to edit equation : -
-
- -
-
-
- Save As : - - -   - - -
-
-
- -   - -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to modify a mathematical equation using LaTeX in a Word document using .NET Word Library (DocIO). -
-} -@section Description{ -
- .NET Word Library (DocIO) allows you to modify a mathematical equation using LaTeX in the Word document. -
    -
  • - You can extract the LaTeX of an existing equation in a Word document. -
  • -
  • - You can modify text in the equation using LaTeX. -
  • -
-
-
- More information about mathematical equations can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Edit equation using LaTeX example - Syncfusion Demos - } -@section Header{ -

Example of Edit Equation using LaTeX in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/EditUsingLaTeX.cshtml.cs b/Pages/Word/EditUsingLaTeX.cshtml.cs deleted file mode 100644 index ceb0e7a8..00000000 --- a/Pages/Word/EditUsingLaTeX.cshtml.cs +++ /dev/null @@ -1,83 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Syncfusion.DocIORenderer; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class EditUsingLaTeX : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public EditUsingLaTeX(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public IActionResult OnPost(string LaTeX, string Button, string Group1) - { - if (Button == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/EditEquationLaTeXInput.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - // Load Template document stream. - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - if (Button == "View Template") - return File(fileStream, contenttype, "EditEquationLaTeXInput.docx"); - - //Creates an empty Word document instance. - WordDocument document = new WordDocument(); - //Opens template document. - document.Open(dataPath, FormatType.Docx); - fileStream.Dispose(); - fileStream = null; - - //Find all the equations in the Word document. - List entities = document.FindAllItemsByProperty(EntityType.Math, null, null); - - //Get the first math equation. - WMath math = entities[0] as WMath; - - //Update the modified laTeX code to the equation. - if (!string.IsNullOrEmpty(LaTeX)) - math.MathParagraph.LaTeX = LaTeX; - - string filename = ""; - MemoryStream ms = new MemoryStream(); - - #region Document SaveOption - - if (Group1 == "WordDocx") - { - filename = "EditEquationLaTeX.docx"; - contenttype = "application/msword"; - document.Save(ms, FormatType.Docx); - } - else - { - filename = "EditEquationLaTeX.pdf"; - contenttype = "application/pdf"; - DocIORenderer renderer = new DocIORenderer(); - renderer.ConvertToPDF(document).Save(ms); - } - - #endregion Document SaveOption - - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } -} \ No newline at end of file diff --git a/Pages/Word/EmployeeReport.cshtml b/Pages/Word/EmployeeReport.cshtml deleted file mode 100644 index 191d1b46..00000000 --- a/Pages/Word/EmployeeReport.cshtml +++ /dev/null @@ -1,67 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.EmployeeReport - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Mail merge, Report : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("employeereport", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Save As : - - -   - - -   - - -
-
-
- -   - -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to generate an employee report using Mail merge functionality of Essential Word (DocIO) library. -
-} -@section Description{ -
- With the mail merge support of DocIO, you can create a batch of personalized document or report very easily and fast.   -
    -
  • - You can design templates in Microsoft Word and allow DocIO to populate documents with data from various data sources such as business objects, ADO.NET objects, arrays, XML, dynamic objects, and relational objects. -
  • -
  • - Simple text, numeric data and image from data sources can be populated in Word documents using mail merge. -
  • -
-
-
- More information about the Mail merge can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Employee Report Example - Syncfusion Demos - } -@section Header{ -

Example of Employee Report in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/EmployeeReport.cshtml.cs b/Pages/Word/EmployeeReport.cshtml.cs deleted file mode 100644 index 39d8f2ca..00000000 --- a/Pages/Word/EmployeeReport.cshtml.cs +++ /dev/null @@ -1,397 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; -using System.Xml; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class EmployeeReport : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public EmployeeReport(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1, string Button) - { - if (Group1 == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - string dataPathEmployee = basePath + @"/Word/EmployeesReportDemo.doc"; - string contenttype1 = "application/msword"; - FileStream fileStream = new FileStream(dataPathEmployee, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - if (Button == "View Template") - return File(fileStream, contenttype1, "EmployeesReportDemo.doc"); - fileStream.Dispose(); - fileStream = null; - // Creating a new document. - WordDocument document = new WordDocument(); - // Load template - document.Open(dataPathEmployee, FormatType.Doc); - document.MailMerge.MergeImageField += new MergeImageFieldEventHandler(MergeField_EmployeeImage); - //Create MailMergeDataTable - MailMergeDataTable mailMergeDataTable = GetMailMergeDataTableEmployee(); - // Execute Mail Merge with groups. - document.MailMerge.ExecuteGroup(mailMergeDataTable); - // try - // { - FormatType type = FormatType.Docx; - string filename = "EmployeeReport.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "EmployeeReport.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "EmployeeReport.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - // } - // catch (Exception) - // { - // } - - // return View(); - } - - private void MergeField_EmployeeImage(object sender, MergeImageFieldEventArgs args) - { - // Get the image from disk during Merge. - if (args.FieldName == "Photo") - { - string ProductFileName = args.FieldValue.ToString(); - byte[] bytes = Convert.FromBase64String(ProductFileName); - MemoryStream ms = new MemoryStream(bytes); - args.ImageStream = ms; - } - } - - /// - /// Gets the mail merge data table. - /// - private MailMergeDataTable GetMailMergeDataTableEmployee() - { - List employees = new List(); - FileStream fs = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/EmployeesList.xml", FileMode.Open, - FileAccess.Read); - XmlReader reader = XmlReader.Create(fs); - if (reader == null) - throw new Exception("reader"); - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - if (reader.LocalName != "Employees") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - reader.Read(); - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - while (reader.LocalName != "Employees") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "Employee": - employees.Add(GetEmployees(reader)); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "Employees") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - MailMergeDataTable dataTable = new MailMergeDataTable("Employees", employees); - reader.Dispose(); - fs.Dispose(); - return dataTable; - } - - /// - /// Gets the employees. - /// - /// The reader. - private Employees GetEmployees(XmlReader reader) - { - if (reader == null) - throw new Exception("reader"); - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - if (reader.LocalName != "Employee") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - reader.Read(); - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - Employees employee = new Employees(); - while (reader.LocalName != "Employee") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "EmployeeID": - employee.EmployeeID = reader.ReadElementContentAsString(); - break; - case "LastName": - employee.LastName = reader.ReadElementContentAsString(); - break; - case "FirstName": - employee.FirstName = reader.ReadElementContentAsString(); - break; - case "Title": - employee.Title = reader.ReadElementContentAsString(); - break; - case "TitleOfCourtesy": - employee.TitleOfCourtesy = reader.ReadElementContentAsString(); - break; - case "BirthDate": - employee.BirthDate = reader.ReadElementContentAsString(); - break; - case "HireDate": - employee.HireDate = reader.ReadElementContentAsString(); - break; - case "Address": - employee.Address = reader.ReadElementContentAsString(); - break; - case "City": - employee.City = reader.ReadElementContentAsString(); - break; - case "Region": - employee.Region = reader.ReadElementContentAsString(); - break; - case "PostalCode": - employee.PostalCode = reader.ReadElementContentAsString(); - break; - case "Country": - employee.Country = reader.ReadElementContentAsString(); - break; - case "HomePhone": - employee.HomePhone = reader.ReadElementContentAsString(); - break; - case "Extension": - employee.Extension = reader.ReadElementContentAsString(); - break; - case "Photo": - employee.Photo = reader.ReadElementContentAsString(); - break; - case "Notes": - employee.Notes = reader.ReadElementContentAsString(); - break; - case "ReportsTo": - employee.ReportsTo = reader.ReadElementContentAsString(); - break; - - default: - reader.Skip(); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "Employee") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - return employee; - } -} - -public class Employees -{ - #region Fields - - private string m_employeeID; - private string m_lastName; - private string m_firstName; - private string m_title; - private string m_titleOfCourtesy; - private string m_birthDate; - private string m_hireDate; - private string m_address; - private string m_city; - private string m_region; - private string m_postalCode; - private string m_country; - private string m_homePhone; - private string m_extension; - private string m_photo; - private string m_notes; - private string m_reportsTo; - - #endregion - - #region Properties - - public string EmployeeID - { - get { return m_employeeID; } - set { m_employeeID = value; } - } - - public string LastName - { - get { return m_lastName; } - set { m_lastName = value; } - } - - public string FirstName - { - get { return m_firstName; } - set { m_firstName = value; } - } - - public string Title - { - get { return m_title; } - set { m_title = value; } - } - - public string TitleOfCourtesy - { - get { return m_titleOfCourtesy; } - set { m_titleOfCourtesy = value; } - } - - public string BirthDate - { - get { return m_birthDate; } - set { m_birthDate = value; } - } - - public string HireDate - { - get { return m_hireDate; } - set { m_hireDate = value; } - } - - public string Address - { - get { return m_address; } - set { m_address = value; } - } - - public string City - { - get { return m_city; } - set { m_city = value; } - } - - public string Region - { - get { return m_region; } - set { m_region = value; } - } - - public string PostalCode - { - get { return m_postalCode; } - set { m_postalCode = value; } - } - - public string Country - { - get { return m_country; } - set { m_country = value; } - } - - public string HomePhone - { - get { return m_homePhone; } - set { m_homePhone = value; } - } - - public string Extension - { - get { return m_extension; } - set { m_extension = value; } - } - - public string Photo - { - get { return m_photo; } - set { m_photo = value; } - } - - public string Notes - { - get { return m_notes; } - set { m_notes = value; } - } - - public string ReportsTo - { - get { return m_reportsTo; } - set { m_reportsTo = value; } - } - - - #endregion - - #region Constructor - - public Employees(string employeeID, string lastName, string firstName, string title, string titleOfCourtesy, - string birthDate, string hireDate, string address, string city, string region, string postalCode, - string country, string homePhone, string extension, string photo, string notes, string reportsTo) - { - m_employeeID = employeeID; - m_lastName = lastName; - m_firstName = firstName; - m_title = title; - m_titleOfCourtesy = titleOfCourtesy; - m_birthDate = birthDate; - m_hireDate = hireDate; - m_address = address; - m_city = city; - m_region = region; - m_postalCode = postalCode; - m_country = country; - m_homePhone = homePhone; - m_extension = extension; - m_photo = photo; - m_notes = notes; - m_reportsTo = reportsTo; - - } - - public Employees() - { - } - - #endregion -} \ No newline at end of file diff --git a/Pages/Word/EncryptAndDecrypt.cshtml b/Pages/Word/EncryptAndDecrypt.cshtml deleted file mode 100644 index 8c6fc3a8..00000000 --- a/Pages/Word/EncryptAndDecrypt.cshtml +++ /dev/null @@ -1,56 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.EncryptAndDecrypt - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) :Encrypt Decrypt : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("encryptanddecrypt", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
- - -
- - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to encrypt and decrypt the Word document using Essential DocIO. -
-} -@section Description{ -
- DocIO supports to encrypt a Word document with password that restrict others from accessing or modifying confidential contents. You can also open an encrypted Word document using DocIO with valid password. -
-
- More information about the encrypt and decrypt options can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Encrypt and Decrypt Example - Syncfusion Demos - } -@section Header{ -

Example of Encrypt and Decrypt in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/EncryptAndDecrypt.cshtml.cs b/Pages/Word/EncryptAndDecrypt.cshtml.cs deleted file mode 100644 index b47258b5..00000000 --- a/Pages/Word/EncryptAndDecrypt.cshtml.cs +++ /dev/null @@ -1,92 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class EncryptAndDecrypt : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public EncryptAndDecrypt(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1, string Group2) - { - if (Group1 == null) - return null; - // return View(); - WordDocument document = null; - if (Group1 == "CreateEncryptDoc") - { - document = new WordDocument(); - - document.EnsureMinimal(); - - // Getting last section of the document. - IWSection section = document.LastSection; - - // Adding a paragraph to the section. - IWParagraph paragraph = section.AddParagraph(); - - // Writing text - IWTextRange text = paragraph.AppendText("This document was encrypted with password"); - text.CharacterFormat.FontSize = 16f; - text.CharacterFormat.FontName = "Bitstream Vera Serif"; - - // Encrypt the document by giving password - document.EncryptDocument("syncfusion"); - } - else - { - // Open an existing template document. - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/Security Settings.docx"; - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - document = new WordDocument(fileStream, FormatType.Docx, "syncfusion"); - - // Getting last section of the document. - IWSection section = document.LastSection; - - // Adding a paragraph to the section. - IWParagraph paragraph = section.AddParagraph(); - - // Writing text - IWTextRange text = paragraph.AppendText("\nDemo For Document Decryption with Essential DocIO"); - text.CharacterFormat.FontSize = 16f; - text.CharacterFormat.FontName = "Bitstream Vera Serif"; - - text = paragraph.AppendText("\nThis document is Decrypted"); - text.CharacterFormat.FontSize = 16f; - text.CharacterFormat.FontName = "Bitstream Vera Serif"; - } - - #region Document SaveOption - - FormatType type = FormatType.Docx; - string filename = "EncryptAndDecrypt.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - //Save as .doc format - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } -} \ No newline at end of file diff --git a/Pages/Word/FindandHighlight.cshtml b/Pages/Word/FindandHighlight.cshtml deleted file mode 100644 index f6b2b404..00000000 --- a/Pages/Word/FindandHighlight.cshtml +++ /dev/null @@ -1,77 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.FindandHighlight - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Find and Highlight : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("findandhighlight", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
- - Regular expression to find the text -
-
-
- Save As : - - -   - - -   - - -
-
-
- -   - -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to find a specific text pattern using regular expression and highlight it in an existing Word document using Find functionality of Essential Word (DocIO) library. -
-} -@section Description{ -
- DocIO allows you to find the text in the Word document and then to manipulate it. -
    -
  • - You can find the first occurrence or all the occurrences of the text in the Word document. -
  • -
  • - You can find the static text or text pattern using regular expression. -
  • -
  • - You can find the text by matching case, whole word and all occurrence or first occurrence alone. -
  • -
  • - You can also find the content that spans across several paragraphs. -
  • -
-
-
- More information about the Find functionality can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Find and Highlight Example - Syncfusion Demos - } -@section Header{ -

Example of Find and Highlight in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/FindandHighlight.cshtml.cs b/Pages/Word/FindandHighlight.cshtml.cs deleted file mode 100644 index 23a69a46..00000000 --- a/Pages/Word/FindandHighlight.cshtml.cs +++ /dev/null @@ -1,92 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using System.Text.RegularExpressions; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class FindandHighlight : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public FindandHighlight(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1, string Button, string Group2) - { - if (Group1 == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/Adventure.docx"; - string contenttype1 = "application/vnd.ms-word.document.12"; - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - if (Button == "View Template") - return File(fileStream, contenttype1, "Adventure.docx"); - // try - // { - //Load template document - WordDocument doc = new WordDocument(fileStream, FormatType.Docx); - fileStream.Dispose(); - fileStream = null; - //Get the pattern for regular expression - Regex regex = new Regex(Group2); - //Find the first occurrence of the text in the Word document. - TextSelection text = doc.Find(regex); - //Set the highlight color for the text. - if (text != null) - text.GetAsOneRange().CharacterFormat.HighlightColor = Syncfusion.Drawing.Color.Green; - // try - // { - FormatType type = FormatType.Docx; - string filename = "FindAndHighlight.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "FindAndHighlight.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "FindAndHighlight.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - doc.Save(ms, type); - doc.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - // } - // catch (Exception) - // { - // } - // } - // catch (Exception) - // { - // } - // - // return View(); - } -} \ No newline at end of file diff --git a/Pages/Word/FootnotesandEndnotes.cshtml b/Pages/Word/FootnotesandEndnotes.cshtml deleted file mode 100644 index 80b741a9..00000000 --- a/Pages/Word/FootnotesandEndnotes.cshtml +++ /dev/null @@ -1,65 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.FootnotesandEndnotes - -@using Syncfusion.EJ2 -@{ var Title = " Essential DocIO (Word) : Footnotes, Endnotes : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("footnotesandendnotes", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates the insertion of footnotes and endnotes in a Word document using Essential DocIO. -
-} -@section Description{ -
- DocIO provides support to add the footnotes and endnotes to the Word document and customize them. -
    -
  • - Using footnotes, you can provide additional information like detailed description, references, credits, etc., at the end of each page. -
  • -
  • - Using endnotes, you can provide additional information like detailed description, references, credits, etc., at the end of the document. -
  • -
-
-
- More information about the footnotes and endnotes can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Footnotes and Endnotes Example - Syncfusion Demos - } -@section Header{ -

Example of Footnotes and Endnotes in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/FootnotesandEndnotes.cshtml.cs b/Pages/Word/FootnotesandEndnotes.cshtml.cs deleted file mode 100644 index d6e36a63..00000000 --- a/Pages/Word/FootnotesandEndnotes.cshtml.cs +++ /dev/null @@ -1,218 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class FootnotesandEndnotes : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public FootnotesandEndnotes(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string Group1) - { - if (Group1 == null) - return null; - // return View(); - //A new document is created. - WordDocument document = new WordDocument(); - //Create footnotes at the bottom of the page - CreateFootNote(document); - //Create endnotes at the end of the section - CreateEndNote(document); - FormatType type = FormatType.Docx; - string filename = "FootnotesAndEndnotes.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - #region Document SaveOption - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "FootnotesAndEndnotes.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "FootnotesAndEndnotes.xml"; - contenttype = "application/msword"; - } - #endregion Document SaveOption - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - - void CreateFootNote(WordDocument document) - { - //Add a new section to the document. - IWSection section = document.AddSection(); - - //Adding a new paragraph to the section. - IWParagraph paragraph = section.AddParagraph(); - - IWTextRange textRange = paragraph.AppendText("\t\t\t\t\tDemo for Footnote"); - textRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.Black; - textRange.CharacterFormat.Bold = true; - textRange.CharacterFormat.FontSize = 20; - - section.AddParagraph(); - section.AddParagraph(); - paragraph = section.AddParagraph(); - WFootnote footnote = new WFootnote(document); - footnote = paragraph.AppendFootnote(FootnoteType.Footnote); - footnote.MarkerCharacterFormat.SubSuperScript = SubSuperScript.SuperScript; - - //Insert Text into the paragraph - paragraph.AppendText("Google").CharacterFormat.Bold = true; - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - - string basePath = _hostingEnvironment.WebRootPath; - FileStream imageStream = new FileStream(basePath + @"/images/Word/google.png", FileMode.Open, FileAccess.Read); - paragraph.AppendPicture(imageStream); - - - paragraph = footnote.TextBody.AddParagraph(); - paragraph.AppendText(" Google is the most famous search engines in the Word "); - - //Adding a new paragraph to the section. - paragraph = section.AddParagraph(); - - paragraph = section.AddParagraph(); - footnote = paragraph.AppendFootnote(FootnoteType.Footnote); - footnote.MarkerCharacterFormat.SubSuperScript = SubSuperScript.SuperScript; - - //Insert Text into the paragraph - paragraph.AppendText("Yahoo").CharacterFormat.Bold = true; - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - imageStream = new FileStream(basePath + @"/images/Word/yahoo.gif", FileMode.Open, FileAccess.Read); - paragraph.AppendPicture(imageStream); - - paragraph = footnote.TextBody.AddParagraph(); - paragraph.AppendText( - " Yahoo experience makes it easier to discover the news and information that you care about most. "); - - //Adding a new paragraph to the section. - paragraph = section.AddParagraph(); - - paragraph = section.AddParagraph(); - footnote = paragraph.AppendFootnote(FootnoteType.Footnote); - footnote.MarkerCharacterFormat.SubSuperScript = SubSuperScript.SuperScript; - - //Insert Text into the paragraph - paragraph.AppendText("Northwind Traders").CharacterFormat.Bold = true; - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - imageStream = new FileStream(basePath + @"/images/Word/Northwind_logo.png", FileMode.Open, FileAccess.Read); - paragraph.AppendPicture(imageStream); - - paragraph = footnote.TextBody.AddParagraph(); - paragraph.AppendText( - " The Northwind sample database (Northwind.mdb) is included with all versions of Access. It provides data you can experiment with and database objects that demonstrate features you might want to implement in your own databases. "); - - //Setting number format for Footnote - document.FootnoteNumberFormat = FootEndNoteNumberFormat.Arabic; - - //Setting Footnote position - document.FootnotePosition = FootnotePosition.PrintAtBottomOfPage; - } - - void CreateEndNote(WordDocument document) - { - //Add a new section to the document. - IWSection section = document.AddSection(); - - //Adding a new paragraph to the section. - IWParagraph paragraph = section.AddParagraph(); - - IWTextRange textRange = paragraph.AppendText("\t\t\t\t\tDemo for Endnote"); - textRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.Black; - textRange.CharacterFormat.Bold = true; - textRange.CharacterFormat.FontSize = 20; - - section.AddParagraph(); - section.AddParagraph(); - paragraph = section.AddParagraph(); - WFootnote footnote = new WFootnote(document); - footnote = paragraph.AppendFootnote(FootnoteType.Endnote); - footnote.MarkerCharacterFormat.SubSuperScript = SubSuperScript.SuperScript; - - //Insert Text into the paragraph - paragraph.AppendText("Google").CharacterFormat.Bold = true; - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - string basePath = _hostingEnvironment.WebRootPath; - FileStream imageStream = new FileStream(basePath + @"/images/Word/google.png", FileMode.Open, FileAccess.Read); - paragraph.AppendPicture(imageStream); - - - paragraph = footnote.TextBody.AddParagraph(); - paragraph.AppendText(" Google is the most famous search engines in the Word "); - - section = document.AddSection(); - section.BreakCode = SectionBreakCode.NoBreak; - //Adding a new paragraph to the section. - paragraph = section.AddParagraph(); - - paragraph = section.AddParagraph(); - footnote = paragraph.AppendFootnote(FootnoteType.Endnote); - footnote.MarkerCharacterFormat.SubSuperScript = SubSuperScript.SuperScript; - - //Insert Text into the paragraph - paragraph.AppendText("Yahoo").CharacterFormat.Bold = true; - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - imageStream = new FileStream(basePath + @"/images/Word/yahoo.gif", FileMode.Open, FileAccess.Read); - paragraph.AppendPicture(imageStream); - - paragraph = footnote.TextBody.AddParagraph(); - paragraph.AppendText( - " Yahoo experience makes it easier to discover the news and information that you care about most. "); - - section = document.AddSection(); - section.BreakCode = SectionBreakCode.NoBreak; - //Adding a new paragraph to the section. - paragraph = section.AddParagraph(); - - paragraph = section.AddParagraph(); - footnote = paragraph.AppendFootnote(FootnoteType.Endnote); - footnote.MarkerCharacterFormat.SubSuperScript = SubSuperScript.SuperScript; - - //Insert Text into the paragraph - paragraph.AppendText("Northwind Traders").CharacterFormat.Bold = true; - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - imageStream = new FileStream(basePath + @"/images/Word/Northwind_logo.png", FileMode.Open, FileAccess.Read); - paragraph.AppendPicture(imageStream); - - paragraph = footnote.TextBody.AddParagraph(); - paragraph.AppendText( - " The Northwind sample database (Northwind.mdb) is included with all versions of Access. It provides data you can experiment with and database objects that demonstrate features you might want to implement in your own databases. "); - - //Set the number format for the Endnote. - document.EndnoteNumberFormat = Syncfusion.DocIO.FootEndNoteNumberFormat.LowerCaseRoman; - document.RestartIndexForEndnote = Syncfusion.DocIO.EndnoteRestartIndex.DoNotRestart; - //Set the Endnote position. - document.EndnotePosition = Syncfusion.DocIO.EndnotePosition.DisplayEndOfSection; - } -} \ No newline at end of file diff --git a/Pages/Word/FormFillingAndProtection.cshtml b/Pages/Word/FormFillingAndProtection.cshtml deleted file mode 100644 index c65a954b..00000000 --- a/Pages/Word/FormFillingAndProtection.cshtml +++ /dev/null @@ -1,57 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.FormFillingAndProtection - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Form Filling and Protection : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("formfillingandprotection", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
- -   - -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to fill a form and protect the content controls in an existing Word document using Essential DocIO. -
-} -@section Description{ -
- DocIO allows you to create and edit content controls in the Word Open XML Format document (DOCX, DOTX, DOCM, DOTM). With the content control support, you can create a more functional form which gives built-in form filling experience. -
    -
  • - Content controls has several types plain text, rich text, picture, check box, combo box, drop down list, date picker, etc. -
  • -
  • - You can lock/unlock the content controls from deleting or content editing by the users. It helps in creating fillable form without using document protection functionality. -
  • -
  • - You can also set editing restriction that does not allow the users to edit the Word document, except filling the content controls and form fields in the Word document. -
  • -
-
-
- More information about the content controls can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Form filling and Protection Example - Syncfusion Demos - } -@section Header{ -

Example of Form filling and Protection in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/FormFillingAndProtection.cshtml.cs b/Pages/Word/FormFillingAndProtection.cshtml.cs deleted file mode 100644 index e3716fbb..00000000 --- a/Pages/Word/FormFillingAndProtection.cshtml.cs +++ /dev/null @@ -1,340 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class FormFillingAndProtection : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public FormFillingAndProtection(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public IActionResult OnPost(string Button) - { - if (Button == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/ContentControlTemplate.docx"; - string contenttype1 = "application/vnd.ms-word.document.12"; - // Load Template document stream. - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - if (Button == "View Template") - { - return File(fileStream, contenttype1, "ContentControlTemplate.docx"); - } - - // Creates an empty Word document instance. - WordDocument document = new WordDocument(); - // Opens template document. - document.Open(dataPath, FormatType.Docx); - fileStream.Dispose(); - fileStream = null; - WTextRange textRange; - - #region Fill data and lock the contents of content control - - #region Drop down list content control - - //Find the drop down list content control with title "Status". - IInlineContentControl inlineControl = document.FindItemByProperty(EntityType.InlineContentControl, - "ContentControlProperties.Title", "Status") as IInlineContentControl; - inlineControl.ContentControlProperties.LockContents = true; - //Sets default option to display. - textRange = inlineControl.ParagraphItems[0] as WTextRange; - textRange.Text = "In-Progress"; - ApplyCharacterFormat(textRange); - inlineControl.ParagraphItems.Add(textRange); - - //Adds items to the dropdown list. - ContentControlListItem item; - item = new ContentControlListItem(); - item.DisplayText = "Testing"; - item.Value = "2"; - inlineControl.ContentControlProperties.ContentControlListItems.Add(item); - - item = new ContentControlListItem(); - item.DisplayText = "Review"; - item.Value = "3"; - inlineControl.ContentControlProperties.ContentControlListItems.Add(item); - - item = new ContentControlListItem(); - item.DisplayText = "Completed"; - item.Value = "4"; - inlineControl.ContentControlProperties.ContentControlListItems.Add(item); - - #endregion - - - #region Calendar content control - - //Find the first date picker content control with tag "Date". - inlineControl = document.FindItemByProperties(EntityType.InlineContentControl, - new string[2] { "ContentControlProperties.Type", "ContentControlProperties.Tag" }, - new string[2] { "Date", "Date" }) as IInlineContentControl; - textRange = inlineControl.ParagraphItems[0] as WTextRange; - //Sets today's date to display. - textRange.Text = DateTime.Now.ToShortDateString(); - ApplyCharacterFormat(textRange); - //Protects the content control. - inlineControl.ContentControlProperties.LockContents = true; - - //Find the inline content control with title "StartDate". - inlineControl = document.FindItemByProperty(EntityType.InlineContentControl, - "ContentControlProperties.Title", "StartDate") as IInlineContentControl; - inlineControl.ContentControlProperties.LockContents = true; - //Sets default date to display. - textRange = inlineControl.ParagraphItems[0] as WTextRange; - textRange.Text = DateTime.Now.AddDays(-6).ToShortDateString(); - ApplyCharacterFormat(textRange); - - //Find the inline content control with title "EndDate". - inlineControl = document.FindItemByProperty(EntityType.InlineContentControl, - "ContentControlProperties.Title", "EndDate") as IInlineContentControl; - inlineControl.ContentControlProperties.LockContents = true; - //Sets default date to display. - textRange = inlineControl.ParagraphItems[0] as WTextRange; - textRange.Text = DateTime.Now.AddDays(-1).ToShortDateString(); - ApplyCharacterFormat(textRange); - - #endregion - - #region Plain text content controls - - //Find the plain text content control with title "ProjectName". - inlineControl = document.FindItemByProperty(EntityType.InlineContentControl, - "ContentControlProperties.Title", "ProjectName") as IInlineContentControl; - //Protects the content control. - inlineControl.ContentControlProperties.LockContents = true; - textRange = inlineControl.ParagraphItems[0] as WTextRange; - //Sets text in plain text content control. - textRange.Text = "Website for Adventure works cycle"; - ApplyCharacterFormat(textRange); - - - //Find the plain text content control with title "ProjectManager". - inlineControl = document.FindItemByProperty(EntityType.InlineContentControl, - "ContentControlProperties.Title", "ProjectManager") as IInlineContentControl; - //Protects the content control. - inlineControl.ContentControlProperties.LockContents = true; - //Sets text in plain text content control. - textRange = inlineControl.ParagraphItems[0] as WTextRange; - textRange.Text = "Nancy Davolio"; - ApplyCharacterFormat(textRange); - - //Find the plain text content control with title "TeamSize". - inlineControl = document.FindItemByProperty(EntityType.InlineContentControl, - "ContentControlProperties.Title", "TeamSize") as IInlineContentControl; - //Protects the content control. - inlineControl.ContentControlProperties.LockContents = true; - //Sets text in plain text content control. - textRange = inlineControl.ParagraphItems[0] as WTextRange; - textRange.Text = "10"; - ApplyCharacterFormat(textRange); - - - //Find the plain text content control with title "TeamName". - inlineControl = document.FindItemByProperty(EntityType.InlineContentControl, - "ContentControlProperties.Title", "TeamName") as IInlineContentControl; - //Protects the content control. - inlineControl.ContentControlProperties.LockContents = true; - textRange = inlineControl.ParagraphItems[0] as WTextRange; - //Sets text in plain text content control. - textRange.Text = "Adventure Works Cycle"; - ApplyCharacterFormat(textRange); - - //Find the plain text content control with title "ProjectVision". - inlineControl = document.FindItemByProperty(EntityType.InlineContentControl, - "ContentControlProperties.Title", "ProjectVision") as IInlineContentControl; - //Protects the content control. - inlineControl.ContentControlProperties.LockContents = true; - textRange = inlineControl.ParagraphItems[0] as WTextRange; - //Sets text in rich text content control. - textRange.Text = "Launch a website on " + DateTime.Now.AddDays(50).ToShortDateString() + - " that allows customers to purchase products online " + - "and reflects Adventure Works Cycle having the highest quality and the best products in its category."; - ApplyCharacterFormat(textRange); - - //Find the plain text content control with title "Issues". - inlineControl = document.FindItemByProperty(EntityType.InlineContentControl, - "ContentControlProperties.Title", "Issues") as IInlineContentControl; - textRange = inlineControl.ParagraphItems[0] as WTextRange; - //Sets text in rich text content control. - textRange.Text = - "By the end of next month, if we do not have a finalized product image, we will not be able to meet our deployment deadline."; - ApplyCharacterFormat(textRange); - //Protects the content control. - inlineControl.ContentControlProperties.LockContents = true; - - //Find the plain text content control with title "MilestoneAccomplished" - inlineControl = document.FindItemByProperty(EntityType.InlineContentControl, - "ContentControlProperties.Title", "MilestoneAccomplished") as IInlineContentControl; - //Clear the existing content in content control - inlineControl.ParagraphItems.Clear(); - //Add first milestone as WTextRange - textRange = new WTextRange(document); - inlineControl.ParagraphItems.Add(textRange); - inlineControl.ContentControlProperties.Multiline = true; - //Sets text in rich text content control. - textRange.Text = "Framed the basic structure of website."; - ApplyCharacterFormat(textRange); - //Add line break - Break br = new Break(document, BreakType.LineBreak); - inlineControl.ParagraphItems.Add(br); - //Add next milestone as WTextRange - textRange = new WTextRange(document); - inlineControl.ParagraphItems.Add(textRange); - textRange.Text = " Applied for design review."; - ApplyCharacterFormat(textRange); - //Protects the content control. - inlineControl.ContentControlProperties.LockContents = true; - - //Find the plain text content control with title "NextWeekMilestones" - inlineControl = document.FindItemByProperty(EntityType.InlineContentControl, - "ContentControlProperties.Title", "NextWeekMilestones") as IInlineContentControl; - //Clear the existing content in content control - inlineControl.ParagraphItems.Clear(); - //Add first milestone as WTextRange - textRange = new WTextRange(document); - inlineControl.ParagraphItems.Add(textRange); - inlineControl.ContentControlProperties.Multiline = true; - //Sets text in rich text content control. - textRange.Text = "Prepare design files for development."; - ApplyCharacterFormat(textRange); - //Add line break - br = new Break(document, BreakType.LineBreak); - inlineControl.ParagraphItems.Add(br); - //Add next milestone as WTextRange - textRange = new WTextRange(document); - inlineControl.ParagraphItems.Add(textRange); - textRange.Text = " Start development - Sprint 1 (Homepage & Product Detail Page)."; - ApplyCharacterFormat(textRange); - //Protects the content control. - inlineControl.ContentControlProperties.LockContents = true; - - //Find the plain text content control with title "UpcomingMilestones" - inlineControl = document.FindItemByProperty(EntityType.InlineContentControl, - "ContentControlProperties.Title", "UpcomingMilestones") as IInlineContentControl; - //Clear the existing content in content control - inlineControl.ParagraphItems.Clear(); - //Add first milestone as WTextRange - textRange = new WTextRange(document); - inlineControl.ParagraphItems.Add(textRange); - //Enable multiline in content control - inlineControl.ContentControlProperties.Multiline = true; - //Sets text in rich text content control. - textRange.Text = DateTime.Now.AddDays(15).ToShortDateString() + " : Design Approval"; - ApplyCharacterFormat(textRange); - //Add line break - br = new Break(document, BreakType.LineBreak); - inlineControl.ParagraphItems.Add(br); - //Add next milestone as WTextRange - textRange = new WTextRange(document); - inlineControl.ParagraphItems.Add(textRange); - textRange.Text = " " + DateTime.Now.AddDays(30).ToShortDateString() + " : Development Begins"; - ApplyCharacterFormat(textRange); - //Add line break - br = new Break(document, BreakType.LineBreak); - inlineControl.ParagraphItems.Add(br); - //Add next milestone as WTextRange - textRange = new WTextRange(document); - inlineControl.ParagraphItems.Add(textRange); - textRange.Text = " " + DateTime.Now.AddDays(45).ToShortDateString() + " : Deployment"; - ApplyCharacterFormat(textRange); - //Protects the content control. - inlineControl.ContentControlProperties.LockContents = true; - - #endregion - - #region CheckBox Content control - - //Find checkbox content control with tag "C#". - inlineControl = document.FindItemByProperties(EntityType.InlineContentControl, - new string[2] { "ContentControlProperties.Type", "ContentControlProperties.Tag" }, - new string[2] { "CheckBox", "C#" }) as InlineContentControl; - inlineControl.ContentControlProperties.LockContents = true; - //Sets checkbox as checked state. - inlineControl.ContentControlProperties.IsChecked = true; - - #endregion - - #region Drop down list content control - - //Find the drop down list content control with title "Platform". - inlineControl = document.FindItemByProperty(EntityType.InlineContentControl, - "ContentControlProperties.Title", "Platform") as IInlineContentControl; - inlineControl.ContentControlProperties.LockContents = true; - //Sets default option to display. - textRange = inlineControl.ParagraphItems[0] as WTextRange; - textRange.Text = "ASP.NET"; - ApplyCharacterFormat(textRange); - inlineControl.ParagraphItems.Add(textRange); - - //Adds items to the dropdown list. - item = new ContentControlListItem(); - item.DisplayText = "ASP.NET MVC"; - item.Value = "2"; - inlineControl.ContentControlProperties.ContentControlListItems.Add(item); - - item = new ContentControlListItem(); - item.DisplayText = "ASP.NET Core"; - item.Value = "3"; - inlineControl.ContentControlProperties.ContentControlListItems.Add(item); - - item = new ContentControlListItem(); - item.DisplayText = "Blazor"; - item.Value = "4"; - inlineControl.ContentControlProperties.ContentControlListItems.Add(item); - - #endregion - - #region Block content control - - //Find all the block content controls which having title "Description". - List blockContentControls = document.FindAllItemsByProperty(EntityType.BlockContentControl, - "ContentControlProperties.Title", "ContactInformation"); - //Access the first block content control. - BlockContentControl blockContentControl = blockContentControls[0] as BlockContentControl; - //Protects the block content control - blockContentControl.ContentControlProperties.LockContents = true; - - #endregion - - #endregion - - FormatType type = FormatType.Docx; - string filename = "FormFillingAndProtection.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - - /// - /// Apply character format for text range - /// - private void ApplyCharacterFormat(WTextRange textRange) - { - textRange.CharacterFormat.FontName = "Century Gothic"; - textRange.CharacterFormat.FontSize = 12; - textRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.Black; - } -} \ No newline at end of file diff --git a/Pages/Word/FormatTable.cshtml b/Pages/Word/FormatTable.cshtml deleted file mode 100644 index f71e03a8..00000000 --- a/Pages/Word/FormatTable.cshtml +++ /dev/null @@ -1,71 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.FormatTable - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Table Features, Format, Cell Merge, Images, Databind : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("formattable", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to format the tables in the Word document using Essential DocIO. -
-} -@section Description{ -
- DocIO allows to insert the tables in the Word document and apply various formatting like indent, alignment, cell margins, cell spacing, borders, shadings, etc.  -
    -
  • - You can insert table as “in line with text” or “position relative to the page” in the Word document. -
  • -
  • - You can customize the table by adding, deleting, merging and splitting the rows and cells. -
  • -
  • - When the table spans across multiple pages, you can specify the header row to be repeated on each page. -
  • -
  • - You can make tables in the Word document accessible by defining alternate text. -
  • -
-
-
- More information about the table formatting can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Format Table Example - Syncfusion Demos - } -@section Header{ -

Example of Format Table in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/FormatTable.cshtml.cs b/Pages/Word/FormatTable.cshtml.cs deleted file mode 100644 index 915fe944..00000000 --- a/Pages/Word/FormatTable.cshtml.cs +++ /dev/null @@ -1,389 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.Drawing; -using Syncfusion.DocIORenderer; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class FormatTable : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public FormatTable(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1) - { - if (Group1 == null) - return null; - // return View(); - // Create a new document. - WordDocument document = new WordDocument(); - // Adding a new section to the document. - IWSection section = document.AddSection(); - section.PageSetup.Margins.All = 50; - section.PageSetup.DifferentFirstPage = true; - IWTextRange textRange; - IWParagraph paragraph = section.AddParagraph(); - - - #region Table Cell Spacing. - - // -------------------------------------------- - // Table Cell Spacing. - // -------------------------------------------- - paragraph.AppendText("Table Cell spacing...").CharacterFormat.FontSize = 14; - - section.AddParagraph(); - paragraph = section.AddParagraph(); - WTextBody textBody = section.Body; - - // Adding a new Table to the textbody. - IWTable table = textBody.AddTable(); - table.TableFormat.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Single; - table.TableFormat.Paddings.All = 5.4f; - RowFormat format = new RowFormat(); - - format.Paddings.All = 5; - format.CellSpacing = 2; - format.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.DotDash; - format.IsBreakAcrossPages = true; - table.ResetCells(25, 5, format, 90); - IWTextRange text; - table.Rows[0].IsHeader = true; - - for (int i = 0; i < table.Rows[0].Cells.Count; i++) - { - paragraph = table[0, i].AddParagraph() as WParagraph; - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - text = paragraph.AppendText(string.Format("Header {0}", i + 1)); - text.CharacterFormat.Font = new Font("Bitstream Vera Serif", 10); - text.CharacterFormat.Bold = true; - text.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(0, 21, 84); - table[0, i].CellFormat.BackColor = Syncfusion.Drawing.Color.FromArgb(203, 211, 226); - } - - for (int i = 1; i < table.Rows.Count; i++) - { - for (int j = 0; j < 5; j++) - { - paragraph = table[i, j].AddParagraph() as WParagraph; - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - - text = paragraph.AppendText(string.Format("Cell {0} , {1}", i, j + 1)); - text.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(242, 151, 50); - text.CharacterFormat.Bold = true; - if (i % 2 != 1) - table[i, j].CellFormat.BackColor = Syncfusion.Drawing.Color.FromArgb(231, 235, 245); - else - table[i, j].CellFormat.BackColor = Syncfusion.Drawing.Color.FromArgb(246, 249, 255); - - } - - } - - (table as WTable).AutoFit(AutoFitType.FitToContent); - - #endregion Table Cell Spacing. - - #region Nested Table - - // -------------------------------------------- - // Nested Table. - // -------------------------------------------- - - section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.PageBreakBefore = true; - paragraph.AppendText("Nested Table...").CharacterFormat.FontSize = 14; - - section.AddParagraph(); - paragraph = section.AddParagraph(); - textBody = section.Body; - - // Adding a new Table to the textbody. - table = textBody.AddTable(); - - format = new RowFormat(); - format.Paddings.All = 5; - format.CellSpacing = 2.5f; - format.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.DotDash; - table.ResetCells(5, 3, format, 100); - - for (int i = 0; i < table.Rows[0].Cells.Count; i++) - { - paragraph = table[0, i].AddParagraph() as WParagraph; - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - text = paragraph.AppendText(string.Format("Header {0}", i + 1)); - text.CharacterFormat.Font = new Font("Bitstream Vera Serif", 10); - text.CharacterFormat.Bold = true; - text.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(0, 21, 84); - table[0, i].CellFormat.BackColor = Syncfusion.Drawing.Color.FromArgb(242, 151, 50); - } - - table[0, 2].Width = 200; - for (int i = 1; i < table.Rows.Count; i++) - { - for (int j = 0; j < 3; j++) - { - paragraph = table[i, j].AddParagraph() as WParagraph; - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - - if ((i == 2) && (j == 2)) - { - text = paragraph.AppendText("Nested Table"); - } - - else - { - text = paragraph.AppendText(string.Format("Cell {0} , {1}", i, j + 1)); - } - - if ((j == 2)) - table[i, j].Width = 200; - - text.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(242, 151, 50); - text.CharacterFormat.Bold = true; - } - } - - // Adding a nested Table. - IWTable nestTable = table[2, 2].AddTable(); - - format = new RowFormat(); - - format.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.DotDash; - format.HorizontalAlignment = RowAlignment.Center; - nestTable.ResetCells(3, 3, format, 45); - - for (int i = 0; i < nestTable.Rows.Count; i++) - { - for (int j = 0; j < 3; j++) - { - paragraph = nestTable[i, j].AddParagraph() as WParagraph; - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - - nestTable[i, j].CellFormat.BackColor = Syncfusion.Drawing.Color.FromArgb(231, 235, 245); - text = paragraph.AppendText(string.Format("Cell {0} , {1}", i, j + 1)); - text.CharacterFormat.TextColor = Syncfusion.Drawing.Color.Black; - text.CharacterFormat.Bold = true; - } - } - - (nestTable as WTable).AutoFit(AutoFitType.FitToContent); - (table as WTable).AutoFit(AutoFitType.FitToWindow); - - #endregion Nested Table - - #region Table with Images - - //Add a new section to the document. - section = document.AddSection(); - //Add paragraph to the section. - paragraph = section.AddParagraph(); - //Writing text. - textRange = paragraph.AppendText("Table with Images"); - textRange.CharacterFormat.FontSize = 13f; - textRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.DarkBlue; - textRange.CharacterFormat.Bold = true; - - //Add paragraph to the section. - section.AddParagraph(); - paragraph = section.AddParagraph(); - - text = null; - - //Adding a new Table to the paragraph. - table = section.Body.AddTable(); - table.ResetCells(1, 3); - - //Adding rows to the table. - WTableRow row = table.Rows[0]; - //Set heading row height - row.Height = 25f; - //set heading values to the Table. - for (int i = 0; i < 3; i++) - { - //Add paragraph for writing Text to the cells. - paragraph = (IWParagraph)row.Cells[i].AddParagraph(); - //Set Horizontal Alignment as Center. - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - //Writing Row Heading - switch (i) - { - case 0: - text = paragraph.AppendText("SNO"); - row.Cells[i].Width = 50f; - break; - case 1: - text = paragraph.AppendText("Drinks"); - break; - case 2: - text = paragraph.AppendText("Showcase Image"); - row.Cells[i].Width = 200f; - break; - } - - //Set row Heading formatting - text.CharacterFormat.Bold = true; - text.CharacterFormat.FontName = "Cambria"; - text.CharacterFormat.FontSize = 11f; - text.CharacterFormat.TextColor = Syncfusion.Drawing.Color.White; - - //Set row cells formatting - row.Cells[i].CellFormat.VerticalAlignment = VerticalAlignment.Middle; - row.Cells[i].CellFormat.BackColor = Syncfusion.Drawing.Color.FromArgb(157, 161, 190); - - row.Cells[i].CellFormat.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Single; - } - - int sno = 1; - //Writing Sno, Product name and Product Images to the Table. - - WTableRow row1 = table.AddRow(false); - - //Writing SNO to the table with formatting text. - paragraph = (IWParagraph)row1.Cells[0].AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - text = paragraph.AppendText(sno.ToString()); - text.CharacterFormat.Bold = true; - text.CharacterFormat.FontSize = 10f; - row1.Cells[0].CellFormat.VerticalAlignment = VerticalAlignment.Middle; - row1.Cells[0].CellFormat.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Single; - row1.Cells[0].CellFormat.BackColor = Color.FromArgb(217, 223, 239); - //Writing Product Name to the table with Formatting. - paragraph = (IWParagraph)row1.Cells[1].AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - text = paragraph.AppendText("Apple Juice"); - text.CharacterFormat.Bold = true; - text.CharacterFormat.FontSize = 10f; - text.CharacterFormat.TextColor = Color.FromArgb(50, 65, 124); - row1.Cells[1].CellFormat.VerticalAlignment = VerticalAlignment.Middle; - row1.Cells[1].CellFormat.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Single; - row1.Cells[1].CellFormat.BackColor = Color.FromArgb(217, 223, 239); - - //Writing Product Images to the Table. - paragraph = (IWParagraph)row1.Cells[2].AddParagraph(); - string basePath = _hostingEnvironment.WebRootPath; - FileStream imageStream = - new FileStream(basePath + @"/images/Word/Apple Juice.png", FileMode.Open, FileAccess.Read); - paragraph.AppendPicture(imageStream); - - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - row1.Cells[2].CellFormat.VerticalAlignment = VerticalAlignment.Middle; - row1.Cells[2].CellFormat.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Single; - row1.Cells[2].CellFormat.BackColor = Syncfusion.Drawing.Color.FromArgb(217, 223, 239); - sno++; - row1 = table.AddRow(false); - - //Writing SNO to the table with formatting text. - paragraph = (IWParagraph)row1.Cells[0].AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - text = paragraph.AppendText(sno.ToString()); - text.CharacterFormat.Bold = true; - text.CharacterFormat.FontSize = 10f; - row1.Cells[0].CellFormat.VerticalAlignment = VerticalAlignment.Middle; - row1.Cells[0].CellFormat.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Single; - row1.Cells[0].CellFormat.BackColor = Syncfusion.Drawing.Color.FromArgb(217, 223, 239); - //Writing Product Name to the table with Formatting. - paragraph = (IWParagraph)row1.Cells[1].AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - text = paragraph.AppendText("Grape Juice"); - text.CharacterFormat.Bold = true; - text.CharacterFormat.FontSize = 10f; - text.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(50, 65, 124); - row1.Cells[1].CellFormat.VerticalAlignment = VerticalAlignment.Middle; - row1.Cells[1].CellFormat.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Single; - row1.Cells[1].CellFormat.BackColor = Syncfusion.Drawing.Color.FromArgb(217, 223, 239); - - //Writing Product Images to the Table. - paragraph = (IWParagraph)row1.Cells[2].AddParagraph(); - imageStream = new FileStream(basePath + @"/images/Word/Grape Juice.png", FileMode.Open, FileAccess.Read); - paragraph.AppendPicture(imageStream); - - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - row1.Cells[2].CellFormat.VerticalAlignment = VerticalAlignment.Middle; - row1.Cells[2].CellFormat.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Single; - row1.Cells[2].CellFormat.BackColor = Syncfusion.Drawing.Color.FromArgb(217, 223, 239); - sno++; - row1 = table.AddRow(false); - - //Writing SNO to the table with formatting text. - paragraph = (IWParagraph)row1.Cells[0].AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - text = paragraph.AppendText(sno.ToString()); - text.CharacterFormat.Bold = true; - text.CharacterFormat.FontSize = 10f; - row1.Cells[0].CellFormat.VerticalAlignment = VerticalAlignment.Middle; - row1.Cells[0].CellFormat.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Single; - row1.Cells[0].CellFormat.BackColor = Syncfusion.Drawing.Color.FromArgb(217, 223, 239); - //Writing Product Name to the table with Formatting. - paragraph = (IWParagraph)row1.Cells[1].AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - text = paragraph.AppendText("Hot Soup"); - text.CharacterFormat.Bold = true; - text.CharacterFormat.FontSize = 10f; - text.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(50, 65, 124); - row1.Cells[1].CellFormat.VerticalAlignment = VerticalAlignment.Middle; - row1.Cells[1].CellFormat.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Single; - row1.Cells[1].CellFormat.BackColor = Syncfusion.Drawing.Color.FromArgb(217, 223, 239); - - //Writing Product Images to the Table. - paragraph = (IWParagraph)row1.Cells[2].AddParagraph(); - imageStream = new FileStream(basePath + @"/images/Word/Hot Soup.png", FileMode.Open, FileAccess.Read); - paragraph.AppendPicture(imageStream); - - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - row1.Cells[2].CellFormat.VerticalAlignment = VerticalAlignment.Middle; - row1.Cells[2].CellFormat.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Single; - row1.Cells[2].CellFormat.BackColor = Syncfusion.Drawing.Color.FromArgb(217, 223, 239); - sno++; - (table as WTable).AutoFit(AutoFitType.FixedColumnWidth); - - #endregion Table with Images - - FormatType type = FormatType.Docx; - string filename = "FormatTable.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "FormatTable.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "FormatTable.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } -} \ No newline at end of file diff --git a/Pages/Word/Forms.cshtml b/Pages/Word/Forms.cshtml deleted file mode 100644 index 80392e00..00000000 --- a/Pages/Word/Forms.cshtml +++ /dev/null @@ -1,68 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.Forms - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Form Filling : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("forms", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to create a simple job application form and fill the form using Essential DocIO. -
-} -@section Description{ -
- DocIO allows you to create a simple form using legacy form fields in the Word document, which gives built-in form filling experience. -
    -
  • - You can create form using legacy form fields like text, check box, and drop down. -
  • -
  • - You can open an existing Word document with form fields and fill them. -
  • -
  • - You can also set editing restriction that does not allow the users to edit the Word document, except filling the form fields. -
  • -
-
-
- More information about the forms can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Forms Example - Syncfusion Demos - } -@section Header{ -

Example of Forms in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/Forms.cshtml.cs b/Pages/Word/Forms.cshtml.cs deleted file mode 100644 index e8331d49..00000000 --- a/Pages/Word/Forms.cshtml.cs +++ /dev/null @@ -1,319 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class Forms : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public Forms(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1) - { - if (Group1 == null) - return null; - // return View(); - - #region CreateForm - - // Create a new document. - WordDocument document = new WordDocument(); - // Adding a new section to the document. - IWSection section = document.AddSection(); - // Adding a new paragraph to the section. - IWParagraph paragraph = section.AddParagraph(); - - #region Document formatting - - //Set background color. - document.Background.Gradient.Color1 = Syncfusion.Drawing.Color.FromArgb(232, 232, 232); - document.Background.Gradient.Color2 = Syncfusion.Drawing.Color.FromArgb(255, 255, 255); - document.Background.Type = BackgroundType.Gradient; - document.Background.Gradient.ShadingStyle = GradientShadingStyle.Horizontal; - document.Background.Gradient.ShadingVariant = GradientShadingVariant.ShadingDown; - - section.PageSetup.Margins.All = 30f; - section.PageSetup.PageSize = new Syncfusion.Drawing.SizeF(600, 600f); - - #endregion - - #region Title Section - - IWTable table = section.Body.AddTable(); - table.ResetCells(1, 2); - - WTableRow row = table.Rows[0]; - row.Height = 25f; - - IWParagraph cellPara = row.Cells[0].AddParagraph(); - string basePath = _hostingEnvironment.WebRootPath; - FileStream imageStream = new FileStream(basePath + @"/images/Word/Image.jpg", FileMode.Open, FileAccess.Read); - IWPicture pic = cellPara.AppendPicture(imageStream); - pic.Height = 80; - pic.Width = 180; - - cellPara = row.Cells[1].AddParagraph(); - row.Cells[1].CellFormat.VerticalAlignment = VerticalAlignment.Middle; - row.Cells[1].CellFormat.BackColor = Syncfusion.Drawing.Color.FromArgb(173, 215, 255); - IWTextRange txt = cellPara.AppendText("Job Application Form"); - cellPara.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - txt.CharacterFormat.Bold = true; - txt.CharacterFormat.FontName = "Arial"; - txt.CharacterFormat.FontSize = 18f; - - row.Cells[0].Width = 200; - row.Cells[1].Width = 300; - //row.Cells[1].CellFormat.FitText = true; - row.Cells[1].CellFormat.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Hairline; - - #endregion - - section.AddParagraph(); - - #region General Information - - table = section.Body.AddTable(); - table.TableFormat.Paddings.All = 5.4f; - table.ResetCells(2, 1); - row = table.Rows[0]; - row.Height = 20; - row.Cells[0].Width = 500; - cellPara = row.Cells[0].AddParagraph(); - row.Cells[0].CellFormat.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Thick; - row.Cells[0].CellFormat.Borders.Color = Syncfusion.Drawing.Color.FromArgb(155, 205, 255); - row.Cells[0].CellFormat.BackColor = Syncfusion.Drawing.Color.FromArgb(198, 227, 255); - row.Cells[0].CellFormat.VerticalAlignment = VerticalAlignment.Middle; - txt = cellPara.AppendText(" General Information"); - txt.CharacterFormat.FontName = "Arial"; - txt.CharacterFormat.Bold = true; - txt.CharacterFormat.FontSize = 11f; - - row = table.Rows[1]; - cellPara = row.Cells[0].AddParagraph(); - row.Cells[0].Width = 500; - row.Cells[0].CellFormat.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Hairline; - row.Cells[0].CellFormat.Borders.Color = Syncfusion.Drawing.Color.FromArgb(155, 205, 255); - row.Cells[0].CellFormat.BackColor = Syncfusion.Drawing.Color.FromArgb(222, 239, 255); - - txt = cellPara.AppendText("\n Full Name:\t\t\t\t"); - txt.CharacterFormat.FontName = "Arial"; - txt.CharacterFormat.FontSize = 11f; - WTextFormField txtField = cellPara.AppendTextFormField("John"); - txtField.TextRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.MidnightBlue; - txtField.TextRange.CharacterFormat.FontName = "Arial"; - txtField.TextRange.CharacterFormat.FontSize = 11f; - - txt = cellPara.AppendText("\n\n Birth Date:\t\t\t\t"); - txt.CharacterFormat.FontName = "Arial"; - txt.CharacterFormat.FontSize = 11f; - txtField = cellPara.AppendTextFormField("BirthDayField", DateTime.Now.ToString("M/d/yyyy")); - txtField.StringFormat = "M/d/yyyy"; - txtField.Type = TextFormFieldType.DateText; - txtField.TextRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.MidnightBlue; - txtField.TextRange.CharacterFormat.FontName = "Arial"; - txtField.TextRange.CharacterFormat.FontSize = 11f; - txtField.CharacterFormat.TextColor = Syncfusion.Drawing.Color.MidnightBlue; - txtField.CharacterFormat.FontName = "Arial"; - txtField.CharacterFormat.FontSize = 11f; - - txt = cellPara.AppendText("\n\n Address:\t\t\t\t"); - txt.CharacterFormat.FontName = "Arial"; - txt.CharacterFormat.FontSize = 11f; - txtField = cellPara.AppendTextFormField("221b Baker Street"); - txtField.Type = TextFormFieldType.RegularText; - txtField.TextRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.MidnightBlue; - txtField.TextRange.CharacterFormat.FontName = "Arial"; - txtField.TextRange.CharacterFormat.FontSize = 11f; - - txt = cellPara.AppendText("\n\n Phone:\t\t\t\t"); - txt.CharacterFormat.FontName = "Arial"; - txt.CharacterFormat.FontSize = 11f; - txtField = cellPara.AppendTextFormField("(206)555-3412"); - txtField.TextRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.MidnightBlue; - txtField.TextRange.CharacterFormat.FontName = "Arial"; - txtField.TextRange.CharacterFormat.FontSize = 11f; - - txt = cellPara.AppendText("\n\n Email:\t\t\t\t\t"); - txt.CharacterFormat.FontName = "Arial"; - txt.CharacterFormat.FontSize = 11f; - txtField = cellPara.AppendTextFormField("John@company.com"); - txtField.TextRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.MidnightBlue; - txtField.TextRange.CharacterFormat.FontName = "Arial"; - txtField.TextRange.CharacterFormat.FontSize = 11f; - cellPara.AppendText("\n"); - - #endregion - - section.AddParagraph(); - - #region Educational Qualification - - table = section.Body.AddTable(); - table.ResetCells(2, 1); - table.TableFormat.Paddings.All = 5.4f; - row = table.Rows[0]; - row.Height = 20; - row.Cells[0].Width = 500; - cellPara = row.Cells[0].AddParagraph(); - row.Cells[0].CellFormat.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Thick; - row.Cells[0].CellFormat.Borders.Color = Syncfusion.Drawing.Color.FromArgb(155, 205, 255); - row.Cells[0].CellFormat.BackColor = Syncfusion.Drawing.Color.FromArgb(198, 227, 255); - row.Cells[0].CellFormat.VerticalAlignment = VerticalAlignment.Middle; - txt = cellPara.AppendText(" Educational Qualification"); - txt.CharacterFormat.FontName = "Arial"; - txt.CharacterFormat.Bold = true; - txt.CharacterFormat.FontSize = 11f; - - row = table.Rows[1]; - cellPara = row.Cells[0].AddParagraph(); - row.Cells[0].Width = 500; - row.Cells[0].CellFormat.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Hairline; - row.Cells[0].CellFormat.Borders.Color = Syncfusion.Drawing.Color.FromArgb(155, 205, 255); - row.Cells[0].CellFormat.BackColor = Syncfusion.Drawing.Color.FromArgb(222, 239, 255); - - txt = cellPara.AppendText("\n Type:\t\t\t\t\t"); - txt.CharacterFormat.FontName = "Arial"; - txt.CharacterFormat.FontSize = 11f; - WDropDownFormField dropField = cellPara.AppendDropDownFormField(); - dropField.DropDownItems.Add("Higher"); - dropField.DropDownItems.Add("Vocational"); - dropField.DropDownItems.Add("Universal"); - dropField.CharacterFormat.TextColor = Syncfusion.Drawing.Color.MidnightBlue; - dropField.CharacterFormat.FontName = "Arial"; - dropField.CharacterFormat.FontSize = 11f; - - txt = cellPara.AppendText("\n\n Institution:\t\t\t\t"); - txt.CharacterFormat.FontName = "Arial"; - txt.CharacterFormat.FontSize = 11f; - txtField = cellPara.AppendTextFormField("Michigan University"); - txtField.TextRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.MidnightBlue; - txtField.TextRange.CharacterFormat.FontName = "Arial"; - txtField.CharacterFormat.FontSize = 11f; - - txt = cellPara.AppendText("\n\n Programming Languages:"); - txt.CharacterFormat.FontName = "Arial"; - txt.CharacterFormat.FontSize = 11f; - txt = cellPara.AppendText("\n\n\t C#:\t\t\t\t"); - txt.CharacterFormat.FontName = "Arial"; - txt.CharacterFormat.FontSize = 9f; - dropField = cellPara.AppendDropDownFormField(); - dropField.DropDownItems.Add("Perfect"); - dropField.DropDownItems.Add("Good"); - dropField.DropDownItems.Add("Excellent"); - dropField.CharacterFormat.TextColor = Syncfusion.Drawing.Color.MidnightBlue; - dropField.CharacterFormat.FontName = "Arial"; - dropField.CharacterFormat.FontSize = 11f; - - txt = cellPara.AppendText("\n\n\t VB:\t\t\t\t"); - txt.CharacterFormat.FontName = "Arial"; - txt.CharacterFormat.FontSize = 9f; - dropField = cellPara.AppendDropDownFormField(); - dropField.DropDownItems.Add("Perfect"); - dropField.DropDownItems.Add("Good"); - dropField.DropDownItems.Add("Excellent"); - dropField.CharacterFormat.TextColor = Syncfusion.Drawing.Color.MidnightBlue; - dropField.CharacterFormat.FontName = "Arial"; - dropField.CharacterFormat.FontSize = 11f; - - #endregion - - //Protect document - document.ProtectionType = ProtectionType.AllowOnlyFormFields; - MemoryStream st = new MemoryStream(); - document.Save(st, FormatType.Doc); - st.Seek(0, SeekOrigin.Begin); - - #endregion CreateForm - - #region FillForm - - // Create a new document. - WordDocument document1 = new WordDocument(st, FormatType.Doc); - IWSection sec = document1.LastSection; - WTextFormField textFF; - WDropDownFormField dropFF; - - //Access the text field - textFF = sec.Body.FormFields[0] as WTextFormField; - - //Fill value for the textfield - textFF.TextRange.Text = "John"; - - //Access the form field with feild name - textFF = sec.Body.FormFields["BirthDayField"] as WTextFormField; - textFF.TextRange.Text = "5.13.1980"; - - textFF = sec.Body.FormFields[2] as WTextFormField; - textFF.TextRange.Text = "221b Baker Street"; - - textFF = sec.Body.FormFields[3] as WTextFormField; - textFF.TextRange.Text = "(206)555-3412"; - - textFF = sec.Body.FormFields[4] as WTextFormField; - textFF.TextRange.Text = "John@company.com"; - - dropFF = sec.Body.FormFields[5] as WDropDownFormField; - - //Set the value - dropFF.DropDownSelectedIndex = 1; - - textFF = sec.Body.FormFields[6] as WTextFormField; - textFF.TextRange.Text = "Michigan University"; - - dropFF = sec.Body.FormFields[7] as WDropDownFormField; - dropFF.DropDownSelectedIndex = 1; - - dropFF = sec.Body.FormFields[8] as WDropDownFormField; - dropFF.DropDownSelectedIndex = 2; - - //Allow only to fill the form. - document1.ProtectionType = ProtectionType.AllowOnlyFormFields; - - #endregion FillForm - - FormatType type = FormatType.Docx; - string filename = "Forms.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "Forms.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "Forms.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } -} \ No newline at end of file diff --git a/Pages/Word/GroupShapes.cshtml b/Pages/Word/GroupShapes.cshtml deleted file mode 100644 index c3d9150a..00000000 --- a/Pages/Word/GroupShapes.cshtml +++ /dev/null @@ -1,68 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.GroupShapes - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : GroupShapes : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("groupshapes", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to create a Word document with Group shapes using Essential DocIO. -
-} -@section Description{ -
- With DocIO, you can create an Group shape and insert it into the Word Open XML Format document (DOCX, DOTX, DOCM, DOTM). You can add text to the shape and format the shape in the document. -
    -
  • - You can insert shape with "position relative to the page" in the Word document. -
  • -
  • - You can group and ungroup the shapes in Word document. -
  • -
  • - You can make shapes in the Word document accessible by defining alternate text. -
  • -
-
-
- More information about the Group shapes can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Group Shapes Example - Syncfusion Demos - } -@section Header{ -

Example of Group Shapes in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/GroupShapes.cshtml.cs b/Pages/Word/GroupShapes.cshtml.cs deleted file mode 100644 index a43e1586..00000000 --- a/Pages/Word/GroupShapes.cshtml.cs +++ /dev/null @@ -1,237 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Syncfusion.DocIORenderer; -using Syncfusion.Drawing; -using Syncfusion.Pdf; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class GroupShapes : PageModel -{ - public void OnGet() - { - - } - - public ActionResult OnPost(string Group1) - { - if (Group1 == null) - return null; - // return View(); - - //Creates a new Word document - WordDocument document = new WordDocument(); - //Adds new section to the document - IWSection section = document.AddSection(); - //Sets page setup options - section.PageSetup.Orientation = PageOrientation.Landscape; - section.PageSetup.Margins.All = 72; - section.PageSetup.PageSize = new SizeF(792f, 612f); - //Adds new paragraph to the section - WParagraph paragraph = section.AddParagraph() as WParagraph; - //Creates new group shape - GroupShape groupShape = new GroupShape(document); - //Adds group shape to the paragraph. - paragraph.ChildEntities.Add(groupShape); - - //Create a RoundedRectangle shape with "Management" text - CreateChildShape(AutoShapeType.RoundedRectangle, new RectangleF(324f, 107.7f, 144f, 45f), 0, false, false, - Color.FromArgb(50, 48, 142), "Management", groupShape, document); - - //Create a BentUpArrow shape to connect with "Development" shape - CreateChildShape(AutoShapeType.BentUpArrow, new RectangleF(177.75f, 176.25f, 210f, 50f), 180, false, false, - Color.White, null, groupShape, document); - - //Create a BentUpArrow shape to connect with "Sales" shape - CreateChildShape(AutoShapeType.BentUpArrow, new RectangleF(403.5f, 175.5f, 210f, 50f), 180, true, false, - Color.White, null, groupShape, document); - - //Create a DownArrow shape to connect with "Production" shape - CreateChildShape(AutoShapeType.DownArrow, new RectangleF(381f, 153f, 29.25f, 72.5f), 0, false, false, - Color.White, null, groupShape, document); - - //Create a RoundedRectangle shape with "Development" text - CreateChildShape(AutoShapeType.RoundedRectangle, new RectangleF(135f, 226.45f, 110f, 40f), 0, false, false, - Color.FromArgb(104, 57, 157), "Development", groupShape, document); - - //Create a RoundedRectangle shape with "Production" text - CreateChildShape(AutoShapeType.RoundedRectangle, new RectangleF(341f, 226.5f, 110f, 40f), 0, false, false, - Color.FromArgb(149, 50, 118), "Production", groupShape, document); - - //Create a RoundedRectangle shape with "Sales" text - CreateChildShape(AutoShapeType.RoundedRectangle, new RectangleF(546.75f, 226.5f, 110f, 40f), 0, false, false, - Color.FromArgb(179, 63, 62), "Sales", groupShape, document); - - //Create a DownArrow shape to connect with "Software" and "Hardware" shape - CreateChildShape(AutoShapeType.DownArrow, new RectangleF(177f, 265.5f, 25.5f, 20.25f), 0, false, false, - Color.White, null, groupShape, document); - - //Create a DownArrow shape to connect with "Series" and "Parts" shape - CreateChildShape(AutoShapeType.DownArrow, new RectangleF(383.25f, 265.5f, 25.5f, 20.25f), 0, false, false, - Color.White, null, groupShape, document); - - //Create a DownArrow shape to connect with "North" and "South" shape - CreateChildShape(AutoShapeType.DownArrow, new RectangleF(588.75f, 266.25f, 25.5f, 20.25f), 0, false, false, - Color.White, null, groupShape, document); - - //Create a BentUpArrow shape to connect with "Software" shape - CreateChildShape(AutoShapeType.BentUpArrow, new RectangleF(129.5f, 286.5f, 60f, 33f), 180, false, false, - Color.White, null, groupShape, document); - - //Create a BentUpArrow shape to connect with "Hardware" shape - CreateChildShape(AutoShapeType.BentUpArrow, new RectangleF(190.5f, 286.5f, 60f, 33f), 180, true, false, - Color.White, null, groupShape, document); - - //Create a BentUpArrow shape to connect with "Series" shape - CreateChildShape(AutoShapeType.BentUpArrow, new RectangleF(336f, 287.25f, 60f, 33f), 180, false, false, - Color.White, null, groupShape, document); - - //Create a BentUpArrow shape to connect with "Parts" shape - CreateChildShape(AutoShapeType.BentUpArrow, new RectangleF(397f, 287.25f, 60f, 33f), 180, true, false, - Color.White, null, groupShape, document); - - //Create a BentUpArrow shape to connect with "North" shape - CreateChildShape(AutoShapeType.BentUpArrow, new RectangleF(541.5f, 288f, 60f, 33f), 180, false, false, - Color.White, null, groupShape, document); - - //Create a BentUpArrow shape to connect with "South" shape - CreateChildShape(AutoShapeType.BentUpArrow, new RectangleF(602.5f, 288f, 60f, 33f), 180, true, false, - Color.White, null, groupShape, document); - - //Create a RoundedRectangle shape with "Software" text - CreateChildShape(AutoShapeType.RoundedRectangle, new RectangleF(93f, 320.25f, 90f, 40f), 0, false, false, - Color.FromArgb(23, 187, 189), "Software", groupShape, document); - - //Create a RoundedRectangle shape with "Hardware" text - CreateChildShape(AutoShapeType.RoundedRectangle, new RectangleF(197.2f, 320.25f, 90f, 40f), 0, false, false, - Color.FromArgb(24, 159, 106), "Hardware", groupShape, document); - - //Create a RoundedRectangle shape with "Series" text - CreateChildShape(AutoShapeType.RoundedRectangle, new RectangleF(299.25f, 320.25f, 90f, 40f), 0, false, false, - Color.FromArgb(23, 187, 189), "Series", groupShape, document); - - //Create a RoundedRectangle shape with "Parts" text - CreateChildShape(AutoShapeType.RoundedRectangle, new RectangleF(404.2f, 320.25f, 90f, 40f), 0, false, false, - Color.FromArgb(24, 159, 106), "Parts", groupShape, document); - - //Create a RoundedRectangle shape with "North" text - CreateChildShape(AutoShapeType.RoundedRectangle, new RectangleF(505.5f, 321.75f, 90f, 40f), 0, false, false, - Color.FromArgb(23, 187, 189), "North", groupShape, document); - - //Create a RoundedRectangle shape with "South" text - CreateChildShape(AutoShapeType.RoundedRectangle, new RectangleF(609.7f, 321.75f, 90f, 40f), 0, false, false, - Color.FromArgb(24, 159, 106), "South", groupShape, document); - - string filename = ""; - string contenttype = ""; - MemoryStream ms = new MemoryStream(); - - #region Document SaveOption - - //Save as .docx format - if (Group1 == "WordDocx") - { - filename = "GroupShapes.docx"; - contenttype = "application/vnd.ms-word.document.12"; - document.Save(ms, FormatType.Docx); - } - //Save as .xml format - else if (Group1 == "WordML") - { - filename = "GroupShapes.xml"; - contenttype = "application/msword"; - document.Save(ms, FormatType.WordML); - } - //Save as .pdf format - else if (Group1 == "Pdf") - { - filename = "GroupShapes.pdf"; - contenttype = "application/pdf"; - DocIORenderer renderer = new DocIORenderer(); - PdfDocument pdfDoc = renderer.ConvertToPDF(document); - pdfDoc.Save(ms); - pdfDoc.Close(); - } - - #endregion Document SaveOption - - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - - /// - /// Create a child shape with its specified properties and add into specified group shape - /// - /// Represent the AutoShapeType of child shape - /// Represent the bounds of child shape to be placed - /// Represent the rotation of child shape - /// Represent the horizontal flip of child shape - /// Represent the vertical flip of child shape - /// Represent the fill color of child shape - /// Represent the text that to be append in child shape - /// Represent the group shape to add a child shape - /// Represent the Word document instance - private static void CreateChildShape(AutoShapeType autoShapeType, RectangleF bounds, float rotation, bool flipH, - bool flipV, Color fillColor, string text, GroupShape groupShape, WordDocument wordDocument) - { - //Creates new shape to add into group - Shape shape = new Shape(wordDocument, autoShapeType); - //Sets height and width for shape - shape.Height = bounds.Height; - shape.Width = bounds.Width; - //Sets horizontal and vertical position - shape.HorizontalPosition = bounds.X; - shape.VerticalPosition = bounds.Y; - //Set rotation and flipH for the shape - if (rotation != 0) - shape.Rotation = rotation; - if (flipH) - shape.FlipHorizontal = true; - if (flipV) - shape.FlipVertical = true; - //Applies fill color for shape - if (fillColor != Color.White) - { - shape.FillFormat.Fill = true; - shape.FillFormat.Color = fillColor; - } - - //Set wrapping style for shape - shape.WrapFormat.TextWrappingStyle = TextWrappingStyle.InFrontOfText; - //Sets horizontal and vertical origin - shape.HorizontalOrigin = HorizontalOrigin.Page; - shape.VerticalOrigin = VerticalOrigin.Page; - //Sets no line to RoundedRectangle shapes - if (autoShapeType == AutoShapeType.RoundedRectangle) - shape.LineFormat.Line = false; - //Add paragraph for the shape textbody - if (text != null) - { - IWParagraph paragraph = shape.TextBody.AddParagraph(); - //Set required textbody alignments - shape.TextFrame.TextVerticalAlignment = Syncfusion.DocIO.DLS.VerticalAlignment.Middle; - //Set required paragraph alignments - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - IWTextRange textRange = paragraph.AppendText(text); - //Applies a required text formatting's - textRange.CharacterFormat.FontName = "Calibri"; - textRange.CharacterFormat.FontSize = 15; - textRange.CharacterFormat.TextColor = Color.White; - textRange.CharacterFormat.Bold = true; - textRange.CharacterFormat.Italic = true; - } - - //Adds the specified shape to group shape - groupShape.Add(shape); - } -} \ No newline at end of file diff --git a/Pages/Word/HTMLToWord.cshtml b/Pages/Word/HTMLToWord.cshtml deleted file mode 100644 index d33485d2..00000000 --- a/Pages/Word/HTMLToWord.cshtml +++ /dev/null @@ -1,73 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.HTMLToWord - -@using Syncfusion.EJ2 -@{var Title = "Essential DocIO (Word) : HTML to Word : Syncfusion";} -@section ControlsSection{ -
- @{ - Html.BeginForm("htmltoword", "word", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view the generated Word document being converted from a HTML file using the .NET Word Library (DocIO). Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- - - -
-
-
-
- -
- @Model.Message -
-
-
- Html.EndForm(); - } - } -
-} - - - -@section ActionDescription{ -
- This sample demonstrates how to convert the HTML to a Word document using .NET Word Library (DocIO). -
-} -@section Description{ -
- The .NET Word Library (DocIO) supports converting HTML to Word documents and vice versa. -
    -
  • Insert HTML snippets into existing Word document at specific positions.
  • -
  • Retrieve images from local, online, or cloud sources using event handler.
  • -
-
-
- More information about HTML to Word conversion and vice versa can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - HTML to Word Example - Syncfusion Demos - } -@section Header{ -

Example of HTML to Word conversion in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/HTMLToWord.cshtml.cs b/Pages/Word/HTMLToWord.cshtml.cs deleted file mode 100644 index f46f4cd1..00000000 --- a/Pages/Word/HTMLToWord.cshtml.cs +++ /dev/null @@ -1,95 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class HTMLToWord : PageModel -{ - private readonly IWebHostEnvironment _hostingEnvironment; - public HTMLToWord(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public void OnGet() - { - - } - public string Message { get; set; } - public ActionResult OnPost(string button) - { - if (button == null) - return null; - //return View(); - Stream stream = GetWordDocumentForWordConversion(); - - if (stream != null) - { - try - { - string output = (Request.Form.Files != null && Request.Form.Files.Count != 0) ? Path.GetFileNameWithoutExtension(Request.Form.Files[0].FileName) : "HTMLToWord"; - - //Opens an existing document from file system through constructor of WordDocument class - using (WordDocument document = new WordDocument(stream, FormatType.Html)) - { - FormatType type = FormatType.Docx; - string filename = output + ".docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - //Saves the Word document to MemoryStream - MemoryStream outputStream = new MemoryStream(); - document.Save(outputStream, type); - outputStream.Position = 0; - return File(outputStream, contenttype, filename); - } - } - catch - { - Message = string.Format("The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - return null; - } - } - return null; - //return View(); - } - - /// - /// Gets HTML document for Word Conversion - /// - /// HTML file for conversion - private Stream GetWordDocumentForWordConversion() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".html") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - Message = string.Format("Please choose HTML format document to convert to Word"); - return null; - } - } - else - { - //Opens an existing document from stream through constructor of `WordDocument` class - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/HTMLToWord.html", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } -} \ No newline at end of file diff --git a/Pages/Word/HeaderandFooter.cshtml b/Pages/Word/HeaderandFooter.cshtml deleted file mode 100644 index 8dd78163..00000000 --- a/Pages/Word/HeaderandFooter.cshtml +++ /dev/null @@ -1,84 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.HeaderandFooter - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Header, Footer : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("headerandfooter", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
- - - - - - - -
- - -
- - -
-
-
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to insert headers and footers to the Word document using Essential DocIO. -
-} -@section Description{ -
- With DocIO, you can insert all possible types of header and footer in the Word document like first page, odd page and even page header and footer. -
    -
  • - You can add text, tables, pictures, page numbers, fields etc., to the header and footer. -
  • -
  • - Previous section header and footer contents can be linked and repeated for the next section. -
  • -
  • - You can define different header and footer for the first page, odd pages and even pages in the document. -
  • -
-
-
- More information about the headers and footers can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Header and Footer Example - Syncfusion Demos - } -@section Header{ -

Example of Header and Footer in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/HeaderandFooter.cshtml.cs b/Pages/Word/HeaderandFooter.cshtml.cs deleted file mode 100644 index 11d648d2..00000000 --- a/Pages/Word/HeaderandFooter.cshtml.cs +++ /dev/null @@ -1,384 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class HeaderandFooter : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public HeaderandFooter(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - #region HeaderandFooter - - public ActionResult OnPost(string Group1, string chkFirst, string chkOddEven) - { - if (Group1 == null) - return null; - // return View(); - - // Creating a new document. - WordDocument doc = new WordDocument(); - // Add a new section to the document. - IWSection section1 = doc.AddSection(); - - if (chkFirst == "FirstPage") - { - //Enable different first page. - section1.PageSetup.DifferentFirstPage = true; - //Inserting Header Footer to first page. - InsertFirstPageHeaderFooter(doc, section1); - - if (chkOddEven == "OddAndEvenPages") - { - //Enable different odd and even pages. - section1.PageSetup.DifferentOddAndEvenPages = true; - //Inserting Header Footer to odd pages. - InsertOddPageHeaderFooter(doc, section1); - //Inserting Header Footer to even pages. - InsertEvenPageHeaderFooter(doc, section1); - } - else - { - //Inserting Header Footer to remaining pages. - InsertDefaultPageHeaderFooter(doc, section1); - } - } - else if (chkOddEven == "OddAndEvenPages") - { - //Enable different odd and even pages. - section1.PageSetup.DifferentOddAndEvenPages = true; - //Inserting Header Footer to odd pages. - InsertOddPageHeaderFooter(doc, section1); - //Inserting Header Footer to even pages. - InsertEvenPageHeaderFooter(doc, section1); - } - else - { - //Inserting Header Footer to all pages. - InsertDefaultPageHeaderFooter(doc, section1); - } - - // Add text to the document body section. - IWParagraph par; - par = section1.AddParagraph(); - - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/WinFAQ.txt"; - //Insert Text into the word Document. - StreamReader reader = new StreamReader(new FileStream(dataPath, FileMode.Open), System.Text.Encoding.ASCII); - string text = reader.ReadToEnd(); - par.AppendText(text); - reader.Dispose(); - reader = null; - - FormatType type = FormatType.Docx; - string filename = "HeaderAndFooter.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "HeaderAndFooter.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "HeaderAndFooter.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - doc.Save(ms, type); - doc.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - - #region InsertFirstPageHeaderFooter - - private void InsertFirstPageHeaderFooter(WordDocument doc, IWSection section) - { - //Add a new paragraph for header to the document. - IWParagraph headerPar = new WParagraph(doc); - - //Add a new table to the header. - IWTable table = section.HeadersFooters.FirstPageHeader.AddTable(); - RowFormat format = new RowFormat(); - - //Setting cleared table border style. - format.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Cleared; - - //Inserting table with a row and two columns. - table.ResetCells(1, 2, format, 265); - - //Inserting logo image to the table first cell. - headerPar = table[0, 0].AddParagraph() as WParagraph; - string basePath = _hostingEnvironment.WebRootPath; - FileStream imageStream = - new FileStream(basePath + @"/images/Word/Northwind_logo.png", FileMode.Open, FileAccess.Read); - headerPar.AppendPicture(imageStream); - - //Set Image size. - (headerPar.Items[0] as WPicture).Width = 232.5f; - (headerPar.Items[0] as WPicture).Height = 54.75f; - - //Inserting text to the table second cell. - headerPar = table[0, 1].AddParagraph() as WParagraph; - IWTextRange txt = - headerPar.AppendText( - "Company Headquarters,\n2501 Aerial Center Parkway,\nSuite 110, Morrisville, NC 27560,\nTEL 1-888-936-8638."); - txt.CharacterFormat.FontSize = 12; - txt.CharacterFormat.CharacterSpacing = 1.7f; - headerPar.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Right; - - //Add a new paragraph to the header with address text. - headerPar = new WParagraph(doc); - headerPar.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - txt = headerPar.AppendText("\nFirst Page Header"); - txt.CharacterFormat.CharacterSpacing = 1.7f; - section.HeadersFooters.FirstPageHeader.Paragraphs.Add(headerPar); - - //Add a footer paragraph text to the document. - WParagraph footerPar = new WParagraph(doc); - footerPar.ParagraphFormat.Tabs.AddTab(523f, TabJustification.Right, TabLeader.NoLeader); - - //Add text - footerPar.AppendText("Copyright Northwind Inc. 2001 - 2017"); - - //Add page and Number of pages field to the document. - footerPar.AppendText("\tFirst Page "); - footerPar.AppendField("Page", FieldType.FieldPage); - section.HeadersFooters.FirstPageFooter.Paragraphs.Add(footerPar); - - #region Page Number Settings - - section.PageSetup.RestartPageNumbering = true; - section.PageSetup.PageStartingNumber = 1; - section.PageSetup.PageNumberStyle = PageNumberStyle.Arabic; - - #endregion Page Number Settings - } - - #endregion InsertFirstPageHeaderFooter - - #region InsertDefaultPageHeaderFooter - - private void InsertDefaultPageHeaderFooter(WordDocument doc, IWSection section) - { - //Add a new paragraph for header to the document. - IWParagraph headerPar = new WParagraph(doc); - - //Add a new table to the header - IWTable table = section.HeadersFooters.Header.AddTable(); - RowFormat format = new RowFormat(); - - //Setting Single table border style. - format.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Single; - - //Inserting table with a row and two columns. - table.ResetCells(1, 2, format, 265); - - //Inserting logo image to the table first cell. - headerPar = table[0, 0].AddParagraph() as WParagraph; - string basePath = _hostingEnvironment.WebRootPath; - FileStream imageStream = - new FileStream(basePath + @"/images/Word/Northwind_logo.png", FileMode.Open, FileAccess.Read); - headerPar.AppendPicture(imageStream); - - //Set Image size. - (headerPar.Items[0] as WPicture).Width = 232.5f; - (headerPar.Items[0] as WPicture).Height = 54.75f; - - //Inserting text to the table second cell. - headerPar = table[0, 1].AddParagraph() as WParagraph; - IWTextRange txt = - headerPar.AppendText( - "Company Headquarters,\n2501 Aerial Center Parkway,\nSuite 110, Morrisville, NC 27560,\nTEL 1-888-936-8638."); - txt.CharacterFormat.FontSize = 12; - txt.CharacterFormat.CharacterSpacing = 1.7f; - headerPar.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Right; - - //Add a footer paragraph text to the document. - WParagraph footerPar = new WParagraph(doc); - footerPar.ParagraphFormat.Tabs.AddTab(523f, TabJustification.Right, TabLeader.NoLeader); - - //Add text. - footerPar.AppendText("Copyright Northwind Inc. 2001 - 2017"); - - //Add page and Number of pages field to the document. - footerPar.AppendText("\tPage "); - footerPar.AppendField("Page", FieldType.FieldPage); - section.HeadersFooters.Footer.Paragraphs.Add(footerPar); - - #region Page Number Settings - - section.PageSetup.RestartPageNumbering = true; - section.PageSetup.PageStartingNumber = 1; - section.PageSetup.PageNumberStyle = PageNumberStyle.Arabic; - - #endregion Page Number Settings - } - - #endregion InsertDefaultPageHeaderFooter - - #region InsertOddPageHeaderFooter - - private void InsertOddPageHeaderFooter(WordDocument doc, IWSection section) - { - //Add a new paragraph for header to the document. - IWParagraph headerPar = new WParagraph(doc); - - //Add a new table to the header. - IWTable table = section.HeadersFooters.OddHeader.AddTable(); - RowFormat format = new RowFormat(); - - //Setting cleared table border style. - format.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Cleared; - - //Inserting table with a row and two columns. - table.ResetCells(1, 2, format, 265); - - //Inserting logo image to the table first cell. - headerPar = table[0, 0].AddParagraph() as WParagraph; - string basePath = _hostingEnvironment.WebRootPath; - FileStream imageStream = - new FileStream(basePath + @"/images/Word/Northwind_logo.png", FileMode.Open, FileAccess.Read); - headerPar.AppendPicture(imageStream); - - //Set Image size. - (headerPar.Items[0] as WPicture).Width = 232.5f; - (headerPar.Items[0] as WPicture).Height = 54.75f; - - //Inserting text to the table second cell. - headerPar = table[0, 1].AddParagraph() as WParagraph; - IWTextRange txt = - headerPar.AppendText( - "Company Headquarters,\n2501 Aerial Center Parkway,\nSuite 110, Morrisville, NC 27560,\nTEL 1-888-936-8638."); - txt.CharacterFormat.FontSize = 12; - txt.CharacterFormat.CharacterSpacing = 1.7f; - headerPar.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Right; - - //Add a new paragraph to the header with address text. - headerPar = new WParagraph(doc); - headerPar.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - txt = headerPar.AppendText("\nOdd Page Header"); - txt.CharacterFormat.CharacterSpacing = 1.7f; - section.HeadersFooters.OddHeader.Paragraphs.Add(headerPar); - - //Add a footer paragraph text to the document. - WParagraph footerPar = new WParagraph(doc); - footerPar.ParagraphFormat.Tabs.AddTab(523f, TabJustification.Right, TabLeader.NoLeader); - - //Add text. - footerPar.AppendText("Copyright Northwind Inc. 2001 - 2017"); - - //Add page and Number of pages field to the document. - footerPar.AppendText("\tPage "); - footerPar.AppendField("Page", FieldType.FieldPage); - section.HeadersFooters.OddFooter.Paragraphs.Add(footerPar); - - #region Page Number Settings - - section.PageSetup.RestartPageNumbering = true; - section.PageSetup.PageStartingNumber = 1; - section.PageSetup.PageNumberStyle = PageNumberStyle.Arabic; - - #endregion Page Number Settings - } - - #endregion InsertOddPageHeaderFooter - - #region InsertEvenPageHeaderFooter - - private void InsertEvenPageHeaderFooter(WordDocument doc, IWSection section) - { - //Add a new paragraph for header to the document. - IWParagraph headerPar = new WParagraph(doc); - - //Add a new table to the header - IWTable table = section.HeadersFooters.EvenHeader.AddTable(); - RowFormat format = new RowFormat(); - - //Setting Single table border style. - format.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.Single; - - //Inserting table with a row and two columns. - table.ResetCells(1, 2, format, 265); - - //Inserting logo image to the table first cell. - headerPar = table[0, 0].AddParagraph() as WParagraph; - string basePath = _hostingEnvironment.WebRootPath; - FileStream imageStream = new FileStream(basePath + @"/images/Word/Northwind_logo.png", FileMode.Open, - FileAccess.Read); - headerPar.AppendPicture(imageStream); - - //Set Image size. - (headerPar.Items[0] as WPicture).Width = 232.5f; - (headerPar.Items[0] as WPicture).Height = 54.75f; - - //Inserting text to the table second cell. - headerPar = table[0, 1].AddParagraph() as WParagraph; - IWTextRange txt = - headerPar.AppendText( - "Company Headquarters,\n2501 Aerial Center Parkway,\nSuite 110, Morrisville, NC 27560,\nTEL 1-888-936-8638."); - txt.CharacterFormat.FontSize = 12; - txt.CharacterFormat.CharacterSpacing = 1.7f; - headerPar.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Right; - - //Add a new paragraph to the header with address text. - headerPar = new WParagraph(doc); - headerPar.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - txt = headerPar.AppendText("\nEven Page Header"); - txt.CharacterFormat.CharacterSpacing = 1.7f; - section.HeadersFooters.EvenHeader.Paragraphs.Add(headerPar); - - //Add a footer paragraph text to the document. - WParagraph footerPar = new WParagraph(doc); - footerPar.ParagraphFormat.Tabs.AddTab(523f, TabJustification.Right, TabLeader.NoLeader); - - //Add text. - footerPar.AppendText("Copyright Northwind Inc. 2001 - 2017"); - - //Add page and Number of pages field to the document. - footerPar.AppendText("\tPage "); - footerPar.AppendField("Page", FieldType.FieldPage); - footerPar.AppendText(" of "); - footerPar.AppendField("TotalNumberOfPages", FieldType.FieldNumPages); - section.HeadersFooters.EvenFooter.Paragraphs.Add(footerPar); - - #region Page Number Settings - - section.PageSetup.RestartPageNumbering = true; - section.PageSetup.PageStartingNumber = 1; - section.PageSetup.PageNumberStyle = PageNumberStyle.Arabic; - - #endregion Page Number Settings - } - - #endregion InsertEvenPageHeaderFooter - - #endregion HeaderandFooter -} \ No newline at end of file diff --git a/Pages/Word/HelloWorld.cshtml b/Pages/Word/HelloWorld.cshtml deleted file mode 100644 index bed7e080..00000000 --- a/Pages/Word/HelloWorld.cshtml +++ /dev/null @@ -1,73 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.HelloWorld - -@using Syncfusion.EJ2 -@{var Title = " Essential DocIO (Word) : Hello World : Syncfusion";} -@section ControlsSection{ -
- @{Html.BeginForm("helloworld", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to create a simple Word document with text, image and table using Essential DocIO. -
-} -@section Description{ -
-
    -
  • - With the help of DocIO, you can create document with few lines of code. -
  • -
  • - Create Word document from Scratch. -
  • -
  • - Open the existing Word document from file system or stream, modify and save it back. -
  • -
  • - Transverse through the document, manipulate content and formatting with the help of intuitive document object model -
  • -
  • - Save the Word document to a local file, stream, or stream it to the client browser. -
  • -
-
-
- More information about the basics of DocIO can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Hello World Example - Syncfusion Demos - } -@section Header{ -

Example of Hello World in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/HelloWorld.cshtml.cs b/Pages/Word/HelloWorld.cshtml.cs deleted file mode 100644 index dd8cca82..00000000 --- a/Pages/Word/HelloWorld.cshtml.cs +++ /dev/null @@ -1,273 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Syncfusion.Drawing; -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class HelloWorld : PageModel -{ - private readonly IWebHostEnvironment _hostingEnvironment; - public HelloWorld(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public void OnGet() - { - - } - - public IActionResult OnPost(string Group1) - { - if (Group1 == null) - return null; - //Get the current environment services to access the current physical path - // Creating a new document. - WordDocument document = new WordDocument(); - //Adding a new section to the document. - WSection section = document.AddSection() as WSection; - //Set Margin of the section - section.PageSetup.Margins.All = 72; - //Set page size of the section - section.PageSetup.PageSize = new SizeF(612, 792); - - //Create Paragraph styles - WParagraphStyle style = document.AddParagraphStyle("Normal") as WParagraphStyle; - style.CharacterFormat.FontName = "Calibri"; - style.CharacterFormat.FontSize = 11f; - style.ParagraphFormat.BeforeSpacing = 0; - style.ParagraphFormat.AfterSpacing = 8; - style.ParagraphFormat.LineSpacing = 13.8f; - - style = document.AddParagraphStyle("Heading 1") as WParagraphStyle; - style.ApplyBaseStyle("Normal"); - style.CharacterFormat.FontName = "Calibri Light"; - style.CharacterFormat.FontSize = 16f; - style.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(46, 116, 181); - style.ParagraphFormat.BeforeSpacing = 12; - style.ParagraphFormat.AfterSpacing = 0; - style.ParagraphFormat.Keep = true; - style.ParagraphFormat.KeepFollow = true; - style.ParagraphFormat.OutlineLevel = OutlineLevel.Level1; - IWParagraph paragraph = section.HeadersFooters.Header.AddParagraph(); - - string basePath = _hostingEnvironment.WebRootPath; - FileStream imageStream = new FileStream(basePath + @"/images/Word/AdventureCycle.jpg", FileMode.Open, FileAccess.Read); - WPicture picture = paragraph.AppendPicture(imageStream) as WPicture; - picture.TextWrappingStyle = TextWrappingStyle.InFrontOfText; - picture.VerticalOrigin = VerticalOrigin.Margin; - picture.VerticalPosition = -45; - picture.HorizontalOrigin = HorizontalOrigin.Column; - picture.HorizontalPosition = 263.5f; - picture.WidthScale = 20; - picture.HeightScale = 15; - - paragraph.ApplyStyle("Normal"); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Left; - WTextRange textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - textRange.CharacterFormat.FontName = "Calibri"; - textRange.CharacterFormat.TextColor = Syncfusion.Drawing.Color.Red; - - //Appends paragraph. - paragraph = section.AddParagraph(); - paragraph.ApplyStyle("Heading 1"); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - textRange = paragraph.AppendText("Adventure Works Cycles") as WTextRange; - textRange.CharacterFormat.FontSize = 18f; - textRange.CharacterFormat.FontName = "Calibri"; - - //Appends paragraph. - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.FirstLineIndent = 36; - paragraph.BreakCharacterFormat.FontSize = 12f; - textRange = paragraph.AppendText("Adventure Works Cycles, the fictitious company on which the AdventureWorks sample databases are based, is a large, multinational manufacturing company. The company manufactures and sells metal and composite bicycles to North American, European and Asian commercial markets. While its base operation is located in Bothell, Washington with 290 employees, several regional sales teams are located throughout their market base.") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.FirstLineIndent = 36; - paragraph.BreakCharacterFormat.FontSize = 12f; - textRange = paragraph.AppendText("In 2000, Adventure Works Cycles bought a small manufacturing plant, Importadores Neptuno, located in Mexico. Importadores Neptuno manufactures several critical subcomponents for the Adventure Works Cycles product line. These subcomponents are shipped to the Bothell location for final product assembly. In 2001, Importadores Neptuno, became the sole manufacturer and distributor of the touring bicycle product group.") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - - paragraph = section.AddParagraph(); - paragraph.ApplyStyle("Heading 1"); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Left; - textRange = paragraph.AppendText("Product Overview") as WTextRange; - textRange.CharacterFormat.FontSize = 16f; - textRange.CharacterFormat.FontName = "Calibri"; - //Appends table. - IWTable table = section.AddTable(); - table.ResetCells(3, 2); - table.TableFormat.Borders.BorderType = Syncfusion.DocIO.DLS.BorderStyle.None; - table.TableFormat.IsAutoResized = true; - - //Appends paragraph. - paragraph = table[0, 0].AddParagraph(); - paragraph.ParagraphFormat.AfterSpacing = 0; - paragraph.BreakCharacterFormat.FontSize = 12f; - //Appends picture to the paragraph. - imageStream = new FileStream(basePath + @"/images/Word/Mountain-200.jpg", FileMode.Open, FileAccess.Read); - picture = paragraph.AppendPicture(imageStream) as WPicture; - picture.TextWrappingStyle = TextWrappingStyle.TopAndBottom; - picture.VerticalOrigin = VerticalOrigin.Paragraph; - picture.VerticalPosition = 4.5f; - picture.HorizontalOrigin = HorizontalOrigin.Column; - picture.HorizontalPosition = -2.15f; - picture.WidthScale = 79; - picture.HeightScale = 79; - - //Appends paragraph. - paragraph = table[0, 1].AddParagraph(); - paragraph.ApplyStyle("Heading 1"); - paragraph.ParagraphFormat.AfterSpacing = 0; - paragraph.ParagraphFormat.LineSpacing = 12f; - paragraph.AppendText("Mountain-200"); - //Appends paragraph. - paragraph = table[0, 1].AddParagraph(); - paragraph.ParagraphFormat.AfterSpacing = 0; - paragraph.ParagraphFormat.LineSpacing = 12f; - paragraph.BreakCharacterFormat.FontSize = 12f; - paragraph.BreakCharacterFormat.FontName = "Times New Roman"; - - textRange = paragraph.AppendText("Product No: BK-M68B-38\r") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - textRange.CharacterFormat.FontName = "Times New Roman"; - textRange = paragraph.AppendText("Size: 38\r") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - textRange.CharacterFormat.FontName = "Times New Roman"; - textRange = paragraph.AppendText("Weight: 25\r") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - textRange.CharacterFormat.FontName = "Times New Roman"; - textRange = paragraph.AppendText("Price: $2,294.99\r") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - textRange.CharacterFormat.FontName = "Times New Roman"; - - //Appends paragraph. - paragraph = table[0, 1].AddParagraph(); - paragraph.ParagraphFormat.AfterSpacing = 0; - paragraph.ParagraphFormat.LineSpacing = 12f; - paragraph.BreakCharacterFormat.FontSize = 12f; - - //Appends paragraph. - paragraph = table[1, 0].AddParagraph(); - paragraph.ApplyStyle("Heading 1"); - paragraph.ParagraphFormat.AfterSpacing = 0; - paragraph.ParagraphFormat.LineSpacing = 12f; - paragraph.AppendText("Mountain-300 "); - //Appends paragraph. - paragraph = table[1, 0].AddParagraph(); - paragraph.ParagraphFormat.AfterSpacing = 0; - paragraph.ParagraphFormat.LineSpacing = 12f; - paragraph.BreakCharacterFormat.FontSize = 12f; - paragraph.BreakCharacterFormat.FontName = "Times New Roman"; - textRange = paragraph.AppendText("Product No: BK-M47B-38\r") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - textRange.CharacterFormat.FontName = "Times New Roman"; - textRange = paragraph.AppendText("Size: 35\r") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - textRange.CharacterFormat.FontName = "Times New Roman"; - textRange = paragraph.AppendText("Weight: 22\r") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - textRange.CharacterFormat.FontName = "Times New Roman"; - textRange = paragraph.AppendText("Price: $1,079.99\r") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - textRange.CharacterFormat.FontName = "Times New Roman"; - //Appends paragraph. - paragraph = table[1, 0].AddParagraph(); - paragraph.ParagraphFormat.AfterSpacing = 0; - paragraph.ParagraphFormat.LineSpacing = 12f; - paragraph.BreakCharacterFormat.FontSize = 12f; - - //Appends paragraph. - paragraph = table[1, 1].AddParagraph(); - paragraph.ApplyStyle("Heading 1"); - paragraph.ParagraphFormat.LineSpacing = 12f; - //Appends picture to the paragraph. - imageStream = new FileStream(basePath + @"/images/Word/Mountain-300.jpg", FileMode.Open, FileAccess.Read); - picture = paragraph.AppendPicture(imageStream) as WPicture; - picture.TextWrappingStyle = TextWrappingStyle.TopAndBottom; - picture.VerticalOrigin = VerticalOrigin.Paragraph; - picture.VerticalPosition = 8.2f; - picture.HorizontalOrigin = HorizontalOrigin.Column; - picture.HorizontalPosition = -14.95f; - picture.WidthScale = 75; - picture.HeightScale = 75; - - //Appends paragraph. - paragraph = table[2, 0].AddParagraph(); - paragraph.ApplyStyle("Heading 1"); - paragraph.ParagraphFormat.LineSpacing = 12f; - //Appends picture to the paragraph. - imageStream = new FileStream(basePath + @"/images/Word/Road-550-W.jpg", FileMode.Open, FileAccess.Read); - picture = paragraph.AppendPicture(imageStream) as WPicture; - picture.TextWrappingStyle = TextWrappingStyle.TopAndBottom; - picture.VerticalOrigin = VerticalOrigin.Paragraph; - picture.VerticalPosition = 3.75f; - picture.HorizontalOrigin = HorizontalOrigin.Column; - picture.HorizontalPosition = -5f; - picture.WidthScale = 92; - picture.HeightScale = 92; - - //Appends paragraph. - paragraph = table[2, 1].AddParagraph(); - paragraph.ApplyStyle("Heading 1"); - paragraph.ParagraphFormat.AfterSpacing = 0; - paragraph.ParagraphFormat.LineSpacing = 12f; - paragraph.AppendText("Road-150 "); - //Appends paragraph. - paragraph = table[2, 1].AddParagraph(); - paragraph.ParagraphFormat.AfterSpacing = 0; - paragraph.ParagraphFormat.LineSpacing = 12f; - paragraph.BreakCharacterFormat.FontSize = 12f; - paragraph.BreakCharacterFormat.FontName = "Times New Roman"; - textRange = paragraph.AppendText("Product No: BK-R93R-44\r") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - textRange.CharacterFormat.FontName = "Times New Roman"; - textRange = paragraph.AppendText("Size: 44\r") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - textRange.CharacterFormat.FontName = "Times New Roman"; - textRange = paragraph.AppendText("Weight: 14\r") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - textRange.CharacterFormat.FontName = "Times New Roman"; - textRange = paragraph.AppendText("Price: $3,578.27\r") as WTextRange; - textRange.CharacterFormat.FontSize = 12f; - textRange.CharacterFormat.FontName = "Times New Roman"; - //Appends paragraph. - paragraph = table[2, 1].AddParagraph(); - paragraph.ApplyStyle("Heading 1"); - paragraph.ParagraphFormat.LineSpacing = 12f; - //Appends paragraph. - section.AddParagraph(); - FormatType type = FormatType.Docx; - string filename = "HelloWorld.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "HelloWorld.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "HelloWorld.xml"; - contenttype = "application/msword"; - } - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - - } -} \ No newline at end of file diff --git a/Pages/Word/ImageInsertion.cshtml b/Pages/Word/ImageInsertion.cshtml deleted file mode 100644 index 708b2aca..00000000 --- a/Pages/Word/ImageInsertion.cshtml +++ /dev/null @@ -1,71 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.ImageInsertion - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Image : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("imageinsertion", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to insert images into the Word document using Essential DocIO. -
-} -@section Description{ -
- DocIO allows you to insert images into the Word document at desired location. -
    -
  • - You can insert image as "in line with text" or "position relative to the page" in the Word document. -
  • -
  • - Images in the Word document can be accessed by its name, title, etc., and resized to required size. -
  • -
  • - You can make images in the Word document accessible by defining alternate text. -
  • -
  • - You can add caption to an image and update the caption numbers (Sequence fields). -
  • -
-
-
- More information about the images support can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Image Insertion Example - Syncfusion Demos - } -@section Header{ -

Example of Image Insertion in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/ImageInsertion.cshtml.cs b/Pages/Word/ImageInsertion.cshtml.cs deleted file mode 100644 index 9c03d708..00000000 --- a/Pages/Word/ImageInsertion.cshtml.cs +++ /dev/null @@ -1,145 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class ImageInsertion : PageModel -{ - public void OnGet() - { - - } - - private readonly IWebHostEnvironment _hostingEnvironment; - - public ImageInsertion(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - #region ImageInsertion - - public ActionResult OnPost(string Group1) - { - if (Group1 == null) - return null; - // return View(); - //Create a new document - WordDocument document = new WordDocument(); - //Adding a new section to the document. - IWSection section = document.AddSection(); - section.PageSetup.Margins.All = 72; - //Adding a paragraph to the section - IWParagraph paragraph = section.AddParagraph(); - //Writing text. - paragraph.AppendText("This sample demonstrates how to insert Vector and Scalar images inside a document."); - //Adding a new paragraph - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - string basePath = _hostingEnvironment.WebRootPath; - FileStream imageStream = new FileStream(basePath + @"/images/Word/yahoo.gif", FileMode.Open, FileAccess.Read); - //Inserting .gif . - WPicture picture = (WPicture)paragraph.AppendPicture(imageStream); - //Adding Image caption - picture.AddCaption("Figure", CaptionNumberingFormat.Roman, CaptionPosition.AfterImage); - ApplyFormattingForCaption(document.LastParagraph); - - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - imageStream = new FileStream(basePath + @"/images/Word/Reports.bmp", FileMode.Open, FileAccess.Read); - //Inserting .bmp - picture = (WPicture)paragraph.AppendPicture(imageStream); - //Adding Image caption - picture.AddCaption("Figure", CaptionNumberingFormat.Roman, CaptionPosition.AfterImage); - ApplyFormattingForCaption(document.LastParagraph); - - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - imageStream = new FileStream(basePath + @"/images/Word/google.png", FileMode.Open, FileAccess.Read); - //Inserting .png - picture = (WPicture)paragraph.AppendPicture(imageStream); - //Adding Image caption - picture.AddCaption("Figure", CaptionNumberingFormat.Roman, CaptionPosition.AfterImage); - ApplyFormattingForCaption(document.LastParagraph); - - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - imageStream = new FileStream(basePath + @"/images/Word/Square.tif", FileMode.Open, FileAccess.Read); - //Inserting .tif - picture = (WPicture)paragraph.AppendPicture(imageStream); - //Adding Image caption - picture.AddCaption("Figure", CaptionNumberingFormat.Roman, CaptionPosition.AfterImage); - ApplyFormattingForCaption(document.LastParagraph); - - //Adding a new paragraph. - paragraph = section.AddParagraph(); - //Setting Alignment for the image. - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - imageStream = new FileStream(basePath + @"/images/Word/Ess chart.emf", FileMode.Open, FileAccess.Read); - //Inserting .wmf Image to the document. - WPicture mImage = (WPicture)paragraph.AppendPicture(imageStream); - //Scaling Image - mImage.HeightScale = 50f; - mImage.WidthScale = 50f; - - //Adding Image caption - mImage.AddCaption("Figure", CaptionNumberingFormat.Roman, CaptionPosition.AfterImage); - ApplyFormattingForCaption(document.LastParagraph); - - //Updates the fields in Word document - document.UpdateDocumentFields(); - - FormatType type = FormatType.Docx; - string filename = "Image Insertion.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "Image Insertion.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "Image Insertion.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - - /// - /// Apply formattings for image caption paragraph - /// - private void ApplyFormattingForCaption(WParagraph paragraph) - { - //Align the caption - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - //Sets after spacing - paragraph.ParagraphFormat.AfterSpacing = 1.5f; - //Sets before spacing - paragraph.ParagraphFormat.BeforeSpacing = 1.5f; - } - - #endregion ImageInsertion -} \ No newline at end of file diff --git a/Pages/Word/InsertBreak.cshtml b/Pages/Word/InsertBreak.cshtml deleted file mode 100644 index c626128e..00000000 --- a/Pages/Word/InsertBreak.cshtml +++ /dev/null @@ -1,57 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.InsertBreak - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Insert Break : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("insertbreak", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to insert breaks to the Word document using Essential DocIO. -
-} -@section Description{ -
- DocIO supports to insert page, line, section and column breaks in the Word document. With DocIO, you can create professional report in Word document with cover page, page breaks, column breaks and section break. -
-
- More information about the breaks can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Insert Break Example - Syncfusion Demos - } -@section Header{ -

Example of Insert Break in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/InsertBreak.cshtml.cs b/Pages/Word/InsertBreak.cshtml.cs deleted file mode 100644 index 94b835ee..00000000 --- a/Pages/Word/InsertBreak.cshtml.cs +++ /dev/null @@ -1,198 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class InsertBreak : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public InsertBreak(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1) - { - if (Group1 == null) - return null; - // return View(); - - //Creating a new document - WordDocument document = new WordDocument(); - //Adding a new section. - IWSection section = document.AddSection(); - IWParagraph paragraph = section.AddParagraph(); - paragraph = section.AddParagraph(); - section.PageSetup.Margins.All = 20f; - IWTextRange text = paragraph.AppendText("Adventure products"); - //Formatting Text - text.CharacterFormat.FontName = "Bitstream Vera Sans"; - text.CharacterFormat.FontSize = 12f; - text.CharacterFormat.Bold = true; - section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.LineSpacing = 20f; - paragraph.AppendText( - "In 2000, Adventure Works Cycles bought a small manufacturing plant, Importadores Neptuno, located in Mexico. Importadores Neptuno manufactures several critical subcomponents for the Adventure Works Cycles product line. These subcomponents are shipped to the Bothell location for final product assembly. In 2001, Importadores Neptuno, became the sole manufacturer and distributor of the touring bicycle product group "); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Justify; - - #region Line break - - paragraph.AppendBreak(BreakType.LineBreak); - paragraph.AppendBreak(BreakType.LineBreak); - - #endregion Line break - - section = document.AddSection(); - - section.BreakCode = SectionBreakCode.NoBreak; - section.PageSetup.Margins.All = 20f; - //Adding three columns to section. - section.AddColumn(100, 15); - section.AddColumn(100, 15); - section.AddColumn(100, 15); - //Set the columns to be of equal width. - section.MakeColumnsEqual(); - - //Adding a new paragraph to the section. - paragraph = section.AddParagraph(); - //Adding text. - text = paragraph.AppendText("Mountain-200"); - //Formatting Text - text.CharacterFormat.FontName = "Bitstream Vera Sans"; - text.CharacterFormat.FontSize = 12f; - text.CharacterFormat.Bold = true; - //Adding a new paragraph to the section. - section.AddParagraph(); - paragraph = section.AddParagraph(); - string basePath = _hostingEnvironment.WebRootPath; - FileStream imageStream = - new FileStream(basePath + @"/images/Word/Mountain-200.jpg", FileMode.Open, FileAccess.Read); - //Inserting an Image. - WPicture picture = paragraph.AppendPicture(imageStream) as WPicture; - picture.Width = 120f; - picture.Height = 90f; - //Adding a new paragraph to the section. - section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.LineSpacing = 20f; - //Adding text. - paragraph.AppendText(@"Product No:BK-M68B-38" + "\n" + "Size: 38" + "\n" + "Weight: 25\n" + "Price: $2,294.99"); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Justify; - - // Set column break as true. It navigates the cursor position to the next Column. - paragraph.ParagraphFormat.ColumnBreakAfter = true; - - paragraph = section.AddParagraph(); - text = paragraph.AppendText("Mountain-300"); - text.CharacterFormat.FontName = "Bitstream Vera Sans"; - text.CharacterFormat.FontSize = 12f; - text.CharacterFormat.Bold = true; - - section.AddParagraph(); - paragraph = section.AddParagraph(); - - imageStream = new FileStream(basePath + @"/images/Word/Mountain-300.jpg", FileMode.Open, FileAccess.Read); - picture = paragraph.AppendPicture(imageStream) as WPicture; - picture.Width = 120f; - picture.Height = 90f; - section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.LineSpacing = 20f; - paragraph.AppendText(@"Product No:BK-M4-38" + "\n" + "Size: 35\n" + "Weight: 22" + "\n" + "Price: $1,079.99"); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Justify; - paragraph.ParagraphFormat.ColumnBreakAfter = true; - - paragraph = section.AddParagraph(); - text = paragraph.AppendText("Road-150"); - text.CharacterFormat.FontName = "Bitstream Vera Sans"; - text.CharacterFormat.FontSize = 12f; - text.CharacterFormat.Bold = true; - - section.AddParagraph(); - paragraph = section.AddParagraph(); - - imageStream = new FileStream(basePath + @"/images/Word/Road-550-W.jpg", FileMode.Open, FileAccess.Read); - picture = paragraph.AppendPicture(imageStream) as WPicture; - picture.Width = 120f; - picture.Height = 90f; - section.AddParagraph(); - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.LineSpacing = 20f; - paragraph.AppendText(@"Product No: BK-R93R-44" + "\n" + "Size: 44" + "\n" + "Weight: 14" + "\n" + - "Price: $3,578.27"); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Justify; - - section = document.AddSection(); - section.BreakCode = SectionBreakCode.NoBreak; - section.PageSetup.Margins.All = 20f; - - text = section.AddParagraph().AppendText("First Look\n"); - //Formatting Text - text.CharacterFormat.FontName = "Bitstream Vera Sans"; - text.CharacterFormat.FontSize = 12f; - text.CharacterFormat.Bold = true; - - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.LineSpacing = 20f; - paragraph.AppendText( - @"Adventure Works Cycles, the fictitious company, is a large, multinational manufacturing company. The company manufactures and sells metal and composite bicycles to North American, European and Asian commercial markets. While its base operation is located in Bothell, Washington with 290 employees, several regional sales teams are located throughout their market base."); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Justify; - paragraph.ParagraphFormat.PageBreakAfter = true; - - paragraph = section.AddParagraph(); - text = paragraph.AppendText("Introduction\n"); - //Formatting Text - text.CharacterFormat.FontName = "Bitstream Vera Sans"; - text.CharacterFormat.FontSize = 12f; - text.CharacterFormat.Bold = true; - paragraph = section.AddParagraph(); - paragraph.ParagraphFormat.LineSpacing = 20f; - paragraph.AppendText( - @"In 2000, Adventure Works Cycles bought a small manufacturing plant, Importadores Neptuno, located in Mexico. Importadores Neptuno manufactures several critical subcomponents for the Adventure Works Cycles product line. These subcomponents are shipped to the Bothell location for final product assembly. In 2001, Importadores Neptuno, became the sole manufacturer and distributor of the touring bicycle product group."); - paragraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Justify; - - FormatType type = FormatType.Docx; - string filename = "InsertBreak.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "InsertBreak.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "InsertBreak.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } -} \ No newline at end of file diff --git a/Pages/Word/InsertOLEObject.cshtml b/Pages/Word/InsertOLEObject.cshtml deleted file mode 100644 index 8e3f9bf3..00000000 --- a/Pages/Word/InsertOLEObject.cshtml +++ /dev/null @@ -1,57 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.InsertOLEObject - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : OLE Object : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("insertoleobject", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to insert OLE Object into the Word document using Essential DocIO. -
-} -@section Description{ -
- With DocIO, you can insert an OLE Object as either link or embed into the Word document. You can extract the OLE Object data from the Word document and save as native file. -
-
- More information about the OLE Objects can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Insert OLE Object Example - Syncfusion Demos - } -@section Header{ -

Example of Insert OLE Object in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/InsertOLEObject.cshtml.cs b/Pages/Word/InsertOLEObject.cshtml.cs deleted file mode 100644 index 69ca0054..00000000 --- a/Pages/Word/InsertOLEObject.cshtml.cs +++ /dev/null @@ -1,100 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class InsertOLEObject : PageModel -{ - public void OnGet() - { - - } - - private readonly IWebHostEnvironment _hostingEnvironment; - - public InsertOLEObject(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - #region InsertOLEObject - public ActionResult OnPost(string Group1) - { - if (Group1 == null) - return null; - // return View(); - - //Data folder path is resolved from requested page physical path. - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/OleTemplate.doc"; - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - WordDocument oleSource; - if (Group1 == ".doc") - //Open an existing word document - oleSource = new WordDocument(fileStream, FormatType.Doc); - - else - //Open an existing word document - oleSource = new WordDocument(fileStream, FormatType.Doc); - fileStream.Dispose(); - fileStream = null; - WordDocument dest = new WordDocument(); - dest.EnsureMinimal(); - - // Get OLE object from source document - WOleObject oleObject = oleSource.LastParagraph.Items[0] as WOleObject; - - WPicture pic = oleObject.OlePicture.Clone() as WPicture; - dest.LastParagraph.AppendText("OLE Object Demo"); - dest.LastParagraph.ApplyStyle(BuiltinStyle.Heading1); - dest.LastParagraph.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - - dest.Sections[0].AddParagraph(); - dest.LastParagraph.AppendText("Adobe PDF object Inserted"); - dest.LastParagraph.ApplyStyle(BuiltinStyle.Heading2); - - dest.Sections[0].AddParagraph(); - // AppendOLE object to the destination document - dest.LastParagraph.AppendOleObject(oleObject.Container, pic, OleLinkType.Embed); - - FormatType type = FormatType.Docx; - string filename = "InsertOLEObject.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "InsertOLEObject.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "InsertOLEObject.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - dest.Save(ms, type); - dest.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - - #endregion InsertOLEObject -} \ No newline at end of file diff --git a/Pages/Word/LetterFormat.cshtml b/Pages/Word/LetterFormat.cshtml deleted file mode 100644 index 95575778..00000000 --- a/Pages/Word/LetterFormat.cshtml +++ /dev/null @@ -1,71 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.LetterFormat - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Letter Format : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("letterformat", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- - Map DataField -
-
- Save As : - - -   - - -   - - -
-
-
- -   - -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to generate a letter using Mail merge functionality of Essential Word (DocIO) library. -
-} -@section Description{ -
- With the mail merge support of DocIO, you can create a batch of personalized document or report very easily and fast. -
    -
  • - You can design templates in Microsoft Word and allow DocIO to populate documents with data from various data sources such as business objects, ADO.NET objects, arrays, XML, dynamic objects, and relational objects. -
  • -
  • - Simple text, numeric data and image from data sources can be populated in Word documents using mail merge. -
  • -
-
-
- More information about the Mail merge can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Letter Format Example - Syncfusion Demos - } -@section Header{ -

Example of Letter Format in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/LetterFormat.cshtml.cs b/Pages/Word/LetterFormat.cshtml.cs deleted file mode 100644 index f3ec45c8..00000000 --- a/Pages/Word/LetterFormat.cshtml.cs +++ /dev/null @@ -1,121 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using System.Data; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class LetterFormat : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public LetterFormat(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1, string Button, string MapDataField) - { - string basePath = _hostingEnvironment.WebRootPath; - string contenttype1 = "application/msword"; - string dataPath = basePath + @"/Word/Letter Formatting.doc"; - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - if (Group1 == null) - return null; - // return View(); - if (Button == "View Template") - { - return File(fileStream, contenttype1, "Letter Formatting.doc"); - } - - fileStream.Dispose(); - fileStream = null; - // try - // { - // Load the template. - FileStream fileStreamPath = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - WordDocument document = new WordDocument(fileStreamPath, FormatType.Doc); - fileStreamPath.Dispose(); - fileStreamPath = null; - //Gets the data table. - DataTable table = GetDataTable(); - //Checks if data field mapping should be enabled - if (MapDataField == "MapDataField") - { - //Removes paragraph that contains only empty fields. - document.MailMerge.RemoveEmptyParagraphs = true; - //To clear the fields with empty value - document.MailMerge.ClearFields = true; - //Clear the map fields - document.MailMerge.MappedFields.Clear(); - //Update the mapping fields - document.MailMerge.MappedFields.Add("Contact Name", "ContactName"); - document.MailMerge.MappedFields.Add("Company Name", "CompanyName"); - document.MailMerge.MappedFields.Add("CompanyAddress", "Address"); - document.MailMerge.MappedFields.Add("Residing City", "City"); - document.MailMerge.MappedFields.Add("Current Region", "Region"); - document.MailMerge.MappedFields.Add("Home Country", "Country"); - } - - //Mailmerge can be performed with the input as either DataRow, DataField, DataView, IDataReader - //or a set of merge field names and values. Here, one particular row is extraced from the table and used. - DataRow dr = table.Rows[0]; - //Executes mail merge for the selected record or row. - document.MailMerge.Execute(dr); - FormatType type = FormatType.Docx; - string filename = "LetterFormat.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "LetterFormat.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "LetterFormat.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - // } - // catch (Exception) - // { - // } - // - // return View(); - } - - private DataTable GetDataTable() - { - //Data source. - DataSet ds = new DataSet(); - ds.ReadXml(_hostingEnvironment.WebRootPath + @"/Word/Customers.xml"); - DataTable table = ds.Tables[0]; - return table; - } -} \ No newline at end of file diff --git a/Pages/Word/MacroPreservation.cshtml b/Pages/Word/MacroPreservation.cshtml deleted file mode 100644 index 8639aac3..00000000 --- a/Pages/Word/MacroPreservation.cshtml +++ /dev/null @@ -1,51 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.MacroPreservation - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Macro Preservation : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("macropreservation", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
- -   - -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates preservation of macros in macro-enabled documents (DOCM and DOTM) using Essential DocIO. -
-} -@section Description{ -
- DocIO supports to preserve and remove the macros present in the Word Open XML macro-enabled document (DOCM and DOTM).  -
    -
  • - You can generate forms, invoice and other reports with functional commands and controls in a Word Open XML macro-enabled document, starting from Word Open XML macro-enabled template. -
  • -
-
-
- More information about the macros can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Macro Preservation Example - Syncfusion Demos - } -@section Header{ -

Example of Macro Preservation in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/MacroPreservation.cshtml.cs b/Pages/Word/MacroPreservation.cshtml.cs deleted file mode 100644 index d7b28aad..00000000 --- a/Pages/Word/MacroPreservation.cshtml.cs +++ /dev/null @@ -1,201 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; -using System.Xml; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class MacroPreservation : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public MacroPreservation(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string Button) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/MacroTemplate.dotm"; - string contenttype1 = "application/msword"; - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - if (Button == null) - return null; - // return View(); - if (Button == "View Template") - { - return File(fileStream, contenttype1, "MacroTemplate.dotm"); - } - try - { - string dataPathMacro = basePath + @"/Word/MacroTemplate.dotm"; - fileStream = new FileStream(dataPathMacro, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - // Load the template. - WordDocument document = new WordDocument(fileStream,FormatType.Dotm); - fileStream.Dispose(); - fileStream = null; - //Create MailMergeDataTable - MailMergeDataTable mailMergeDataTableProductListData = GetMailMergeDataTableProductListData(); - // Execute Mail Merge with groups. - document.MailMerge.ExecuteGroup(mailMergeDataTableProductListData); - - #region Document SaveOption - //Save as .docm format - FormatType type = FormatType.Word2013Docm; - string filename = "MacroPreservation.docm"; - string contenttype = "application/msword"; - #endregion Document SaveOption - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - catch (Exception) - { } - - return null; - // return View(); - } - - /// - /// Gets the mail merge data table. - /// - private MailMergeDataTable GetMailMergeDataTableProductListData() - { - List product = new List(); - FileStream fs = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/ProductList.xml", FileMode.Open, - FileAccess.Read); - XmlReader reader = XmlReader.Create(fs); - if (reader == null) - throw new Exception("reader"); - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - if (reader.LocalName != "ProductList") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - reader.Read(); - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - while (reader.LocalName != "ProductList") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "Products": - product.Add(GetProductsDetails(reader)); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "ProductList") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - MailMergeDataTable dataTable = new MailMergeDataTable("Products", product); - reader.Dispose(); - fs.Dispose(); - return dataTable; - } - - /// - /// Gets the products. - /// - /// The reader. - private Products GetProductsDetails(XmlReader reader) - { - if (reader == null) - throw new Exception("reader"); - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - if (reader.LocalName != "Products") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - reader.Read(); - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - Products product = new Products(); - while (reader.LocalName != "Products") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "ProductName": - product.ProductName = reader.ReadElementContentAsString(); - break; - case "Binary": - product.Binary = reader.ReadElementContentAsString(); - break; - case "Source": - product.Source = reader.ReadElementContentAsString(); - break; - - default: - reader.Skip(); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "Products") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - return product; - } -} - -public class Products -{ - #region Fields - private string m_productName; - private string m_binary; - private string m_source; - - #endregion - #region Properties - public string ProductName - { - get { return m_productName; } - set { m_productName = value; } - } - public string Binary - { - get { return m_binary; } - set { m_binary = value; } - } - public string Source - { - get { return m_source; } - set { m_source = value; } - } - - #endregion - #region Constructor - public Products(string productName, string binary, string source) - { - m_productName = productName; - m_binary = binary; - m_source = source; - - } - public Products() - { } - #endregion -} \ No newline at end of file diff --git a/Pages/Word/MailMergeEvent.cshtml b/Pages/Word/MailMergeEvent.cshtml deleted file mode 100644 index 0a3aa7f5..00000000 --- a/Pages/Word/MailMergeEvent.cshtml +++ /dev/null @@ -1,67 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.MailMergeEvent - -@using Syncfusion.EJ2 -@{ var Title = " Essential DocIO (Word) : Mail Merge Events : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("mailmergeevent", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Save As : - - -   - - -   - - -
-
-
- -   - -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to format the Mail merged data using Mail merge events of Essential Word (DocIO) library. -
-} -@section Description{ -
- DocIO provides event support for text and image merge fields. With these events, you can format the text and the image merged in the Word document during mail merge.   -
    -
  • - Using event support, you can generate report with each record in new page by inserting page break. -
  • -
  • - You can perform mail merge for a group of merge fields by defining group start and end fields in the template document. -
  • -
-
-
- More information about the Mail merge event can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Mail Merge Event Example - Syncfusion Demos - } -@section Header{ -

Example of Mail Merge Event in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/MailMergeEvent.cshtml.cs b/Pages/Word/MailMergeEvent.cshtml.cs deleted file mode 100644 index 8abe68ed..00000000 --- a/Pages/Word/MailMergeEvent.cshtml.cs +++ /dev/null @@ -1,369 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; -using System.Xml; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class MailMergeEvent : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public MailMergeEvent(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1, string Button) - { - string basePath = _hostingEnvironment.WebRootPath; - string contenttype1 = "application/msword"; - string dataPath = basePath + @"/Word/MailMergeEventTemplate.doc"; - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - if (Group1 == null) - return null; - // return View(); - if (Button == "View Template") - { - return File(fileStream, contenttype1, "MailMergeEventTemplate.doc"); - } - - fileStream.Dispose(); - fileStream = null; - - // try - // { - // Load the template. - FileStream fileStreamPath = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - WordDocument document = new WordDocument(fileStreamPath, FormatType.Doc); - fileStreamPath.Dispose(); - fileStreamPath = null; - - // Using Merge events to do conditional formatting during runtime. - document.MailMerge.MergeField += new MergeFieldEventHandler(AlternateRows_MergeField); - document.MailMerge.MergeImageField += new MergeImageFieldEventHandler(MergeField_ProductImage); - - //Create MailMergeDataTable - MailMergeDataTable mailMergeDataTablePriceList = GetMailMergeDataTablePriceList(); - MailMergeDataTable mailMergeDataTableProductData = GetMailMergeDataTableProductData(); - - // Execute Mail Merge with groups. - document.MailMerge.ExecuteGroup(mailMergeDataTablePriceList); - document.MailMerge.ExecuteGroup(mailMergeDataTableProductData); - FormatType type = FormatType.Docx; - string filename = "MailMergeEvent.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "MailMergeEvent.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "MailMergeEvent.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - // } - // catch (Exception) - // { - // } - // - // return View(); - } - - private void AlternateRows_MergeField(object sender, MergeFieldEventArgs args) - { - // Conditionally format data during Merge. - if (args.RowIndex % 2 == 0) - { - args.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(255, 102, 0); - } - } - - private void MergeField_ProductImage(object sender, MergeImageFieldEventArgs args) - { - // Get the image from disk during Merge. - if (args.FieldName == "ProductImage") - { - string ProductFileName = args.FieldValue.ToString(); - FileStream fs = new FileStream(_hostingEnvironment.WebRootPath + @"/images/Word/" + ProductFileName, - FileMode.Open, FileAccess.Read); - args.ImageStream = fs; - } - } - - /// - /// Gets the mail merge data table. - /// - private MailMergeDataTable GetMailMergeDataTablePriceList() - { - List product_PriceList = new List(); - FileStream fs = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/ProductPriceList.xml", FileMode.Open, - FileAccess.Read); - XmlReader reader = XmlReader.Create(fs); - if (reader == null) - throw new Exception("reader"); - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - if (reader.LocalName != "Products") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - reader.Read(); - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - while (reader.LocalName != "Products") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "Product_PriceList": - product_PriceList.Add(GetProduct_PriceList(reader)); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "Products") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - MailMergeDataTable dataTable1 = new MailMergeDataTable("Product_PriceList", product_PriceList); - reader.Dispose(); - fs.Dispose(); - return dataTable1; - } - - /// - /// Gets the product price list. - /// - /// The reader. - private Product_PriceList GetProduct_PriceList(XmlReader reader) - { - if (reader == null) - throw new Exception("reader"); - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - if (reader.LocalName != "Product_PriceList") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - reader.Read(); - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - Product_PriceList product_PriceList = new Product_PriceList(); - while (reader.LocalName != "Product_PriceList") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "ProductName": - product_PriceList.ProductName = reader.ReadElementContentAsString(); - break; - case "Price": - product_PriceList.Price = reader.ReadElementContentAsString(); - break; - - default: - reader.Skip(); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "Product_PriceList") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - return product_PriceList; - } - - /// - /// Gets the mail merge data table. - /// - private MailMergeDataTable GetMailMergeDataTableProductData() - { - List productDetail = new List(); - FileStream fs = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/Product.xml", FileMode.Open, - FileAccess.Read); - XmlReader reader = XmlReader.Create(fs); - if (reader == null) - throw new Exception("reader"); - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - if (reader.LocalName != "ProductList") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - reader.Read(); - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - while (reader.LocalName != "ProductList") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "Products": - productDetail.Add(GetProductDetail(reader)); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "ProductList") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - MailMergeDataTable dataTable2 = new MailMergeDataTable("ProductDetail", productDetail); - reader.Dispose(); - fs.Dispose(); - return dataTable2; - } - - /// - /// Gets the product details. - /// - /// The reader. - private ProductDetail GetProductDetail(XmlReader reader) - { - if (reader == null) - throw new Exception("reader"); - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - if (reader.LocalName != "Products") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - reader.Read(); - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - ProductDetail productDetail = new ProductDetail(); - while (reader.LocalName != "Products") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "SNO": - productDetail.SNO = reader.ReadElementContentAsString(); - break; - case "ProductName": - productDetail.ProductName = reader.ReadElementContentAsString(); - break; - case "ProductImage": - productDetail.ProductImage = reader.ReadElementContentAsString(); - break; - - default: - reader.Skip(); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "Products") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - return productDetail; - } -} -public class Product_PriceList -{ - #region Fields - private string m_productName; - private string m_price; - - #endregion - #region Properties - public string ProductName - { - get { return m_productName; } - set { m_productName = value; } - } - public string Price - { - get { return m_price; } - set { m_price = value; } - } - - #endregion - #region Constructor - public Product_PriceList(string productName, string price) - { - m_productName = productName; - m_price = price; - - } - public Product_PriceList() - { } -} -#endregion -public class ProductDetail -{ - #region Fields - private string m_sNO; - private string m_productName; - private string m_productImage; - - #endregion - #region Properties - public string SNO - { - get { return m_sNO; } - set { m_sNO = value; } - } - public string ProductName - { - get { return m_productName; } - set { m_productName = value; } - } - public string ProductImage - { - get { return m_productImage; } - set { m_productImage = value; } - } - - #endregion - #region Constructor - public ProductDetail(string sNO, string productName, string productImage) - { - m_sNO = sNO; - m_productName = productName; - m_productImage = productImage; - - } - public ProductDetail() - { } - #endregion -} \ No newline at end of file diff --git a/Pages/Word/MarkdownToWord.cshtml b/Pages/Word/MarkdownToWord.cshtml deleted file mode 100644 index 63301948..00000000 --- a/Pages/Word/MarkdownToWord.cshtml +++ /dev/null @@ -1,90 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.MarkdownToWord - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Import, Markdown To Word, Conversion : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("markdowntoword", "word", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view the generated Word document or PDF. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document and PDF viewer is required to view the resultant PDF. -
-
- Select Document : -
- - - -
-
-
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- @Model.Message -
-
-
- Html.EndForm(); - } - } -
-} - -@section ActionDescription{ -
- This sample demonstrates how to convert the Markdown file to Word document using .NET Word (DocIO) library. -
-} -@section Description{ -
- .NET Word (DocIO) library provides support to convert Markdown file to Word document and vice versa. -
    -
  • - You can convert headings, tables, hyperlinks, numbered and bulleted list, and images from Markdown to Word document. -
  • -
  • - You can customize the image while importing Markdown file. -
  • -
-
-
- More information about Markdown to Word conversion can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Markdown to Word Example - Syncfusion Demos - } -@section Header{ -

Example of Markdown to Word in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/MarkdownToWord.cshtml.cs b/Pages/Word/MarkdownToWord.cshtml.cs deleted file mode 100644 index abc396a1..00000000 --- a/Pages/Word/MarkdownToWord.cshtml.cs +++ /dev/null @@ -1,125 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIORenderer; -using Syncfusion.Pdf; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class MarkdownToWord : PageModel -{ - public void OnGet() - { - - } - public string Message { get; set; } - private readonly IWebHostEnvironment _hostingEnvironment; - - public MarkdownToWord(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1) - { - if (Group1 == null) - return null; - // return View(); - Stream stream = GetMarkdownDocument(); - if (stream != null) - { - try - { - string output = (Request.Form.Files != null && Request.Form.Files.Count != 0) - ? Path.GetFileNameWithoutExtension(Request.Form.Files[0].FileName) - : "MarkdownToWord"; - WordDocument document = new WordDocument(stream, FormatType.Markdown); - stream.Dispose(); - stream = null; - FormatType type = FormatType.Docx; - string filename = output + ".docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as Html format - if (Group1 == "HTML") - { - type = FormatType.Html; - filename = output + ".html"; - contenttype = "text/html"; - } - //Save as PDF format - else if (Group1 == "PDF") - { - filename = output + ".pdf"; - contenttype = "application/pdf"; - // Creates a new instance of DocIORenderer class. - DocIORenderer render = new DocIORenderer(); - // Converts Word document into PDF document. - PdfDocument pdf = render.ConvertToPDF(document); - MemoryStream memoryStream = new MemoryStream(); - // Save the PDF document. - pdf.Save(memoryStream); - render.Dispose(); - pdf.Close(); - document.Close(); - memoryStream.Position = 0; - return File(memoryStream, contenttype, filename); - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - catch - { - Message = - string.Format( - "The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - } - } - - return null; - // return View(); - } - private Stream GetMarkdownDocument() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".md") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - Message = string.Format("Please choose Markdown format document to convert to Word or PDF"); - return null; - } - } - else - { - //Opens an existing document from stream through constructor of `WordDocument` class - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/MarkdownToWord.md", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } -} \ No newline at end of file diff --git a/Pages/Word/NestedMailMerge.cshtml b/Pages/Word/NestedMailMerge.cshtml deleted file mode 100644 index 9b94716f..00000000 --- a/Pages/Word/NestedMailMerge.cshtml +++ /dev/null @@ -1,85 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.NestedMailMerge - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Nested Mail merge : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("nestedmailmerge", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Nested Mail merge Template : -
- - -   - - -
-
- Mail merge Data : -
- - -   - - -
-
- Save As : - - -   - - -   - - -
-
-
- -   - -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to perform Mail merge for nested groups in Word document using Essential DocIO. -
-} -@section Description{ -
- DocIO supports to perform mail merge between the nested groups in the Word document, to generate report with hierarchical data. -
    -
  • - You can create advanced reports by dynamically repeating a region of the document and by nesting mail merge region inside each other to populate hierarchical data. -
  • -
  • - You can define relation between the data tables explicitly or directly use relational data for performing nested mail merge. -
  • -
-
-
- More information about the nested Mail merge can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Nested Mail Merge Example - Syncfusion Demos - } -@section Header{ -

Example of Nested Mail Merge in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/NestedMailMerge.cshtml.cs b/Pages/Word/NestedMailMerge.cshtml.cs deleted file mode 100644 index 238337d8..00000000 --- a/Pages/Word/NestedMailMerge.cshtml.cs +++ /dev/null @@ -1,886 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using System.Collections; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using System.Xml; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class NestedMailMerge : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public NestedMailMerge(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public IActionResult OnPost(string Group1, string Group2, string Group3, string Button) - { - if (Group1 == null || Group2 == null || Group3 == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - - string dataPath = string.Empty; - if (Group2 == "Report") - dataPath = basePath + @"/Word/Template_Report.doc"; - else - dataPath = basePath + @"/Word/Template_Letter.doc"; - - string contenttype1 = "application/msword"; - string dataPath1 = basePath + @"/Word/Template_Report.doc"; - string dataPath2 = basePath + @"/Word/Template_Letter.doc"; - FileStream fileStream1 = new FileStream(dataPath1, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - FileStream fileStream2 = new FileStream(dataPath2, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - if (Button == "View Template") - { - if (Group2 == "Report") - return File(fileStream1, contenttype1, "Template_Report.doc"); - else - return File(fileStream2, contenttype1, "Template_Letter.doc"); - } - - fileStream1.Dispose(); - fileStream1 = null; - fileStream2.Dispose(); - fileStream2 = null; - // Creating a new document. - WordDocument document = new WordDocument(); - document.Open(dataPath, FormatType.Doc); - - #region Execute Mail merge - - if (Group3 == "Explicit") - { - MailMergeDataSet dataSet = GetMailMergeDataSet(basePath); - List commands = new List(); - //DictionaryEntry contain "Source table" (KEY) and "Command" (VALUE) - DictionaryEntry entry = new DictionaryEntry("Employees", string.Empty); - commands.Add(entry); - - // To retrive customer details - entry = new DictionaryEntry("Customers", "EmployeeID = %Employees.EmployeeID%"); - commands.Add(entry); - - // To retrieve order details - entry = new DictionaryEntry("Orders", "CustomerID = %Customers.CustomerID%"); - commands.Add(entry); - - //Executes nested Mail merge using explicit relational data. - document.MailMerge.ExecuteNestedGroup(dataSet, commands); - } - else - { - MailMergeDataTable dataTable = GetMailMergeDataTable(basePath); - //Executes nested Mail merge using implicit relational data. - document.MailMerge.ExecuteNestedGroup(dataTable); - } - - #endregion - - FormatType type = FormatType.Docx; - string filename = "NestedMailMerge.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "NestedMailMerge.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "NestedMailMerge.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - - /// - /// Gets the mail merge data set. - /// - /// - /// reader - /// Unexpected xml tag + reader.LocalName - private MailMergeDataSet GetMailMergeDataSet(string basePath) - { - List employees = new List(); - List customers = new List(); - List orders = new List(); - - FileStream stream = new FileStream(basePath + @"/Word/Employees.xml", FileMode.OpenOrCreate); - - XmlReader reader = XmlReader.Create(stream); - - if (reader == null) - throw new Exception("reader"); - - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - - if (reader.LocalName != "EmployeesList") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - - reader.Read(); - - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - - while (reader.LocalName != "EmployeesList") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "Employees": - employees.Add(GetEmployee(reader, customers, orders)); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "EmployeesList") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - reader.Dispose(); - stream.Dispose(); - MailMergeDataSet dataSet = new MailMergeDataSet(); - dataSet.Add(new MailMergeDataTable("Employees", employees)); - dataSet.Add(new MailMergeDataTable("Customers", customers)); - dataSet.Add(new MailMergeDataTable("Orders", orders)); - return dataSet; - } - - /// - /// Gets the employee. - /// - /// The reader. - /// The customers. - /// The orders. - /// - /// reader - /// Unexpected xml tag + reader.LocalName - private EmployeeDetails GetEmployee(XmlReader reader, List customers, List orders) - { - if (reader == null) - throw new Exception("reader"); - - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - - if (reader.LocalName != "Employees") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - - reader.Read(); - - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - - EmployeeDetails employee = new EmployeeDetails(); - while (reader.LocalName != "Employees") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "EmployeeID": - employee.EmployeeID = reader.ReadElementContentAsString(); - break; - case "LastName": - employee.LastName = reader.ReadElementContentAsString(); - break; - case "FirstName": - employee.FirstName = reader.ReadElementContentAsString(); - break; - case "Address": - employee.Address = reader.ReadElementContentAsString(); - break; - case "City": - employee.City = reader.ReadElementContentAsString(); - break; - case "Country": - employee.Country = reader.ReadElementContentAsString(); - break; - case "Extension": - employee.Extension = reader.ReadElementContentAsString(); - break; - case "Customers": - customers.Add(GetCustomer(reader, orders)); - break; - default: - reader.Skip(); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "Employees") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - return employee; - } - - /// - /// Gets the customer. - /// - /// The reader. - /// The orders. - /// - /// reader - /// Unexpected xml tag + reader.LocalName - private CustomerDetails GetCustomer(XmlReader reader, List orders) - { - if (reader == null) - throw new Exception("reader"); - - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - - if (reader.LocalName != "Customers") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - - reader.Read(); - - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - - CustomerDetails customer = new CustomerDetails(); - while (reader.LocalName != "Customers") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "EmployeeID": - customer.EmployeeID = reader.ReadElementContentAsString(); - break; - case "CustomerID": - customer.CustomerID = reader.ReadElementContentAsString(); - break; - case "CompanyName": - customer.CompanyName = reader.ReadElementContentAsString(); - break; - case "ContactName": - customer.ContactName = reader.ReadElementContentAsString(); - break; - case "City": - customer.City = reader.ReadElementContentAsString(); - break; - case "Country": - customer.Country = reader.ReadElementContentAsString(); - break; - case "Orders": - orders.Add(GetOrders(reader)); - break; - } - - reader.Read(); - } - else - { - reader.Read(); - if ((reader.LocalName == "Customers") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - return customer; - } - - /// - /// Gets the mail merge data table. - /// - /// - /// reader - /// Unexpected xml tag + reader.LocalName - private MailMergeDataTable GetMailMergeDataTable(string basePath) - { - List employees = new List(); - - FileStream stream = new FileStream(basePath + @"/Word/Employees.xml", FileMode.OpenOrCreate); - - XmlReader reader = XmlReader.Create(stream); - - if (reader == null) - throw new Exception("reader"); - - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - - if (reader.LocalName != "EmployeesList") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - - reader.Read(); - - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - - while (reader.LocalName != "EmployeesList") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "Employees": - employees.Add(GetEmployee(reader)); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "EmployeesList") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - reader.Dispose(); - stream.Dispose(); - MailMergeDataTable dataTable = new MailMergeDataTable("Employees", employees); - return dataTable; - } - - /// - /// Gets the employee. - /// - /// The reader. - /// - /// reader - /// Unexpected xml tag + reader.LocalName - private EmployeeDetailsImplicit GetEmployee(XmlReader reader) - { - if (reader == null) - throw new Exception("reader"); - - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - - if (reader.LocalName != "Employees") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - - reader.Read(); - - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - - EmployeeDetailsImplicit employee = new EmployeeDetailsImplicit(); - while (reader.LocalName != "Employees") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "EmployeeID": - employee.EmployeeID = reader.ReadElementContentAsString(); - break; - case "LastName": - employee.LastName = reader.ReadElementContentAsString(); - break; - case "FirstName": - employee.FirstName = reader.ReadElementContentAsString(); - break; - case "Address": - employee.Address = reader.ReadElementContentAsString(); - break; - case "City": - employee.City = reader.ReadElementContentAsString(); - break; - case "Country": - employee.Country = reader.ReadElementContentAsString(); - break; - case "Extension": - employee.Extension = reader.ReadElementContentAsString(); - break; - case "Customers": - employee.Customers.Add(GetCustomer(reader)); - break; - default: - reader.Skip(); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "Employees") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - return employee; - } - - /// - /// Gets the customer. - /// - /// The reader. - /// - /// reader - /// Unexpected xml tag + reader.LocalName - private CustomerDetailsImplicit GetCustomer(XmlReader reader) - { - if (reader == null) - throw new Exception("reader"); - - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - - if (reader.LocalName != "Customers") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - - reader.Read(); - - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - - CustomerDetailsImplicit customer = new CustomerDetailsImplicit(); - while (reader.LocalName != "Customers") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "EmployeeID": - customer.EmployeeID = reader.ReadElementContentAsString(); - break; - case "CustomerID": - customer.CustomerID = reader.ReadElementContentAsString(); - break; - case "CompanyName": - customer.CompanyName = reader.ReadElementContentAsString(); - break; - case "ContactName": - customer.ContactName = reader.ReadElementContentAsString(); - break; - case "City": - customer.City = reader.ReadElementContentAsString(); - break; - case "Country": - customer.Country = reader.ReadElementContentAsString(); - break; - case "Orders": - customer.Orders.Add(GetOrders(reader)); - break; - } - - reader.Read(); - } - else - { - reader.Read(); - if ((reader.LocalName == "Customers") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - return customer; - } - - /// - /// Gets the orders. - /// - /// The reader. - /// - /// reader - /// Unexpected xml tag + reader.LocalName - private OrderDetails GetOrders(XmlReader reader) - { - if (reader == null) - throw new Exception("reader"); - - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - - if (reader.LocalName != "Orders") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - - reader.Read(); - - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - - OrderDetails order = new OrderDetails(); - while (reader.LocalName != "Orders") - { - if (reader.NodeType != XmlNodeType.EndElement) - { - switch (reader.LocalName) - { - case "OrderID": - order.OrderID = reader.ReadElementContentAsString(); - break; - case "CustomerID": - order.CustomerID = reader.ReadElementContentAsString(); - break; - case "OrderDate": - order.OrderDate = reader.ReadElementContentAsString(); - break; - case "RequiredDate": - order.RequiredDate = reader.ReadElementContentAsString(); - break; - case "ShippedDate": - order.ShippedDate = reader.ReadElementContentAsString(); - break; - } - - reader.Read(); - } - else - { - reader.Read(); - if ((reader.LocalName == "Orders") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - return order; - } -} - -public class EmployeeDetailsImplicit -{ - #region Fields - - private string m_employeeID; - private string m_lastName; - private string m_firstName; - private string m_address; - private string m_city; - private string m_country; - private string m_extension; - private List m_customers; - - #endregion - - #region Properties - - public string EmployeeID - { - get { return m_employeeID; } - set { m_employeeID = value; } - } - - public string LastName - { - get { return m_lastName; } - set { m_lastName = value; } - } - - public string FirstName - { - get { return m_firstName; } - set { m_firstName = value; } - } - - public string Address - { - get { return m_address; } - set { m_address = value; } - } - - public string City - { - get { return m_city; } - set { m_city = value; } - } - - public string Country - { - get { return m_country; } - set { m_country = value; } - } - - public string Extension - { - get { return m_extension; } - set { m_extension = value; } - } - - public List Customers - { - get - { - if (m_customers == null) - m_customers = new List(); - return m_customers; - } - set { m_customers = value; } - } - - #endregion - - #region Constructor - - public EmployeeDetailsImplicit() - { - m_customers = new List(); - } - - #endregion -} - -public class CustomerDetailsImplicit -{ - #region Fields - - private string m_employeeID; - private string m_customerID; - private string m_companyName; - private string m_city; - private string m_country; - private List m_orders; - - #endregion - - #region Properties - - public List Orders - { - get - { - if (m_orders == null) - m_orders = new List(); - return m_orders; - } - set { m_orders = value; } - } - - public string EmployeeID - { - get { return m_employeeID; } - set { m_employeeID = value; } - } - - public string CustomerID - { - get { return m_customerID; } - set { m_customerID = value; } - } - - public string CompanyName - { - get { return m_companyName; } - set { m_companyName = value; } - } - - public string ContactName - { - get { return m_companyName; } - set { m_companyName = value; } - } - - public string City - { - get { return m_city; } - set { m_city = value; } - } - - public string Country - { - get { return m_country; } - set { m_country = value; } - } - - #endregion - - #region Constructor - - public CustomerDetailsImplicit() - { - m_orders = new List(); - } - - #endregion -} - -public class EmployeeDetails -{ - #region Fields - - private string m_employeeID; - private string m_lastName; - private string m_firstName; - private string m_address; - private string m_city; - private string m_country; - private string m_extension; - - #endregion - - #region Properties - - public string EmployeeID - { - get { return m_employeeID; } - set { m_employeeID = value; } - } - - public string LastName - { - get { return m_lastName; } - set { m_lastName = value; } - } - - public string FirstName - { - get { return m_firstName; } - set { m_firstName = value; } - } - - public string Address - { - get { return m_address; } - set { m_address = value; } - } - - public string City - { - get { return m_city; } - set { m_city = value; } - } - - public string Country - { - get { return m_country; } - set { m_country = value; } - } - - public string Extension - { - get { return m_extension; } - set { m_extension = value; } - } - - #endregion -} - -public class CustomerDetails -{ - #region Fields - - private string m_employeeID; - private string m_customerID; - private string m_companyName; - private string m_city; - private string m_country; - - #endregion - - #region Properties - - public string EmployeeID - { - get { return m_employeeID; } - set { m_employeeID = value; } - } - - public string CustomerID - { - get { return m_customerID; } - set { m_customerID = value; } - } - - public string CompanyName - { - get { return m_companyName; } - set { m_companyName = value; } - } - - public string ContactName - { - get { return m_companyName; } - set { m_companyName = value; } - } - - public string City - { - get { return m_city; } - set { m_city = value; } - } - - public string Country - { - get { return m_country; } - set { m_country = value; } - } - - #endregion -} - -public class OrderDetails -{ - #region Fields - - private string m_orderID; - private string m_customerID; - private string m_orderDate; - private string m_requiredDate; - private string m_shippedDate; - - #endregion - - #region Properties - - public string OrderID - { - get { return m_orderID; } - set { m_orderID = value; } - } - - public string CustomerID - { - get { return m_customerID; } - set { m_customerID = value; } - } - - public string OrderDate - { - get { return m_orderDate; } - set { m_orderDate = value; } - } - - public string RequiredDate - { - get { return m_requiredDate; } - set { m_requiredDate = value; } - } - - public string ShippedDate - { - get { return m_shippedDate; } - set { m_shippedDate = value; } - } - - #endregion -} \ No newline at end of file diff --git a/Pages/Word/PieChart.cshtml b/Pages/Word/PieChart.cshtml deleted file mode 100644 index 7752944f..00000000 --- a/Pages/Word/PieChart.cshtml +++ /dev/null @@ -1,68 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.PieChart - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : PieChart : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("piechart", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to insert a pie chart into the Word document using Essential DocIO. -
-} -@section Description{ -
- With DocIO, you can create business or survey reports with intuitive graphical data visualization using chart in Word document and export as PDF.  -
    -
  • - You can modify chart data in the existing Word document and refresh the visualization of chart. -
  • -
  • - You can customize the appearance of the chart by chart axis, series, data labels, and 3D formats. -
  • -
  • - You can save the chart in Word document as image. -
  • -
-
-
- More information about the charts can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Pie Chart Example - Syncfusion Demos - } -@section Header{ -

Example of Pie Chart in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/PieChart.cshtml.cs b/Pages/Word/PieChart.cshtml.cs deleted file mode 100644 index 87012c6e..00000000 --- a/Pages/Word/PieChart.cshtml.cs +++ /dev/null @@ -1,309 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Syncfusion.OfficeChart; -using Microsoft.AspNetCore.Mvc; -using System.Xml; -using Syncfusion.DocIORenderer; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class PieChart : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public PieChart(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1) - { - if (Group1 == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - string datapath = basePath + @"/Word/PieChart.docx"; - //A new document is created. - FileStream fileStream = new FileStream(datapath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - WordDocument document = new WordDocument(fileStream, FormatType.Docx); - //Create MailMergeDataTable - MailMergeDataTable mailMergeDataTable = GetMailMergeDataTableProductDetails(); - //Merge the product table in the Word document - document.MailMerge.ExecuteGroup(mailMergeDataTable); - //Find the Placeholder of Pie chart to insert - TextSelection selection = document.Find("", false, false); - WParagraph paragraph = selection.GetAsOneRange().OwnerParagraph; - paragraph.ChildEntities.Clear(); - //Create and Append chart to the paragraph - WChart pieChart = paragraph.AppendChart(446, 270); - //Set chart data - pieChart.ChartType = OfficeChartType.Pie; - pieChart.ChartTitle = "Best Selling Products"; - pieChart.ChartTitleArea.FontName = "Calibri (Body)"; - pieChart.ChartTitleArea.Size = 14; - GetChartData(pieChart, 0); - //Create a new chart series with the name “Sales” - IOfficeChartSerie pieSeries = pieChart.Series.Add("Sales"); - pieSeries.Values = pieChart.ChartData[2, 2, 11, 2]; - //Setting data label - pieSeries.DataPoints.DefaultDataPoint.DataLabels.IsPercentage = true; - pieSeries.DataPoints.DefaultDataPoint.DataLabels.Position = OfficeDataLabelPosition.Outside; - //Setting background color - pieChart.ChartArea.Fill.ForeColor = Syncfusion.Drawing.Color.FromArgb(242, 242, 242); - pieChart.PlotArea.Fill.ForeColor = Syncfusion.Drawing.Color.FromArgb(242, 242, 242); - pieChart.ChartArea.Border.LinePattern = OfficeChartLinePattern.None; - pieChart.PrimaryCategoryAxis.CategoryLabels = pieChart.ChartData[2, 1, 11, 1]; - - string filename = ""; - string contenttype = ""; - MemoryStream ms = new MemoryStream(); - - #region Document SaveOption - - if (Group1 == "WordDocx") - { - filename = "PieChart.docx"; - contenttype = "application/msword"; - document.Save(ms, FormatType.Docx); - } - else if (Group1 == "WordML") - { - filename = "PieChart.xml"; - contenttype = "application/msword"; - document.Save(ms, FormatType.WordML); - } - else - { - filename = "PieChart.pdf"; - contenttype = "application/pdf"; - DocIORenderer renderer = new DocIORenderer(); - renderer.ConvertToPDF(document).Save(ms); - } - - #endregion Document SaveOption - - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - - /// - /// Gets the mail merge data table. - /// - private MailMergeDataTable GetMailMergeDataTableProductDetails() - { - List product = new List(); - FileStream fs = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/Products.xml", FileMode.Open, - FileAccess.Read); - XmlReader reader = XmlReader.Create(fs); - if (reader == null) - throw new Exception("reader"); - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - if (reader.LocalName != "Products") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - reader.Read(); - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - while (reader.LocalName != "Products") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "Product": - product.Add(GetProduct(reader)); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "Products") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - MailMergeDataTable dataTable = new MailMergeDataTable("Product", product); - reader.Dispose(); - fs.Dispose(); - return dataTable; - } - - /// - /// Gets the products. - /// - /// The reader. - private Product GetProduct(XmlReader reader) - { - if (reader == null) - throw new Exception("reader"); - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - if (reader.LocalName != "Product") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - reader.Read(); - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - Product product = new Product(); - while (reader.LocalName != "Product") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "SNO": - product.SNO = reader.ReadElementContentAsString(); - break; - case "ProductName": - product.ProductName = reader.ReadElementContentAsString(); - break; - case "Sum": - product.Sum = reader.ReadElementContentAsString(); - break; - - default: - reader.Skip(); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "Product") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - return product; - } - - /// - /// Gets the mail merge data table. - /// - private void GetChartData(WChart pieChart, int i) - { - FileStream fs = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/Products.xml", FileMode.Open, - FileAccess.Read); - XmlReader reader = XmlReader.Create(fs); - if (reader == null) - throw new Exception("reader"); - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - if (reader.LocalName != "Products") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - reader.Read(); - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - while (reader.LocalName != "Products") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "Product": - GetProductData(reader, pieChart, ref i); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "Products") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - } - - /// - /// Gets the products. - /// - /// The reader. - private void GetProductData(XmlReader reader, WChart pieChart, ref int i) - { - if (reader == null) - throw new Exception("reader"); - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - if (reader.LocalName != "Product") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - reader.Read(); - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - while (reader.LocalName != "Product") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "ProductName": - pieChart.ChartData.SetValue(i + 2, 1, reader.ReadElementContentAsString()); - break; - case "Sum": - pieChart.ChartData.SetValue(i + 2, 2, Convert.ToDouble(reader.ReadElementContentAsString())); - break; - default: - reader.Skip(); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "Product") && reader.NodeType == XmlNodeType.EndElement) - { - i++; - break; - } - } - } - } -} -public class Product -{ - #region Fields - private string m_sNo; - private string m_productName; - private string m_sum; - - #endregion - #region Properties - public string SNO - { - get { return m_sNo; } - set { m_sNo = value; } - } - public string ProductName - { - get { return m_productName; } - set { m_productName = value; } - } - public string Sum - { - get { return m_sum; } - set { m_sum = value; } - } - - #endregion - #region Constructor - public Product(string sNO, string productName, string sum) - { - m_sNo = sNO; - m_productName = productName; - m_sum = sum; - } - public Product() - { } - #endregion -} \ No newline at end of file diff --git a/Pages/Word/RTFToDoc.cshtml b/Pages/Word/RTFToDoc.cshtml deleted file mode 100644 index 1ba8a1c7..00000000 --- a/Pages/Word/RTFToDoc.cshtml +++ /dev/null @@ -1,66 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.RTFToDoc - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Import, RTF To Doc, Conversion : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("rtftodoc", "word", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view the resultant Word document being converted from RTF - document using Essential DocIO. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Select Document : - @Html.TextBox("file", "", new { type = "file", accept = ".rtf" }) -
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Convert to Word").Render() -
-
- @Model.Message -
-
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to convert the RTF file to Word document using Essential DocIO. -
-} -@section Description{ -
- DocIO provides support to convert the RTF file to Word document and vice versa. -
-
- More information about RTF to Word conversion can be found on this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - RTF to Word Example - Syncfusion Demos - } -@section Header{ -

Example of RTF to Word in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/RTFToDoc.cshtml.cs b/Pages/Word/RTFToDoc.cshtml.cs deleted file mode 100644 index ea14b7fd..00000000 --- a/Pages/Word/RTFToDoc.cshtml.cs +++ /dev/null @@ -1,91 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; -using System.IO; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class RTFToDoc : PageModel -{ - public void OnGet() - { - - } - public string Message { get; set; } - private readonly IWebHostEnvironment _hostingEnvironment; - - public RTFToDoc(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1) - { - - if (Group1 == null) - return null; - // return View(); - if (Request.Form.Files != null) - { - var extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - string outputFileName = Path.GetFileNameWithoutExtension(Request.Form.Files[0].FileName); - if (extension == ".rtf") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - WordDocument document = new WordDocument(stream, FormatType.Rtf); - stream.Dispose(); - stream = null; - - FormatType type = FormatType.Docx; - string filename = outputFileName + ".docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = outputFileName + ".doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = outputFileName + ".xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - else - { - Message = string.Format("Please choose RTF document to convert to Word document"); - } - } - else - { - Message = - string.Format("Browse a RTF document and then click the button to convert as a Word document"); - } - - return null; - // return View(); - } -} \ No newline at end of file diff --git a/Pages/Word/RTL.cshtml b/Pages/Word/RTL.cshtml deleted file mode 100644 index 9628ee69..00000000 --- a/Pages/Word/RTL.cshtml +++ /dev/null @@ -1,57 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.RTL - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Right to Left, RTL : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("rtl", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to create a Word document with Right-To-Left language text using Essential DocIO. -
-} -@section Description{ -
- DocIO allows to add right to left language text in the Word document. All the text formatting options available for left to right text are also available for right to left text. -
-
- More information about the text formatting can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - RTL Example - Syncfusion Demos - } -@section Header{ -

Example of RTL in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/RTL.cshtml.cs b/Pages/Word/RTL.cshtml.cs deleted file mode 100644 index 22260f54..00000000 --- a/Pages/Word/RTL.cshtml.cs +++ /dev/null @@ -1,86 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class RTL : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public RTL(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - #region RTL - - public ActionResult OnPost(string Group1) - { - if (Group1 == null) - return null; - // return View(); - // Creating a new document. - WordDocument document = new WordDocument(); - document.EnsureMinimal(); - - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/Arabic.txt"; - // Reading Arabic text from text file. - StreamReader s = new StreamReader(new FileStream(dataPath, FileMode.Open), System.Text.Encoding.ASCII); - string text = s.ReadToEnd(); - s.Dispose(); - s = null; - - // Appending Arabic text to the document. - document.LastParagraph.ParagraphFormat.Bidi = true; - IWTextRange txtRange = document.LastParagraph.AppendText(text); - txtRange.CharacterFormat.Bidi = true; - - // Set the RTL text font size. - txtRange.CharacterFormat.FontSizeBidi = 16; - - FormatType type = FormatType.Docx; - string filename = "RTL.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "RTL.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "RTL.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - - #endregion RTL -} \ No newline at end of file diff --git a/Pages/Word/SimpleReplace.cshtml b/Pages/Word/SimpleReplace.cshtml deleted file mode 100644 index 7fa41079..00000000 --- a/Pages/Word/SimpleReplace.cshtml +++ /dev/null @@ -1,87 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.SimpleReplace - -@using Syncfusion.EJ2 -@{var Title = " Essential DocIO (Word) : Simple Replace : Syncfusion";} -@section ControlsSection{ -
- @{Html.BeginForm("simplereplace", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
- Text to Find : - -   - Text to Replace : - -
-
- - Match case -      - - Match whole word -      - - Replace only the first occurrence -
-
-
- Save As : - - -   - - -   - - -
-
-
- -   - -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to replace a specific text in the Word document with another text using the Find and Replace functionality of Essential Word (DocIO) library. -
-} -@section Description{ -
- DocIO allows you to replace a specific text in the Word document with another text. -
    -
  • - You can replace either the first occurrence or all the occurrences of the text with other elements such as text, part of the document or an entire document. -
  • -
  • - You can replace the text by matching case, whole word and all occurrence or first occurrence alone. -
  • -
  • - You can also replace the content that spans across several paragraphs. -
  • -
-
-
- More information about the Find and Replace functionality can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Simple Replace Example - Syncfusion Demos - } -@section Header{ -

Example of Simple Replace in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/SimpleReplace.cshtml.cs b/Pages/Word/SimpleReplace.cshtml.cs deleted file mode 100644 index b36d6243..00000000 --- a/Pages/Word/SimpleReplace.cshtml.cs +++ /dev/null @@ -1,98 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class SimpleReplace : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public SimpleReplace(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1, string Button, string MatchCase, string MatchWholeWord, - string FindText, string ReplaceText, string ReplaceFirst) - { - if (Group1 == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - string dataPath1 = basePath + @"/Word/Adventure.docx"; - string contenttype1 = "application/vnd.ms-word.document.12"; - FileStream fileStream = new FileStream(dataPath1, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - if (Button == "View Template") - return File(fileStream, contenttype1, "Adventure.docx"); - fileStream.Dispose(); - fileStream = null; - - // try - // { - string dataPath2 = basePath + @"/Word/Adventure.docx"; - FileStream fileStream1 = new FileStream(dataPath2, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - //Load template document - WordDocument doc = new WordDocument(fileStream1, FormatType.Docx); - fileStream1.Dispose(); - fileStream1 = null; - - //Replaces only the first occurrence of the text - if (ReplaceFirst == "ReplaceFirst") - doc.ReplaceFirst = true; - - //Replace the text that matches the case and whole word - doc.Replace(FindText, ReplaceText, MatchCase == "MatchCase", MatchWholeWord == "MatchWholeWord"); - - // try - // { - FormatType type = FormatType.Docx; - string filename = "SimpleReplace.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "SimpleReplace.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "SimpleReplace.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - doc.Save(ms, type); - doc.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - // } - // catch (Exception) - // { - // } - // } - // catch (Exception) - // { - // } - // - // return View(); - } -} \ No newline at end of file diff --git a/Pages/Word/SplitByBookmark.cshtml b/Pages/Word/SplitByBookmark.cshtml deleted file mode 100644 index 045e4488..00000000 --- a/Pages/Word/SplitByBookmark.cshtml +++ /dev/null @@ -1,85 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.SplitByBookmark - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Split by Bookmark : Syncfusion"; } -@section ControlsSection{ -
- @{ - Html.BeginForm("splitbybookmark", "word", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view the generated Word document or PDF. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document and PDF viewer is required to view the resultant PDF. -
- - - -
-
-
- Save As : - - -   - - -   -
-
- -   - -
-
- Html.EndForm(); - } - } -
-} - -@section ActionDescription{ -
- This sample demonstrates how to split Word document by bookmark using .NET Word Library (DocIO). -
-} -@section Description{ -
- The .NET Word Library (DocIO) enables you to split Word document and save them in formats such as DOC, DOCX, RTF, HTML, PDF, and images. -
    -
  • - You can split a Word document by section. -
  • -
  • - You can split a Word document based on headings. -
  • -
  • - You can split a Word document based on placeholders. -
  • -
-
-
- More information about splitting a Word document can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library – Split Word document by Bookmark Example - Syncfusion Demos - } -@section Header{ -

Example of Split by Bookmark in ASP.NET Core Word Library (DocIO)

- } \ No newline at end of file diff --git a/Pages/Word/SplitByBookmark.cshtml.cs b/Pages/Word/SplitByBookmark.cshtml.cs deleted file mode 100644 index 4f87b0f0..00000000 --- a/Pages/Word/SplitByBookmark.cshtml.cs +++ /dev/null @@ -1,203 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIORenderer; -using Syncfusion.Compression.Zip; -using Syncfusion.Pdf; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class SplitByBookmark : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public SplitByBookmark(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1, string Button, string ExcludeLabelsAndNumbers) - { - if (Group1 == null) - return null; - // return View(); - - string contenttype1 = "application/vnd.ms-word.document.12"; - Stream fileStream = GetBookmarkWordDocument(); - if (Button == "View Template") - { - return File(fileStream, contenttype1, "SplitByBookmark.docx"); - } - - string outputFileName = (Request.Form.Files != null && Request.Form.Files.Count != 0) - ? Request.Form.Files[0].FileName - : "SplitByBookmark.docx"; - //Create instance of ZipArchive to save the splitted documents. - ZipArchive zip = new ZipArchive(); - if (fileStream != null) - { - try - { - //Open an existing Word document. - using (WordDocument document = new WordDocument(fileStream, FormatType.Docx)) - { - //If bookmarks are not in the document, return the input document. - if (document.Bookmarks.Count == 0) - { - MemoryStream memoryStream = new MemoryStream(); - if (Group1 == "WordDocx") - { - //Save the Word file. - document.Save(memoryStream, FormatType.Docx); - //Return the document. - return File(memoryStream, contenttype1, outputFileName); - } - else - { - //Convert Word to PDF. - memoryStream = ConvertWordDocumentToPDF(document); - - //Retrun the PDF document. - return File(memoryStream, "application/pdf", - Path.GetFileNameWithoutExtension(outputFileName) + ".pdf"); - } - } - else - { - //Create the bookmark navigator instance to access the bookmark. - BookmarksNavigator bookmarksNavigator = new BookmarksNavigator(document); - BookmarkCollection bookmarkCollection = document.Bookmarks; - //Iterate each bookmark in Word document. - foreach (Bookmark bookmark in bookmarkCollection) - { - MemoryStream memoryStream = new MemoryStream(); - //Move the virtual cursor to the location before the end of the bookmark. - bookmarksNavigator.MoveToBookmark(bookmark.Name); - //Get the bookmark content as WordDocumentPart. - WordDocumentPart documentPart = bookmarksNavigator.GetContent(); - //Save the WordDocumentPart as separate Word document - WordDocument newDocument = documentPart.GetAsWordDocument(); - - if (Group1 == "WordDocx") - { - newDocument.Save(memoryStream, FormatType.Docx); - //Save splitted document to zip. - SaveIntoZip(zip, bookmark.Name + ".docx", memoryStream); - } - else - { - //Convert Word to PDF. - memoryStream = ConvertWordDocumentToPDF(newDocument); - - //Save splitted document to zip. - SaveIntoZip(zip, bookmark.Name + ".pdf", memoryStream); - } - } - } - - fileStream.Dispose(); - } - - string outpurFileNmae = Group1 == "WordDocx" ? "SplitByBookmarkDOCX.zip" : "SplitByBookmarkPDFs.zip"; - - //Return the zip file with split documents. - return GetFilesInZipFormat(zip, outpurFileNmae); - } - catch - { - var Message = - string.Format( - "The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - } - } - - return null; - // return View(); - } - - /// - /// Convert given Word document to PDF. - /// - private MemoryStream ConvertWordDocumentToPDF(WordDocument newDocument) - { - MemoryStream memoryStream = new MemoryStream(); - //Instantiation of DocIORenderer for Word to PDF conversion - using (DocIORenderer render = new DocIORenderer()) - { - //Convert Word document into PDF document - using (PdfDocument pdfDocument = render.ConvertToPDF(newDocument)) - { - //Save the PDF file. - pdfDocument.Save(memoryStream); - memoryStream.Position = 0; - return memoryStream; - } - } - } - - /// - /// Get the input Word document. - /// - private Stream GetBookmarkWordDocument() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".doc" || extension == ".docx" || extension == ".dot" || extension == ".dotx" || - extension == ".dotm" || extension == ".docm" - || extension == ".xml" || extension == ".rtf") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - var Message = string.Format("Please choose Word format document to split the Word document"); - return null; - } - } - else - { - //Opens an existing document from stream through constructor of `WordDocument` class - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/SplitByBookmark.docx", - FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } - - /// - /// Saves the given Word document into zip file. - /// - private void SaveIntoZip(ZipArchive zip, string filename, Stream stream) - { - stream.Position = 0; - ZipArchiveItem item = - new ZipArchiveItem(zip, filename, stream, true, Syncfusion.Compression.FileAttributes.Compressed); - zip.AddItem(item); - } - - /// - /// Gets the all document as one zip file. - /// - private ActionResult GetFilesInZipFormat(ZipArchive zip, string filename) - { - MemoryStream stream = new MemoryStream(); - zip.Save(stream, true); - return File(stream.ToArray(), "application/zip", filename); - } -} \ No newline at end of file diff --git a/Pages/Word/SplitByHeading.cshtml b/Pages/Word/SplitByHeading.cshtml deleted file mode 100644 index d0211ba9..00000000 --- a/Pages/Word/SplitByHeading.cshtml +++ /dev/null @@ -1,85 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.SplitByHeading - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Split by Heading : Syncfusion"; } -@section ControlsSection{ -
- @{ - Html.BeginForm("splitbyheading", "word", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view the generated Word document or PDF. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document and PDF viewer is required to view the resultant PDF. -
- - - -
-
-
- Save As : - - -   - - -   -
-
- -   - -
-
- Html.EndForm(); - } - } -
-} - -@section ActionDescription{ -
- This sample demonstrates how to split Word document by heading using .NET Word Library (DocIO). -
-} -@section Description{ -
- The .NET Word Library (DocIO) enables you to split Word document and save them in formats such as DOC, DOCX, RTF, HTML, PDF, and images. -
    -
  • - You can split a Word document by section. -
  • -
  • - You can split a Word document by bookmarks. -
  • -
  • - You can split a Word document based on placeholders. -
  • -
-
-
- More information about splitting a Word document can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library – Split Word document by Heading Example - Syncfusion Demos - } -@section Header{ -

Example of Split by Heading in ASP.NET Core Word Library (DocIO)

- } \ No newline at end of file diff --git a/Pages/Word/SplitByHeading.cshtml.cs b/Pages/Word/SplitByHeading.cshtml.cs deleted file mode 100644 index d7aceeeb..00000000 --- a/Pages/Word/SplitByHeading.cshtml.cs +++ /dev/null @@ -1,263 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIORenderer; -using Syncfusion.Compression.Zip; -using Syncfusion.Pdf; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class SplitByHeading : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public SplitByHeading(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1, string Button, string ExcludeLabelsAndNumbers) - { - if (Group1 == null) - return null; - // return View(); - - string contenttype1 = "application/vnd.ms-word.document.12"; - Stream fileStream = GetHeadingWordDocument(); - if (Button == "View Template") - { - return File(fileStream, contenttype1, "SplitByHeading.docx"); - } - - string outputFileName = (Request.Form.Files != null && Request.Form.Files.Count != 0) - ? Request.Form.Files[0].FileName - : "SplitByHeading.docxx"; - //Create instance of ZipArchive to save the splitted documents. - ZipArchive zip = new ZipArchive(); - if (fileStream != null) - { - try - { - //Open an existing Word document. - using (WordDocument document = new WordDocument(fileStream, FormatType.Docx)) - { - MemoryStream memoryStream = null; - WordDocument newDocument = null; - WSection newSection = null; - int headingIndex = 0; - //Iterate each section in the Word document. - foreach (WSection section in document.Sections) - { - // Clone the section and add into new document. - if (newDocument != null) - newSection = AddSection(newDocument, section); - //Iterate each child entity in the Word document. - foreach (TextBodyItem item in section.Body.ChildEntities) - { - //If item is paragraph, then check for heading style and split. - //else, add the item into new document. - if (item is WParagraph) - { - WParagraph paragraph = item as WParagraph; - //If paragraph has Heading 1 style, then save the traversed content as separate document. - //And create new document for new heading content. - if (paragraph.StyleName == "Heading 1") - { - if (newDocument != null) - { - //Save document to the zip file. - SaveDocumentsToZip(newDocument, zip, Group1, headingIndex); - headingIndex++; - } - - //Create new document for new heading content. - newDocument = new WordDocument(); - newSection = AddSection(newDocument, section); - AddEntity(newSection, paragraph); - } - else if (newDocument != null) - AddEntity(newSection, paragraph); - } - else - AddEntity(newSection, item); - } - } - - //If heading is not fount in the input document, then return the document. - if (newDocument == null && headingIndex == 0) - { - MemoryStream documentStream = new MemoryStream(); - if (Group1 == "WordDocx") - { - //Save the Word file. - document.Save(documentStream, FormatType.Docx); - //Return the document. - return File(documentStream, contenttype1, outputFileName); - } - else - { - //Convert Word to PDF. - documentStream = ConvertWordToPDF(document); - //Retrun the PDF document. - return File(documentStream, "application/pdf", - Path.GetFileNameWithoutExtension(outputFileName) + ".pdf"); - } - } - - //Save the remaining content as separate document. - if (newDocument != null) - //Save document to the zip file. - SaveDocumentsToZip(newDocument, zip, Group1, headingIndex); - fileStream.Dispose(); - } - - string outpurFileNmae = Group1 == "WordDocx" ? "SplitByHeadingDOCX.zip" : "SplitByHeadingPDFs.zip"; - - //Return the zip file with split documents. - return GetZippedFile(zip, outpurFileNmae); - } - catch - { - var Message = - string.Format( - "The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - } - } - - return null; - // return View(); - } - - /// - /// Convert given Word document to PDF. - /// - private MemoryStream ConvertWordToPDF(WordDocument newDocument) - { - MemoryStream memoryStream = new MemoryStream(); - //Instantiation of DocIORenderer for Word to PDF conversion - using (DocIORenderer render = new DocIORenderer()) - { - //Convert Word document into PDF document - using (PdfDocument pdfDocument = render.ConvertToPDF(newDocument)) - { - //Save the PDF file. - pdfDocument.Save(memoryStream); - memoryStream.Position = 0; - return memoryStream; - } - } - } - - /// - /// Get the input Word document. - /// - private Stream GetHeadingWordDocument() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".doc" || extension == ".docx" || extension == ".dot" || extension == ".dotx" || - extension == ".dotm" || extension == ".docm" - || extension == ".xml" || extension == ".rtf") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - var Message = string.Format("Please choose Word format document to split the Word document"); - return null; - } - } - else - { - //Opens an existing document from stream through constructor of `WordDocument` class - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/SplitByHeading.docx", - FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } - - /// - /// Clone the entity from source document and add to new document's body collection. - /// - private void AddEntity(WSection? newSection, Entity entity) - { - newSection.Body.ChildEntities.Add(entity.Clone()); - } - - /// - /// Clone the section from source document and add to new document. - /// - private WSection? AddSection(WordDocument newDocument, WSection section) - { - WSection newSection = section.Clone(); - newSection.Body.ChildEntities.Clear(); - newSection.HeadersFooters.FirstPageHeader.ChildEntities.Clear(); - newSection.HeadersFooters.FirstPageFooter.ChildEntities.Clear(); - newSection.HeadersFooters.OddFooter.ChildEntities.Clear(); - newSection.HeadersFooters.OddHeader.ChildEntities.Clear(); - newSection.HeadersFooters.EvenFooter.ChildEntities.Clear(); - newSection.HeadersFooters.EvenHeader.ChildEntities.Clear(); - newDocument.Sections.Add(newSection); - return newSection; - } - - /// - ///Saves documents to the zip file. - /// - private void SaveDocumentsToZip(WordDocument wordDocument, ZipArchive zip, string group, int headingIndex) - { - MemoryStream memoryStream = new MemoryStream(); - if (group == "WordDocx") - { - wordDocument.Save(memoryStream, FormatType.Docx); - //Save splitted document to zip. - SaveWordIntoZip(zip, "Document" + (headingIndex + 1) + ".docx", memoryStream); - } - else - { - //Convert Word to PDF. - memoryStream = ConvertWordToPDF(wordDocument); - - //Save splitted document to zip. - SaveWordIntoZip(zip, "Document" + (headingIndex + 1) + ".pdf", memoryStream); - } - } - - /// - /// Saves the given Word document into zip file. - /// - private void SaveWordIntoZip(ZipArchive zip, string filename, Stream stream) - { - stream.Position = 0; - ZipArchiveItem item = - new ZipArchiveItem(zip, filename, stream, true, Syncfusion.Compression.FileAttributes.Compressed); - zip.AddItem(item); - } - - /// - /// Gets the all document as one zip file. - /// - private ActionResult GetZippedFile(ZipArchive zip, string filename) - { - MemoryStream stream = new MemoryStream(); - zip.Save(stream, true); - return File(stream.ToArray(), "application/zip", filename); - } -} \ No newline at end of file diff --git a/Pages/Word/SplitByPlaceholder.cshtml b/Pages/Word/SplitByPlaceholder.cshtml deleted file mode 100644 index 70502ec7..00000000 --- a/Pages/Word/SplitByPlaceholder.cshtml +++ /dev/null @@ -1,94 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.SplitByPlaceholder - -@using Syncfusion.EJ2 -@{ var Title = " Essential DocIO (Word) : Split by Placeholder : Syncfusion"; } -@section ControlsSection{ -
- @{ - Html.BeginForm("splitbyplaceholder", "word", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view the generated Word document or PDF. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document and PDF viewer is required to view the resultant PDF. -
- - - -
-
- Enter the regex pattern for the placeholder : - -
-
- -
-
- Save As : - - -   - - -   -
-
- -   - -
-
- Html.EndForm(); - } - } -
-} - -@section ActionDescription{ -
- This sample demonstrates how to split Word document by placeholder using .NET Word Library (DocIO). -
-} -@section Description{ -
- The .NET Word Library (DocIO) enables you to split Word document and save them in formats such as DOC, DOCX, RTF, HTML, PDF, and images. -
    -
  • - You can split a Word document by section. -
  • -
  • - You can split a Word document based on headings. -
  • -
  • - You can split a Word document by bookmarks. -
  • -
-
-
- More information about splitting a Word document can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library – Split Word document by Placeholder Example - Syncfusion Demos - } -@section Header{ -

Example of Split by Placeholder in ASP.NET Core Word Library (DocIO)

- } \ No newline at end of file diff --git a/Pages/Word/SplitByPlaceholder.cshtml.cs b/Pages/Word/SplitByPlaceholder.cshtml.cs deleted file mode 100644 index 620ace80..00000000 --- a/Pages/Word/SplitByPlaceholder.cshtml.cs +++ /dev/null @@ -1,258 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIORenderer; -using Syncfusion.Compression.Zip; -using Syncfusion.Pdf; -using System.Text.RegularExpressions; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class SplitByPlaceholder : PageModel -{ - public void OnGet() - { - - } - - private readonly IWebHostEnvironment _hostingEnvironment; - public SplitByPlaceholder(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1, string Button, string RegexPattern, string IncludePlaceholder) - { - if (Group1 == null) - return null; - // return View(); - - string contenttype1 = "application/vnd.ms-word.document.12"; - Stream fileStream = GetPlaceholderWordDocument(); - if (Button == "View Template") - { - return File(fileStream, contenttype1, "SplitByPlaceholder.docx"); - } - - string outputFileName = (Request.Form.Files != null && Request.Form.Files.Count != 0) - ? Request.Form.Files[0].FileName - : "SplitByPlaceholder.docx"; - //Create instance of ZipArchive to save the splitted documents. - ZipArchive zip = new ZipArchive(); - if (fileStream != null) - { - try - { - //Open an existing Word document. - using (WordDocument document = new WordDocument(fileStream, FormatType.Docx)) - { - // Insert bookmarks at placeholders - - //Finds all the placeholder text in the Word document. - TextSelection[] textSelections = document.FindAll(new Regex(RegexPattern)); - if (textSelections != null) - { - //Unique ID for each bookmark. - int bkmkId = 1; - string bookmarkName = string.Empty; - //Collection to hold the inserted bookmarks. - List bookmarks = new List(); - //Iterate each text selection. - for (int i = 0; i < textSelections.Length; i++) - { - #region Insert bookmark start before the placeholder - - //Get the placeholder as WTextRange. - WTextRange textRange = textSelections[i].GetAsOneRange(); - //Get the index of the placeholder text. - WParagraph startParagraph = textRange.OwnerParagraph; - int index = startParagraph.ChildEntities.IndexOf(textRange); - bookmarkName = "Bookmark_" + bkmkId; - //Add new bookmark to bookmarks collection. - bookmarks.Add(bookmarkName); - //Create bookmark start. - BookmarkStart bkmkStart = new BookmarkStart(document, bookmarkName); - //Insert the bookmark start before the start placeholder. - startParagraph.ChildEntities.Insert(index, bkmkStart); - //Remove the placeholder if the IncludePlaceholder checkbox is disabled. - if (IncludePlaceholder != "IncludePlaceholder") - textRange.Text = string.Empty; - - #endregion - - #region Insert bookmark end after the placeholder - - i++; - //Get the placeholder as WTextRange. - textRange = textSelections[i].GetAsOneRange(); - //Get the index of the placeholder text. - WParagraph endParagraph = textRange.OwnerParagraph; - index = endParagraph.ChildEntities.IndexOf(textRange); - //Create bookmark end. - BookmarkEnd bkmkEnd = new BookmarkEnd(document, bookmarkName); - //Insert the bookmark end after the end placeholder. - endParagraph.ChildEntities.Insert(index + 1, bkmkEnd); - bkmkId++; - //Remove the placeholder if the IncludePlaceholder checkbox is disabled. - if (IncludePlaceholder != "IncludePlaceholder") - textRange.Text = string.Empty; - - #endregion - - } - - // Split bookmark content into separate documents - - BookmarksNavigator bookmarksNavigator = new BookmarksNavigator(document); - int fileIndex = 1; - foreach (string bookmark in bookmarks) - { - MemoryStream memoryStream = new MemoryStream(); - //Move the virtual cursor to the location before the end of the bookmark. - bookmarksNavigator.MoveToBookmark(bookmark); - //Get the bookmark content as WordDocumentPart. - WordDocumentPart wordDocumentPart = bookmarksNavigator.GetContent(); - //Save the WordDocumentPart as separate Word document. - WordDocument newDocument = wordDocumentPart.GetAsWordDocument(); - if (Group1 == "WordDocx") - { - //Save the Word document. - newDocument.Save(memoryStream, FormatType.Docx); - //Save splitted document to zip. - SaveFileToZip(zip, "Document" + fileIndex + ".docx", memoryStream); - } - else - { - //Convert Word to PDF. - memoryStream = ConvertToPDF(newDocument); - //Save splitted document to zip. - SaveFileToZip(zip, "Document" + fileIndex + ".pdf", memoryStream); - } - - fileIndex++; - } - } - //If placeholders not in the document, then return the document. - else - { - MemoryStream memoryStream = new MemoryStream(); - if (Group1 == "WordDocx") - { - //Save the Word file. - document.Save(memoryStream, FormatType.Docx); - //Return the document. - return File(memoryStream, contenttype1, outputFileName); - } - else - { - //Convert Word to PDF. - memoryStream = ConvertToPDF(document); - //Retrun the PDF document. - return File(memoryStream, "application/pdf", - Path.GetFileNameWithoutExtension(outputFileName) + ".pdf"); - } - } - fileStream.Dispose(); - } - - string outpurFileNmae = - Group1 == "WordDocx" ? "SplitByPlaceholderDOCX.zip" : "SplitByPlaceholderPDFs.zip"; - - //Return the zip file with split documents. - return GetFinalZip(zip, outpurFileNmae); - } - catch - { - var Message = - string.Format( - "The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - } - } - return null; - // return View(); - } - - /// - /// Convert given Word document to PDF. - /// - private MemoryStream ConvertToPDF(WordDocument newDocument) - { - MemoryStream memoryStream = new MemoryStream(); - //Instantiation of DocIORenderer for Word to PDF conversion - using (DocIORenderer render = new DocIORenderer()) - { - //Convert Word document into PDF document - using (PdfDocument pdfDocument = render.ConvertToPDF(newDocument)) - { - //Save the PDF file. - pdfDocument.Save(memoryStream); - memoryStream.Position = 0; - return memoryStream; - } - } - } - - /// - /// Get the input Word document. - /// - private Stream GetPlaceholderWordDocument() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".doc" || extension == ".docx" || extension == ".dot" || extension == ".dotx" || - extension == ".dotm" || extension == ".docm" - || extension == ".xml" || extension == ".rtf") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - var Message = string.Format("Please choose Word format document to split the Word document"); - return null; - } - } - else - { - //Opens an existing document from stream through constructor of `WordDocument` class - FileStream fileStreamPath = - new FileStream(_hostingEnvironment.WebRootPath + @"/Word/SplitByPlaceholder.docx", FileMode.Open, - FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } - - /// - /// Saves the given Word document into zip file. - /// - private void SaveFileToZip(ZipArchive zip, string filename, Stream stream) - { - stream.Position = 0; - ZipArchiveItem item = - new ZipArchiveItem(zip, filename, stream, true, Syncfusion.Compression.FileAttributes.Compressed); - zip.AddItem(item); - } - - /// - /// Gets the all document as one zip file. - /// - private ActionResult GetFinalZip(ZipArchive zip, string filename) - { - MemoryStream stream = new MemoryStream(); - zip.Save(stream, true); - return File(stream.ToArray(), "application/zip", filename); - } -} \ No newline at end of file diff --git a/Pages/Word/SplitBySection.cshtml b/Pages/Word/SplitBySection.cshtml deleted file mode 100644 index e25c840b..00000000 --- a/Pages/Word/SplitBySection.cshtml +++ /dev/null @@ -1,85 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.SplitBySection - -@using Syncfusion.EJ2 -@{ var Title = " Essential DocIO (Word) : Split by Section : Syncfusion"; } -@section ControlsSection{ -
- @{ - Html.BeginForm("splitbysection", "word", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view the generated Word document or PDF. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document and PDF viewer is required to view the resultant PDF. -
- - - -
-
-
- Save As : - - -   - - -   -
-
- -   - -
-
- Html.EndForm(); - } - } -
-} - -@section ActionDescription{ -
- This sample demonstrates how to split Word document by section using .NET Word Library (DocIO). -
-} -@section Description{ -
- The .NET Word Library (DocIO) enables you to split Word document and save them in formats such as DOC, DOCX, RTF, HTML, PDF, and images. -
    -
  • - You can split a Word document based on headings. -
  • -
  • - You can split a Word document by bookmarks. -
  • -
  • - You can split a Word document based on placeholders. -
  • -
-
-
- More information about splitting a Word document can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library – Split Word document by Section Example - Syncfusion Demos - } -@section Header{ -

Example of Split by Section in ASP.NET Core Word Library (DocIO)

- } \ No newline at end of file diff --git a/Pages/Word/SplitBySection.cshtml.cs b/Pages/Word/SplitBySection.cshtml.cs deleted file mode 100644 index 54de9aa0..00000000 --- a/Pages/Word/SplitBySection.cshtml.cs +++ /dev/null @@ -1,162 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIORenderer; -using Syncfusion.Compression.Zip; -using Syncfusion.Pdf; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class SplitBySection : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public SplitBySection(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1, string Button, string ExcludeLabelsAndNumbers) - { - if (Group1 == null) - return null; - // return View(); - - string contenttype1 = "application/vnd.ms-word.document.12"; - Stream fileStream = GetSectionWordDocument(); - if (Button == "View Template") - { - return File(fileStream, contenttype1, "SplitBySection.docx"); - } - - //Create instance of ZipArchive to save the splitted documents. - ZipArchive zip = new ZipArchive(); - if (fileStream != null) - { - // try - // { - //Open an existing Word document. - using (WordDocument document = new WordDocument(fileStream, FormatType.Docx)) - { - - int fileId = 1; - - //Iterate each section in Word document. - foreach (WSection section in document.Sections) - { - MemoryStream memoryStream = new MemoryStream(); - //Create new Word document. - using (WordDocument newDocument = new WordDocument()) - { - //Clone the section from source document to new document. - newDocument.Sections.Add(section.Clone()); - - if (Group1 == "WordDocx") - { - newDocument.Save(memoryStream, FormatType.Docx); - //Save splitted document to zip. - SaveDocumentToZip(zip, "Section_" + fileId + ".docx", memoryStream); - } - else - { - //Instantiation of DocIORenderer for Word to PDF conversion - using (DocIORenderer render = new DocIORenderer()) - { - //Convert Word document into PDF document - using (PdfDocument pdfDocument = render.ConvertToPDF(newDocument)) - { - //Save the PDF file. - pdfDocument.Save(memoryStream); - //Save splitted document to zip. - SaveDocumentToZip(zip, "Section_" + fileId + ".pdf", memoryStream); - } - } - } - - fileId++; - } - } - - fileStream.Dispose(); - } - - string outpurFileNmae = Group1 == "WordDocx" ? "SplitBySectionDOCX.zip" : "SplitBySectionPDFs.zip"; - - //Return the zip file with split documents. - return GetZipFile(zip, outpurFileNmae); - // } - // catch - // { - // var Message = - // string.Format( - // "The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - // } - } - - // return View(); - return null; - } - - private Stream GetSectionWordDocument() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".doc" || extension == ".docx" || extension == ".dot" || extension == ".dotx" || - extension == ".dotm" || extension == ".docm" - || extension == ".xml" || extension == ".rtf") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - var Message = string.Format("Please choose Word format document to split the Word document"); - return null; - } - } - else - { - //Opens an existing document from stream through constructor of `WordDocument` class - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/SplitBySection.docx", - FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } - - /// - /// Saves the given Word document into zip file. - /// - private void SaveDocumentToZip(ZipArchive zip, string filename, Stream stream) - { - stream.Position = 0; - ZipArchiveItem item = - new ZipArchiveItem(zip, filename, stream, true, Syncfusion.Compression.FileAttributes.Compressed); - zip.AddItem(item); - } - - /// - /// Gets the all document as one zip file. - /// - private ActionResult GetZipFile(ZipArchive zip, string filename) - { - MemoryStream stream = new MemoryStream(); - zip.Save(stream, true); - return File(stream.ToArray(), "application/zip", filename); - } -} \ No newline at end of file diff --git a/Pages/Word/Styles.cshtml b/Pages/Word/Styles.cshtml deleted file mode 100644 index 9cb3fd47..00000000 --- a/Pages/Word/Styles.cshtml +++ /dev/null @@ -1,75 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.Styles - -@using Syncfusion.EJ2 -@{ var Title = " Essential DocIO (Word) : Styles : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("styles", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- - -   - - -
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to apply built-in and custom styles to the contents of the Word document using Essential DocIO. -
-} -@section Description{ -
- DocIO supports various built-in styles and provides ability to create custom styles. These styles include both text and paragraph formatting options. -
    -
  • - Using styles, you can quickly format a Word document and reuse the formatting for multiple parts of the document.  -
  • -
  • - The file size and code length can be reduced by referring styles, instead of formatting each element in the document. -
  • -
  • - You can also modify the formatting of an existing style in the Word document. -
  • -
-
-
- More information about the paragraph styles can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Styles Example - Syncfusion Demos - } -@section Header{ -

Example of Styles in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/Styles.cshtml.cs b/Pages/Word/Styles.cshtml.cs deleted file mode 100644 index 2f929ca9..00000000 --- a/Pages/Word/Styles.cshtml.cs +++ /dev/null @@ -1,355 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class Styles : PageModel -{ - public void OnGet() - { - - } - - private readonly IWebHostEnvironment _hostingEnvironment; - - public Styles(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - #region Styles - - public ActionResult OnPost(string Group1, string Group2) - { - if (Group1 == null) - return null; - // return View(); - WordDocument document = null; - - #region Built-in Style - - if (Group1 == "Built-in") - { - document = new WordDocument(); - WSection section = document.AddSection() as WSection; - WParagraph para = section.AddParagraph() as WParagraph; - - section.AddColumn(100, 100); - section.AddColumn(100, 100); - section.MakeColumnsEqual(); - - #region List Style - - //List - //para = section.AddParagraph() as WParagraph; - para.AppendText("This para is written with style List").CharacterFormat.UnderlineStyle = - UnderlineStyle.Double; - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.List); - para.AppendText("Google Chrome\n"); - para.AppendText("Mozilla Firefox\n"); - para.AppendText("Internet Explorer"); - - //List5 style - para = section.AddParagraph() as WParagraph; - para.AppendText("\nThis para is written with style List5").CharacterFormat.UnderlineStyle = - UnderlineStyle.Double; - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.List5); - para.AppendText("Google Chrome\n"); - para.AppendText("Mozilla Firefox\n"); - para.AppendText("Internet Explorer"); - - #endregion - - #region ListNumber Style - - //List Number style - para = section.AddParagraph() as WParagraph; - para.AppendText("\nThis para is written with style ListNumber").CharacterFormat.UnderlineStyle = - UnderlineStyle.Double; - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.ListNumber); - para.AppendText("Google Chrome\n"); - para.AppendText("Mozilla Firefox\n"); - para.AppendText("Internet Explorer"); - - //List Number5 style - para = section.AddParagraph() as WParagraph; - para.AppendText("\nThis para is written with style ListNumber5").CharacterFormat.UnderlineStyle = - UnderlineStyle.Double; - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.ListNumber5); - para.AppendText("Google Chrome\n"); - para.AppendText("Mozilla Firefox\n"); - para.AppendText("Internet Explorer"); - - #endregion - - #region TOA Heading Style - - //TOA Heading - para = section.AddParagraph() as WParagraph; - para.ParagraphFormat.AfterSpacing = 10; - para.AppendText("\nThis para is written with style TOA Heading").CharacterFormat.UnderlineStyle = - UnderlineStyle.Double; - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.ToaHeading); - para.AppendText("Google Chrome\n"); - para.AppendText("Mozilla Firefox\n"); - para.AppendText("Internet Explorer"); - - #endregion - - section.BreakCode = SectionBreakCode.NewColumn; - - #region ListBullet Style - - //ListBullet - para = section.AddParagraph() as WParagraph; - para.AppendText("\nThis para is written with style ListBullet").CharacterFormat.UnderlineStyle = - UnderlineStyle.Double; - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.ListBullet); - para.AppendText("Google Chrome\n"); - para.AppendText("Mozilla Firefox\n"); - para.AppendText("Internet Explorer"); - - //ListBullet5 - para = section.AddParagraph() as WParagraph; - para.AppendText("\nThis para is written with style ListBullet5").CharacterFormat.UnderlineStyle = - UnderlineStyle.Double; - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.ListBullet5); - para.AppendText("Google Chrome\n"); - para.AppendText("Mozilla Firefox\n"); - para.AppendText("Internet Explorer"); - - #endregion - - #region List Continue Style - - //ListContinue - para = section.AddParagraph() as WParagraph; - para.AppendText("\nThis para is written with style ListContinue").CharacterFormat.UnderlineStyle = - UnderlineStyle.Double; - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.ListContinue); - para.AppendText("Google Chrome\n"); - para.AppendText("Mozilla Firefox\n"); - para.AppendText("Internet Explorer"); - - //ListContinue5 - para = section.AddParagraph() as WParagraph; - para.AppendText("\nThis para is written with style ListContinue5").CharacterFormat.UnderlineStyle = - UnderlineStyle.Double; - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.ListContinue5); - para.AppendText("Google Chrome\n"); - para.AppendText("Mozilla Firefox\n"); - para.AppendText("Internet Explorer"); - - #endregion - - #region HTMLSample Style - - //HtmlSample - para = section.AddParagraph() as WParagraph; - para.AppendText("\nThis para is written with style HtmlSample").CharacterFormat.UnderlineStyle = - UnderlineStyle.Double; - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.HtmlSample); - para.AppendText("Google Chrome\n"); - para.AppendText("Mozilla Firefox\n"); - para.AppendText("Internet Explorer"); - - #endregion - - section = document.AddSection() as WSection; - section.BreakCode = SectionBreakCode.NoBreak; - - #region Document Map Style - - //Docuemnt Map - para = section.AddParagraph() as WParagraph; - para.AppendText("This para is written with style DocumentMap\n").CharacterFormat.UnderlineStyle = - UnderlineStyle.Double; - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.DocumentMap); - para.AppendText("Google Chrome\n").CharacterFormat.TextColor = Syncfusion.Drawing.Color.White; - para.AppendText("Mozilla Firefox\n").CharacterFormat.TextColor = Syncfusion.Drawing.Color.White; - para.AppendText("Internet Explorer").CharacterFormat.TextColor = Syncfusion.Drawing.Color.White; - - #endregion - - #region Heading Styles - - //Heading Styles - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.Heading1); - para.AppendText("Hello World. This para is written with style " + para.StyleName.ToString()); - - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.Heading2); - para.AppendText("Hello World. This para is written with style " + para.StyleName.ToString()); - - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.Heading3); - para.AppendText("Hello World. This para is written with style " + para.StyleName.ToString()); - - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.Heading4); - para.AppendText("Hello World. This para is written with style " + para.StyleName.ToString()); - - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.Heading5); - para.AppendText("Hello World. This para is written with style " + para.StyleName.ToString()); - - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.Heading6); - para.AppendText("Hello World. This para is written with style " + para.StyleName.ToString()); - - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.Heading7); - para.AppendText("Hello World. This para is written with style " + para.StyleName.ToString()); - - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.Heading8); - para.AppendText("Hello World. This para is written with style " + para.StyleName.ToString()); - - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.Heading9); - para.AppendText("Hello World. This para is written with style " + para.StyleName.ToString()); - - #endregion - - #region MessageHeaderStyle - - //MessageHeader - para = section.AddParagraph() as WParagraph; - para = section.AddParagraph() as WParagraph; - para.AppendText("This para is written with style MessageHeader\n").CharacterFormat.UnderlineStyle = - UnderlineStyle.Double; - para = section.AddParagraph() as WParagraph; - para.ApplyStyle(BuiltinStyle.MessageHeader); - para.AppendText("Google Chrome\n"); - para.AppendText("Mozilla Firefox\n"); - para.AppendText("Internet Explorer"); - - #endregion - } - - #endregion Built-in Style - - #region Custom Style - - else - { - document = new WordDocument(); - IWParagraphStyle style = null; - // Adding a new section to the document. - WSection section = document.AddSection() as WSection; - //Set Margin of the section - section.PageSetup.Margins.All = 72; - IWParagraph par = document.LastSection.AddParagraph(); - WTextRange range = par.AppendText("Using CustomStyles") as WTextRange; - range.CharacterFormat.TextBackgroundColor = Syncfusion.Drawing.Color.Red; - range.CharacterFormat.TextColor = Syncfusion.Drawing.Color.White; - range.CharacterFormat.FontSize = 18f; - document.LastParagraph.ParagraphFormat.HorizontalAlignment = - Syncfusion.DocIO.DLS.HorizontalAlignment.Center; // Create Paragraph styles - style = document.AddParagraphStyle("MyStyle_Normal"); - style.CharacterFormat.FontName = "Bitstream Vera Serif"; - style.CharacterFormat.FontSize = 10f; - style.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Justify; - style.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(0, 21, 84); - - style = document.AddParagraphStyle("MyStyle_Low"); - style.CharacterFormat.FontName = "Times New Roman"; - style.CharacterFormat.FontSize = 16f; - style.CharacterFormat.Bold = true; - - style = document.AddParagraphStyle("MyStyle_Medium"); - style.CharacterFormat.FontName = "Monotype Corsiva"; - style.CharacterFormat.FontSize = 18f; - style.CharacterFormat.Bold = true; - style.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(51, 66, 125); - - style = document.AddParagraphStyle("Mystyle_High"); - style.CharacterFormat.FontName = "Bitstream Vera Serif"; - style.CharacterFormat.FontSize = 20f; - style.CharacterFormat.Bold = true; - style.CharacterFormat.TextColor = Syncfusion.Drawing.Color.FromArgb(242, 151, 50); - - IWParagraph paragraph = null; - for (int i = 0; i < document.Styles.Count; i++) - { - //Skip to apply the document default styles and also paragraph style. - if (document.Styles[i].Name == "Normal" || document.Styles[i].Name == "Default Paragraph Font" - || document.Styles[i].StyleType != StyleType.ParagraphStyle) - continue; - // Getting styles from Document. - style = (IWParagraphStyle)document.Styles[i]; - // Adding a new paragraph - section.AddParagraph(); - paragraph = section.AddParagraph(); - // Applying styles to the current paragraph. - paragraph.ApplyStyle(style.Name); - // Writing Text with the current style and formatting. - paragraph.AppendText("Northwind Database with [" + style.Name + "] Style"); - // Adding a new paragraph - section.AddParagraph(); - paragraph = section.AddParagraph(); - // Applying another style to the current paragraph. - paragraph.ApplyStyle("MyStyle_Normal"); - // Writing text with current style. - paragraph.AppendText( - "The Northwind sample database (Northwind.mdb) is included with all versions of Access. It provides data you can experiment with and database objects that demonstrate features you might want to implement in your own databases. Using Northwind, you can become familiar with how a relational database is structured and how the database objects work together to help you enter, store, manipulate, and print your data."); - } - } - - #endregion Custom Style - - FormatType type = FormatType.Docx; - string filename = "Styles.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group2 == "WordDoc") - { - type = FormatType.Doc; - filename = "Styles.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group2 == "WordML") - { - type = FormatType.WordML; - filename = "Styles.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - - } - - #endregion Styles -} \ No newline at end of file diff --git a/Pages/Word/TXTtoWord.cshtml b/Pages/Word/TXTtoWord.cshtml deleted file mode 100644 index 6d03c36c..00000000 --- a/Pages/Word/TXTtoWord.cshtml +++ /dev/null @@ -1,82 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.TXTtoWord - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Import, TXT To Word, Conversion : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("txttoword", "word", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view the resultant Word document converted from a text file using the .NET Word Library (DocIO). -
-
- Select Document : -
- - - -
-
-
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Convert to Word").Render() -
-
- @Model.Message -
-
-
- Html.EndForm(); - } - } -
-} - -@section ActionDescription{ -
- This sample demonstrates how to convert a text file to a Word document using the .NET Word Library (DocIO). -
-} -@section Description{ -
- The .NET Word Library (DocIO) supports converting a TXT file to a Word document and vice versa. -
-
- More information about TXT to Word conversion can be found on this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - TXT to Word Example - Syncfusion Demos - } -@section Header{ -

Example of TXT to Word in ASP.NET Core Word (DocIO) Library

- } diff --git a/Pages/Word/TXTtoWord.cshtml.cs b/Pages/Word/TXTtoWord.cshtml.cs deleted file mode 100644 index 85f38c2f..00000000 --- a/Pages/Word/TXTtoWord.cshtml.cs +++ /dev/null @@ -1,116 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; -using System.IO; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class TXTtoWord : PageModel -{ - public void OnGet() - { - - } - public string Message { get; set; } - private readonly IWebHostEnvironment _hostingEnvironment; - - public TXTtoWord(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1) - { - - if (Group1 == null) - return null; - Stream stream = GetTextFile(); - if (stream != null) - { - try - { - string output = (Request.Form.Files != null && Request.Form.Files.Count != 0) - ? Path.GetFileNameWithoutExtension(Request.Form.Files[0].FileName) - : "TXTToWord"; - WordDocument document = new WordDocument(stream, FormatType.Txt); - stream.Dispose(); - stream = null; - FormatType type = FormatType.Docx; - string filename = output + ".docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = output + ".doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = output + ".xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - catch - { - Message = - string.Format( - "The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - } - } - - return null; - } - /// - /// Gets Text file for Word conversion - /// - /// - private Stream GetTextFile() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".txt") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - Message = string.Format("Please choose text file to convert to Word document"); - return null; - } - } - else - { - //Opens an existing document from stream through constructor of `WordDocument` class - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/TXTToWord.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } -} diff --git a/Pages/Word/TableOfContents.cshtml b/Pages/Word/TableOfContents.cshtml deleted file mode 100644 index 4a9aaa1c..00000000 --- a/Pages/Word/TableOfContents.cshtml +++ /dev/null @@ -1,152 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.TableOfContents - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : TOC, Table of Contents : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("tableofcontents", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document or PDF. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document and PDF viewer is required to view the resultant PDF. -
- Title : -   - -
-
-
- Styles: - - -   - - -   -
-
-
- Heading Level : -   - Lower Level -   - -    - Upper Level -   - -
-
- - - - - - - - - - - - - -
- - - - - -
- - - - - -
- - - - - -
-
-
- Save As : - - -   - - -   - - -   - - -   -
-
- -
-
- @Model.Message -
-
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription { -
- This sample demonstrates how to insert and update the Table of Contents (TOC) in a Word document using .NET Word Library (DocIO). -
-} -@section Description { -
- DocIO supports to insert Table of Contents based on custom and default heading styles, include page numbers, hyperlinks to easily navigate to specific topic or heading within the document, specify the outline levels. -
    -
  • - You can draft books in Word document with table of contents that provides outline of the book like chapter, section titles, sub titles with its commencing page number. -
  • -
  • - You can update or rebuild the Table of Contents in an existing Word document. -
  • -
-
-
- More information about the Table of Contents can be found in this - Documentation - section. -
-} -@section Meta { - -} -@section Title { - ASP.NET Core Word (DocIO) library - Table of Contents Example - Syncfusion Demos -} -@section Header { -

Example of Table of Contents in ASP.NET Core Word (DocIO) Library

-} \ No newline at end of file diff --git a/Pages/Word/TableOfContents.cshtml.cs b/Pages/Word/TableOfContents.cshtml.cs deleted file mode 100644 index 9bcbd59e..00000000 --- a/Pages/Word/TableOfContents.cshtml.cs +++ /dev/null @@ -1,236 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIORenderer; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class TableOfContents : PageModel -{ - public string Message { get; set; } - public void OnGet() - { - - } - - public ActionResult OnPost(string Group1, string txtTitle, string StylesOption, string upperLevel, string lowerLevel, string chkPageNumbers, string chkAlign, string chkHyperlink, string chkOutline, string chkTableEntry, string chkUpdateTOC) - { - if (Group1 == null) - return null; - // return View(); - string filename = ""; - string contenttype = ""; - MemoryStream ms = new MemoryStream(); - WordDocument doc = new WordDocument(); - doc.EnsureMinimal(); - - WParagraph para = doc.LastParagraph; - para.AppendText("Essential DocIO - Table of Contents"); - para.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - para.ApplyStyle(BuiltinStyle.Heading4); - - para = doc.LastSection.AddParagraph() as WParagraph; - para.ParagraphFormat.HorizontalAlignment = Syncfusion.DocIO.DLS.HorizontalAlignment.Center; - para.ApplyStyle(BuiltinStyle.Heading4); - - if (chkUpdateTOC != "UpdateTOC") - para.AppendText("Select TOC and press F9 to update the Table of Contents").CharacterFormat.HighlightColor = Syncfusion.Drawing.Color.Yellow; - - para = doc.LastSection.AddParagraph() as WParagraph; - string title = txtTitle + "\n"; - para.AppendText(title); - para.ApplyStyle(BuiltinStyle.Heading4); - - //Insert TOC - TableOfContent toc = para.AppendTOC(1, 3); - - para.ApplyStyle(BuiltinStyle.Heading4); - - //Apply built-in paragraph formatting - WSection section = doc.LastSection; - - if (StylesOption == "Default") - { - #region Default Styles - WParagraph newPara = section.AddParagraph() as WParagraph; - newPara = section.AddParagraph() as WParagraph; - newPara.AppendBreak(BreakType.PageBreak); - WTextRange text = newPara.AppendText("Document with Default styles") as WTextRange; - newPara.ApplyStyle(BuiltinStyle.Heading1); - newPara = section.AddParagraph() as WParagraph; - newPara.AppendText("This is the heading1 of built in style. This sample demonstrates the TOC insertion in a word document. Note that DocIO can only insert TOC field in a word document. It can not refresh or create TOC field. MS Word refreshes the TOC field after insertion. Please update the field or press F9 key to refresh the TOC."); - - section.AddParagraph(); - newPara = section.AddParagraph() as WParagraph; - text = newPara.AppendText("Section1") as WTextRange; - newPara.ApplyStyle(BuiltinStyle.Heading2); - newPara = section.AddParagraph() as WParagraph; - newPara.AppendText("This is the heading2 of built in style. A document can contain any number of sections. Sections are used to apply same formatting for a group of paragraphs. You can insert sections by inserting section breaks."); - - section.AddParagraph(); - newPara = section.AddParagraph() as WParagraph; - text = newPara.AppendText("Paragraph1") as WTextRange; - newPara.ApplyStyle(BuiltinStyle.Heading3); - newPara = section.AddParagraph() as WParagraph; - newPara.AppendText("This is the heading3 of built in style. Each section contains any number of paragraphs. A paragraph is a set of statements that gives a meaning for the text."); - - section.AddParagraph(); - newPara = section.AddParagraph() as WParagraph; - text = newPara.AppendText("Paragraph2") as WTextRange; - newPara.ApplyStyle(BuiltinStyle.Heading3); - newPara = section.AddParagraph() as WParagraph; - newPara.AppendText("This is the heading3 of built in style. This demonstrates the paragraphs at the same level and style as that of the previous one. A paragraph can have any number formatting. This can be attained by formatting each text range in the paragraph."); - - section.AddParagraph(); - section = doc.AddSection() as WSection; - section.BreakCode = SectionBreakCode.NewPage; - newPara = section.AddParagraph() as WParagraph; - text = newPara.AppendText("Section2") as WTextRange; - newPara.ApplyStyle(BuiltinStyle.Heading2); - newPara = section.AddParagraph() as WParagraph; - newPara.AppendText("This is the heading2 of built in style. A document can contain any number of sections. Sections are used to apply same formatting for a group of paragraphs. You can insert sections by inserting section breaks."); - - section.AddParagraph(); - newPara = section.AddParagraph() as WParagraph; - text = newPara.AppendText("Paragraph1") as WTextRange; - newPara.ApplyStyle(BuiltinStyle.Heading3); - newPara = section.AddParagraph() as WParagraph; - newPara.AppendText("This is the heading3 of built in style. Each section contains any number of paragraphs. A paragraph is a set of statements that gives a meaning for the text."); - - section.AddParagraph(); - newPara = section.AddParagraph() as WParagraph; - text = newPara.AppendText("Paragraph2") as WTextRange; - newPara.ApplyStyle(BuiltinStyle.Heading3); - newPara = section.AddParagraph() as WParagraph; - newPara.AppendText("This is the heading3 of built in style. This demonstrates the paragraphs at the same level and style as that of the previous one. A paragraph can have any number formatting. This can be attained by formatting each text range in the paragraph."); - #endregion - } - else - { - #region Custom styles - //Custom styles. - WParagraphStyle pStyle1 = (WParagraphStyle)doc.AddParagraphStyle("MyStyle1"); - WParagraphStyle pStyle2 = (WParagraphStyle)doc.AddParagraphStyle("MyStyle2"); - WParagraphStyle pStyle3 = (WParagraphStyle)doc.AddParagraphStyle("MyStyle3"); - - //Set the Heading Styles to false in order to define custom levels to TOC. - toc.UseHeadingStyles = false; - - //Set the TOC level style which determines; based on which the TOC should be created. - toc.SetTOCLevelStyle(1, "MyStyle1"); - toc.SetTOCLevelStyle(2, "MyStyle2"); - toc.SetTOCLevelStyle(3, "MyStyle3"); - section = doc.AddSection() as WSection; - - pStyle1.CharacterFormat.FontName = "Cambria"; - pStyle1.CharacterFormat.FontSize = 30f; - - para = section.AddParagraph() as WParagraph; - - WTextRange text = para.AppendText("Document with Custom Styles") as WTextRange; - para.ParagraphFormat.OutlineLevel = OutlineLevel.Level1; - para.ApplyStyle("MyStyle1"); - para = doc.LastSection.AddParagraph() as WParagraph; - para.AppendText("This is the heading1 of built in style. This sample demonstrates the TOC insertion in a word document. Note that DocIO can only insert TOC field in a word document. It can not refresh or create TOC field. MS Word refreshes the TOC field after insertion. Please update the field or press F9 key to refresh the TOC."); - - pStyle2.CharacterFormat.FontName = "Cambria"; - pStyle2.CharacterFormat.FontSize = 20f; - - doc.LastSection.AddParagraph(); - - para = doc.LastSection.AddParagraph() as WParagraph; - text = para.AppendText("Section1") as WTextRange; - para.ParagraphFormat.OutlineLevel = OutlineLevel.Level2; - para.ApplyStyle("MyStyle2"); - para = doc.LastSection.AddParagraph() as WParagraph; - para.AppendText("This is the heading2 of built in style. A document can contain any number of sections. Sections are used to apply same formatting for a group of paragraphs. You can insert sections by inserting section breaks."); - - pStyle3.CharacterFormat.FontName = "Cambria"; - pStyle3.CharacterFormat.FontSize = 14f; - - doc.LastSection.AddParagraph(); - - para = doc.LastSection.AddParagraph() as WParagraph; - text = para.AppendText("Section2") as WTextRange; - para.ParagraphFormat.OutlineLevel = OutlineLevel.Level3; - para.ApplyStyle("MyStyle3"); - para = doc.LastSection.AddParagraph() as WParagraph; - para.AppendText("This is the heading2 of built in style. A document can contain any number of sections. Sections are used to apply same formatting for a group of paragraphs. You can insert sections by inserting section breaks."); - #endregion - } - if (int.Parse(upperLevel) < int.Parse(lowerLevel)) - { - Message = string.Format("Not a valid heading level range. UpperHeadingLevel must be greater than LowerHeadingLevel."); - return null; - } - else - { - toc.IncludePageNumbers = chkPageNumbers == "PageNumbers" ? true : false; - toc.RightAlignPageNumbers = chkAlign == "Align" ? true : false; - toc.UseHyperlinks = chkHyperlink == "Hyperlink" ? true : false; - toc.LowerHeadingLevel = int.Parse(lowerLevel); - toc.UpperHeadingLevel = int.Parse(upperLevel); - - //Right click text. Select Paragraph option. Set OutlineLevel. Update TOC to see the text added in TOC. - toc.UseOutlineLevels = chkOutline == "Outline" ? true : false; - - //Select the text that should be marked as Table of contents. - //Press ALT+SHIFT+O. A dialog box will appear with options to enter the text, select the table identifier and level. - //Choose the table identifier and level for the test and click �Mark�. Update TOC to see the text added in TOC. - //Sets the Table Identifier if necessary. - //toc.TableID = "B"; - toc.UseTableEntryFields = chkTableEntry == "TableEntry" ? true : false; - - //Updates the table of contents. - if (chkUpdateTOC == "UpdateTOC") - doc.UpdateTableOfContents(); - - #region Document SaveOption - //Save as .docx format - if (Group1 == "WordDocx") - { - filename = "Table of Contents.docx"; - contenttype = "application/vnd.ms-word.document.12"; - doc.Save(ms, FormatType.Docx); - } - // Save as .doc format - else if (Group1 == "WordDoc") - { - filename = "Table of Contents.doc"; - contenttype = "application/msword"; - doc.Save(ms, FormatType.Doc); - } - //Save as .xml format - else if (Group1 == "WordML") - { - filename = "Table of Contents.xml"; - contenttype = "application/msword"; - doc.Save(ms, FormatType.WordML); - } - //Save as .pdf format - else if (Group1 == "Pdf") - { - filename = "Table of Contents.pdf"; - contenttype = "application/pdf"; - Syncfusion.DocIORenderer.DocIORenderer renderer = new Syncfusion.DocIORenderer.DocIORenderer(); - Syncfusion.Pdf.PdfDocument pdfDoc = renderer.ConvertToPDF(doc); - pdfDoc.Save(ms); - pdfDoc.Close(); - } - - #endregion Document SaveOption - - doc.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - } -} \ No newline at end of file diff --git a/Pages/Word/TableOfFigures.cshtml b/Pages/Word/TableOfFigures.cshtml deleted file mode 100644 index dca86858..00000000 --- a/Pages/Word/TableOfFigures.cshtml +++ /dev/null @@ -1,75 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.TableOfFigures - -@using Syncfusion.EJ2 -@{ var Title = " Essential DocIO (Word) : TOC, Table of Figures : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("tableoffigures", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document or PDF. Please note that a Word-compatible viewer is required to open and view the Word document and a PDF viewer is required to view the resultant PDF. -
- -
-
- Save As : - - -   - - -   - - -   - - -   -
-
- -   - -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to insert and update the table of figures in a Word document using .NET Word Library (DocIO). -
-} -@section Description{ -
- The .NET Word Library (DocIO) provides support to insert and update table of figures in Word document including page number, hyperlinks to easily navigate to specific caption of figures, tables, charts, and more. -
    -
  • - You can update or rebuild the table of figures in an existing Word document. -
  • -
  • - You can customize the table of figures by excluding caption’s label and number. -
  • -
-
-
- More information about the table of figures can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library – Table of Figures Example - Syncfusion Demos - } -@section Header{ -

Example of Table of Figures in ASP.NET Core Word Library (DocIO)

- } \ No newline at end of file diff --git a/Pages/Word/TableOfFigures.cshtml.cs b/Pages/Word/TableOfFigures.cshtml.cs deleted file mode 100644 index e2e40985..00000000 --- a/Pages/Word/TableOfFigures.cshtml.cs +++ /dev/null @@ -1,211 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIORenderer; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class TableOfFigures : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public TableOfFigures(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1, string Button, string ExcludeLabelsAndNumbers) - { - if (Group1 == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/TableOfFiguresInput.docx"; - string contenttype1 = "application/vnd.ms-word.document.12"; - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - if (Button == "View Template") - { - return File(fileStream, contenttype1, "TableOfFiguresInput.docx"); - } - - try - { - //Open an existing word document. - using (WordDocument document = new WordDocument(fileStream, FormatType.Docx)) - { - fileStream.Dispose(); - fileStream = null; - - #region Add Table of Figures - - //Create a new paragraph. - WParagraph paragraph = new WParagraph(document); - paragraph.AppendText("List of Figures"); - //Apply Heading1 style for paragraph. - paragraph.ApplyStyle(BuiltinStyle.Heading1); - //Insert the paragraph. - document.LastSection.Body.ChildEntities.Insert(0, paragraph); - - //Create new paragraph and append TOC. - paragraph = new WParagraph(document); - TableOfContent tableOfContent = paragraph.AppendTOC(1, 3); - //Disable a flag to exclude heading style paragraphs in TOC entries. - tableOfContent.UseHeadingStyles = false; - //Set the name of SEQ field identifier for table of figures. - tableOfContent.TableOfFiguresLabel = "Figure"; - if (ExcludeLabelsAndNumbers == "ExcludeLabelsAndNumbers") - //Disable the flag, to exclude caption's label and number in TOC entries. - tableOfContent.IncludeCaptionLabelsAndNumbers = false; - - //Insert the paragraph to the text body. - document.LastSection.Body.ChildEntities.Insert(1, paragraph); - - #endregion - - #region Add caption for pictures - - //Find all pictures from the document. - List pictures = document.FindAllItemsByProperty(EntityType.Picture, null, null); - // Iterate each picture and add caption. - foreach (WPicture picture in pictures) - { - //Set alternate text as caption for picture. - WParagraph captionPara = - picture.AddCaption("Figure", CaptionNumberingFormat.Number, CaptionPosition.AfterImage) as - WParagraph; - captionPara.AppendText(" " + picture.AlternativeText); - //Apply formatting to the caption. - captionPara.ApplyStyle(BuiltinStyle.Caption); - captionPara.ParagraphFormat.BeforeSpacing = 8; - captionPara.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - } - - #endregion - - - #region Add Table of Tables - - // Create a new paragraph. - paragraph = new WParagraph(document); - paragraph.AppendText("List of Tables"); - // Apply Heading1 style for paragraph. - paragraph.ApplyStyle(BuiltinStyle.Heading1); - // Insert the paragraph. - document.LastSection.Body.ChildEntities.Insert(2, paragraph); - - //Create a new paragraph and append TOC. - paragraph = new WParagraph(document); - tableOfContent = paragraph.AppendTOC(1, 3); - //Disable a flag to exclude heading style paragraphs in TOC entries. - tableOfContent.UseHeadingStyles = false; - //Set the name of SEQ field identifier for table of tables. - tableOfContent.TableOfFiguresLabel = "Table"; - if (ExcludeLabelsAndNumbers == "ExcludeLabelsAndNumbers") - //Disable the flag, to exclude caption's label and number in TOC entries. - tableOfContent.IncludeCaptionLabelsAndNumbers = false; - // Insert the paragraph to the text body. - document.LastSection.Body.ChildEntities.Insert(3, paragraph); - - #endregion - - #region Add caption for tables - - // Find all tables from the document. - List tables = document.FindAllItemsByProperty(EntityType.Table, null, null); - //Iterate each table and add caption. - foreach (WTable table in tables) - { - //Gets the table index. - int tableIndex = table.OwnerTextBody.ChildEntities.IndexOf(table); - //Create a new paragraph and appends the sequence field to use as a caption. - WParagraph captionPara = new WParagraph(document); - captionPara.AppendText("Table "); - captionPara.AppendField("Table", FieldType.FieldSequence); - //Set alternate text as caption for table. - captionPara.AppendText(" " + table.Description); - // Apply formatting to the paragraph. - captionPara.ApplyStyle(BuiltinStyle.Caption); - captionPara.ParagraphFormat.BeforeSpacing = 8; - captionPara.ParagraphFormat.HorizontalAlignment = HorizontalAlignment.Center; - //Insert the paragraph next to the table. - table.OwnerTextBody.ChildEntities.Insert(tableIndex + 1, captionPara); - } - - #endregion - - #region Update - - //Update all document fields to update SEQ fields. - document.UpdateDocumentFields(); - //Update the table of contents. - document.UpdateTableOfContents(); - - #endregion - - #region Document SaveOption - - string filename = ""; - string contenttype = ""; - MemoryStream ms = new MemoryStream(); - //Save as .docx format. - if (Group1 == "WordDocx") - { - filename = "TableOfFigures.docx"; - contenttype = "application/vnd.ms-word.document.12"; - document.Save(ms, FormatType.Docx); - } - // Save as .doc format. - else if (Group1 == "WordDoc") - { - filename = "TableOfFigures.doc"; - contenttype = "application/msword"; - document.Save(ms, FormatType.Doc); - } - //Save as .xml format. - else if (Group1 == "WordML") - { - filename = "TableOfFigures.xml"; - contenttype = "application/msword"; - document.Save(ms, FormatType.WordML); - } - //Save as .pdf format. - else if (Group1 == "Pdf") - { - filename = "TableOfFigures.pdf"; - contenttype = "application/pdf"; - Syncfusion.DocIORenderer.DocIORenderer renderer = new Syncfusion.DocIORenderer.DocIORenderer(); - Syncfusion.Pdf.PdfDocument pdfDoc = renderer.ConvertToPDF(document); - pdfDoc.Save(ms); - pdfDoc.Close(); - renderer.Dispose(); - } - - #endregion Document SaveOption - - ms.Position = 0; - return File(ms, contenttype, filename); - } - } - catch (Exception) - { - var Message = - string.Format( - "The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - } - - return null; - // return View(); - } -} \ No newline at end of file diff --git a/Pages/Word/TableStyles.cshtml b/Pages/Word/TableStyles.cshtml deleted file mode 100644 index 8d143da0..00000000 --- a/Pages/Word/TableStyles.cshtml +++ /dev/null @@ -1,69 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.TableStyles - -@using Syncfusion.EJ2 -@{ var Title = " Essential DocIO (Word) : Table Styles : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("tablestyles", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- - -   - - -
-
- Save As : - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to apply built-in and custom styles to the tables of the Word document using Essential DocIO. -
-} -@section Description{ -
- DocIO supports various built-in styles and provides ability to create custom styles. With DocIO, you can apply built-in table styles and custom styles for the Word Open XML Format document (DOCX, DOTX, DOCM, DOTM). -
    -
  • - Table styles includes table, row, cell, paragraph and text level formatting. -
  • -
  • - You can apply special formatting the options for first column, last column, banded rows, banded columns, header row and last row. -
  • -
-
-
- More information about the table styles can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Table Styles Example - Syncfusion Demos - } -@section Header{ -

Example of Table Styles in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/TableStyles.cshtml.cs b/Pages/Word/TableStyles.cshtml.cs deleted file mode 100644 index 4d57faa4..00000000 --- a/Pages/Word/TableStyles.cshtml.cs +++ /dev/null @@ -1,552 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using System.Xml; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class TableStyles : PageModel -{ - public void OnGet() - { - - } - - private readonly IWebHostEnvironment _hostingEnvironment; - - public TableStyles(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - - public ActionResult OnPost(string Group1, string Group2) - { - if (Group1 == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = string.Empty; - dataPath = basePath + @"/Word/TemplateTableStyle.doc"; - WordDocument document = new WordDocument(); - document.Open(dataPath, FormatType.Doc); - - //Create MailMergeDataTable - MailMergeDataTable mailMergeDataTable = GetMailMergeDataTable(); - //Execute Mail Merge with groups. - document.MailMerge.ExecuteGroup(mailMergeDataTable); - - #region Built-in Style - - if (Group1 == "Built-in") - { - //Get table to apply style. - WTable table = (WTable)document.LastSection.Tables[0]; - //Apply built-in table style to the table. - table.ApplyStyle(BuiltinTableStyle.MediumShading1Accent5); - } - - #endregion Built-in Style - - #region Custom Style - - else - { - #region Custom table styles - - //Get table to apply style - WTable table = (WTable)document.LastSection.Tables[0]; - - #region Apply Table style - - WTableStyle tableStyle = document.AddTableStyle("Tablestyle") as WTableStyle; - Color borderColor = Color.WhiteSmoke; - Color firstRowBackColor = Color.Blue; - Color backColor = Color.WhiteSmoke; - ConditionalFormattingStyle firstRowStyle, - lastRowStyle, - firstColumnStyle, - lastColumnStyle, - oddColumnBandingStyle, - oddRowBandingStyle, - evenRowBandingStyle; - - #region Table Properties - - tableStyle.TableProperties.RowStripe = 1; - tableStyle.TableProperties.ColumnStripe = 1; - tableStyle.TableProperties.LeftIndent = 0; - - tableStyle.TableProperties.Paddings.Top = 0; - tableStyle.TableProperties.Paddings.Bottom = 0; - tableStyle.TableProperties.Paddings.Left = 5.4f; - tableStyle.TableProperties.Paddings.Right = 5.4f; - - tableStyle.TableProperties.Borders.Top.BorderType = BorderStyle.Single; - tableStyle.TableProperties.Borders.Top.LineWidth = 1f; - tableStyle.TableProperties.Borders.Top.Color = Color.AliceBlue; - tableStyle.TableProperties.Borders.Top.Space = 0; - - tableStyle.TableProperties.Borders.Bottom.BorderType = BorderStyle.Single; - tableStyle.TableProperties.Borders.Bottom.LineWidth = 1f; - tableStyle.TableProperties.Borders.Bottom.Color = borderColor; - tableStyle.TableProperties.Borders.Bottom.Space = 0; - - tableStyle.TableProperties.Borders.Left.BorderType = BorderStyle.Single; - tableStyle.TableProperties.Borders.Left.LineWidth = 1f; - tableStyle.TableProperties.Borders.Left.Color = borderColor; - tableStyle.TableProperties.Borders.Left.Space = 0; - - tableStyle.TableProperties.Borders.Right.BorderType = BorderStyle.Single; - tableStyle.TableProperties.Borders.Right.LineWidth = 1f; - tableStyle.TableProperties.Borders.Right.Color = borderColor; - tableStyle.TableProperties.Borders.Right.Space = 0; - - tableStyle.TableProperties.Borders.Horizontal.BorderType = BorderStyle.Single; - tableStyle.TableProperties.Borders.Horizontal.LineWidth = 1f; - tableStyle.TableProperties.Borders.Horizontal.Color = borderColor; - tableStyle.TableProperties.Borders.Horizontal.Space = 0; - - #endregion - - #region Conditional Formatting Properties - - #region First Row Conditional Formatting Style - - firstRowStyle = tableStyle.ConditionalFormattingStyles.Add(ConditionalFormattingType.FirstRow); - - #region Character format - - firstRowStyle.CharacterFormat.Bold = true; - firstRowStyle.CharacterFormat.BoldBidi = true; - firstRowStyle.CharacterFormat.TextColor = Color.FromArgb(255, 255, 255, 255); - - #endregion - - #region Table Cell Properties - - firstRowStyle.CellProperties.Borders.Top.BorderType = BorderStyle.Single; - firstRowStyle.CellProperties.Borders.Top.LineWidth = 1f; - firstRowStyle.CellProperties.Borders.Top.Color = borderColor; - firstRowStyle.CellProperties.Borders.Top.Space = 0; - - firstRowStyle.CellProperties.Borders.Bottom.BorderType = BorderStyle.Single; - firstRowStyle.CellProperties.Borders.Bottom.LineWidth = 1f; - firstRowStyle.CellProperties.Borders.Bottom.Color = borderColor; - firstRowStyle.CellProperties.Borders.Bottom.Space = 0; - - firstRowStyle.CellProperties.Borders.Left.BorderType = BorderStyle.Single; - firstRowStyle.CellProperties.Borders.Left.LineWidth = 1f; - firstRowStyle.CellProperties.Borders.Left.Color = borderColor; - firstRowStyle.CellProperties.Borders.Left.Space = 0; - - firstRowStyle.CellProperties.Borders.Right.BorderType = BorderStyle.Single; - firstRowStyle.CellProperties.Borders.Right.LineWidth = 1f; - firstRowStyle.CellProperties.Borders.Right.Color = borderColor; - firstRowStyle.CellProperties.Borders.Right.Space = 0; - - firstRowStyle.CellProperties.Borders.Horizontal.BorderType = BorderStyle.Cleared; - - firstRowStyle.CellProperties.Borders.Vertical.BorderType = BorderStyle.Cleared; - - firstRowStyle.CellProperties.BackColor = firstRowBackColor; - firstRowStyle.CellProperties.ForeColor = Color.FromArgb(0, 255, 255, 255); - firstRowStyle.CellProperties.TextureStyle = TextureStyle.TextureNone; - - #endregion - - #endregion - - #region Last Row Conditional Formatting Style - - lastRowStyle = tableStyle.ConditionalFormattingStyles.Add(ConditionalFormattingType.LastRow); - - #region Character format - - lastRowStyle.CharacterFormat.Bold = true; - lastRowStyle.CharacterFormat.BoldBidi = true; - - #endregion - - #region Table Cell Properties - - lastRowStyle.CellProperties.Borders.Top.BorderType = BorderStyle.Double; - lastRowStyle.CellProperties.Borders.Top.LineWidth = .75f; - lastRowStyle.CellProperties.Borders.Top.Color = borderColor; - lastRowStyle.CellProperties.Borders.Top.Space = 0; - - lastRowStyle.CellProperties.Borders.Bottom.BorderType = BorderStyle.Single; - lastRowStyle.CellProperties.Borders.Bottom.LineWidth = 1f; - lastRowStyle.CellProperties.Borders.Bottom.Color = borderColor; - lastRowStyle.CellProperties.Borders.Bottom.Space = 0; - - lastRowStyle.CellProperties.Borders.Left.BorderType = BorderStyle.Single; - lastRowStyle.CellProperties.Borders.Left.LineWidth = 1f; - lastRowStyle.CellProperties.Borders.Left.Color = borderColor; - lastRowStyle.CellProperties.Borders.Left.Space = 0; - - lastRowStyle.CellProperties.Borders.Right.BorderType = BorderStyle.Single; - lastRowStyle.CellProperties.Borders.Right.LineWidth = 1f; - lastRowStyle.CellProperties.Borders.Right.Color = borderColor; - lastRowStyle.CellProperties.Borders.Right.Space = 0; - - lastRowStyle.CellProperties.Borders.Horizontal.BorderType = BorderStyle.Cleared; - - lastRowStyle.CellProperties.Borders.Vertical.BorderType = BorderStyle.Cleared; - - #endregion - - #endregion - - #region First Column Conditional Formatting Style - - firstColumnStyle = tableStyle.ConditionalFormattingStyles.Add(ConditionalFormattingType.FirstColumn); - - #region Character format - - firstColumnStyle.CharacterFormat.Bold = true; - firstColumnStyle.CharacterFormat.BoldBidi = true; - - #endregion - - #endregion - - #region Last Column Conditional Formatting Style - - lastColumnStyle = tableStyle.ConditionalFormattingStyles.Add(ConditionalFormattingType.LastColumn); - - #region Character format - - lastColumnStyle.CharacterFormat.Bold = true; - lastColumnStyle.CharacterFormat.BoldBidi = true; - - #endregion - - #endregion - - #region Odd Column Banding Conditional Formatting Style - - oddColumnBandingStyle = - tableStyle.ConditionalFormattingStyles.Add(ConditionalFormattingType.OddColumnBanding); - - #region Table Cell Properties - - oddColumnBandingStyle.CellProperties.BackColor = backColor; - oddColumnBandingStyle.CellProperties.ForeColor = Color.FromArgb(0, 255, 255, 255); - oddColumnBandingStyle.CellProperties.TextureStyle = TextureStyle.TextureNone; - - #endregion - - #endregion - - #region Odd Row Banding Conditional Formatting Style - - oddRowBandingStyle = tableStyle.ConditionalFormattingStyles.Add(ConditionalFormattingType.OddRowBanding); - - #region Table Cell Properties - - oddRowBandingStyle.CellProperties.Borders.Horizontal.BorderType = BorderStyle.Cleared; - - oddRowBandingStyle.CellProperties.Borders.Vertical.BorderType = BorderStyle.Cleared; - - oddRowBandingStyle.CellProperties.BackColor = backColor; - oddRowBandingStyle.CellProperties.ForeColor = Color.FromArgb(0, 255, 255, 255); - oddRowBandingStyle.CellProperties.TextureStyle = TextureStyle.TextureNone; - - #endregion - - #endregion - - #region Even Row Banding Conditional Formatting Style - - evenRowBandingStyle = tableStyle.ConditionalFormattingStyles.Add(ConditionalFormattingType.EvenRowBanding); - - #region Table Cell Properties - - evenRowBandingStyle.CellProperties.Borders.Horizontal.BorderType = BorderStyle.Cleared; - evenRowBandingStyle.CellProperties.Borders.Vertical.BorderType = BorderStyle.Cleared; - - #endregion - - #endregion - - #endregion - - #endregion - - table.ApplyStyle("Tablestyle"); - - #endregion - } - - #endregion Custom Style - - FormatType type = FormatType.Docx; - string filename = "TableStyles.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .xml format - if (Group2 == "WordML") - { - type = FormatType.WordML; - filename = "TableStyles.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - - /// - /// Gets the mail merge data table. - /// - /// - /// reader - /// Unexpected xml tag + reader.LocalName - private MailMergeDataTable GetMailMergeDataTable() - { - List suppliers = new List(); - FileStream fs = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/Suppliers.xml", FileMode.Open, - FileAccess.Read); - XmlReader reader = XmlReader.Create(fs); - if (reader == null) - throw new Exception("reader"); - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - if (reader.LocalName != "SuppliersList") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - reader.Read(); - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - while (reader.LocalName != "SuppliersList") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "Suppliers": - suppliers.Add(GetSupplier(reader)); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "SuppliersList") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - MailMergeDataTable dataTable = new MailMergeDataTable("Suppliers", suppliers); - reader.Dispose(); - fs.Dispose(); - return dataTable; - } - - /// - /// Gets the suppliers. - /// - /// The reader. - /// - /// reader - /// Unexpected xml tag + reader.LocalName - private Suppliers GetSupplier(XmlReader reader) - { - if (reader == null) - throw new Exception("reader"); - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - if (reader.LocalName != "Suppliers") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - reader.Read(); - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - Suppliers supplier = new Suppliers(); - while (reader.LocalName != "Suppliers") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "SupplierID": - supplier.SupplierID = reader.ReadElementContentAsString(); - break; - case "CompanyName": - supplier.CompanyName = reader.ReadElementContentAsString(); - break; - case "ContactName": - supplier.ContactName = reader.ReadElementContentAsString(); - break; - case "ContactTitle": - supplier.ContactTitle = reader.ReadElementContentAsString(); - break; - case "Region": - supplier.Region = reader.ReadElementContentAsString(); - break; - case "PostalCode": - supplier.PostalCode = reader.ReadElementContentAsString(); - break; - case "Phone": - supplier.Phone = reader.ReadElementContentAsString(); - break; - case "Fax": - supplier.Fax = reader.ReadElementContentAsString(); - break; - case "HomePage": - supplier.HomePage = reader.ReadElementContentAsString(); - break; - case "Address": - supplier.Address = reader.ReadElementContentAsString(); - break; - case "City": - supplier.City = reader.ReadElementContentAsString(); - break; - case "Country": - supplier.Country = reader.ReadElementContentAsString(); - break; - default: - reader.Skip(); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "Suppliers") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - return supplier; - } -} - -public class Suppliers -{ - #region Fields - - private string m_id; - private string m_companyName; - private string m_contactName; - private string m_address; - private string m_city; - private string m_country; - private string m_contactTitle; - private string m_region; - private string m_postalCode; - private string m_phone; - private string m_fax; - private string m_homePage; - - #endregion - - #region Properties - - public string SupplierID - { - get { return m_id; } - set { m_id = value; } - } - - public string CompanyName - { - get { return m_companyName; } - set { m_companyName = value; } - } - - public string ContactName - { - get { return m_contactName; } - set { m_contactName = value; } - } - - public string ContactTitle - { - get { return m_contactTitle; } - set { m_contactTitle = value; } - } - - public string Region - { - get { return m_region; } - set { m_region = value; } - } - - public string PostalCode - { - get { return m_postalCode; } - set { m_postalCode = value; } - } - - public string Phone - { - get { return m_phone; } - set { m_phone = value; } - } - - public string Fax - { - get { return m_fax; } - set { m_fax = value; } - } - - public string HomePage - { - get { return m_homePage; } - set { m_homePage = value; } - } - - public string Address - { - get { return m_address; } - set { m_address = value; } - } - - public string City - { - get { return m_city; } - set { m_city = value; } - } - - public string Country - { - get { return m_country; } - set { m_country = value; } - } - - #endregion - - #region Constructor - - public Suppliers(string id, string companyName, string contantName, string address, string city, string country) - { - m_id = id; - m_companyName = companyName; - m_contactName = contantName; - m_address = address; - m_city = city; - m_country = country; - } - - public Suppliers() - { - } - - #endregion -} \ No newline at end of file diff --git a/Pages/Word/TrackChanges.cshtml b/Pages/Word/TrackChanges.cshtml deleted file mode 100644 index 8cef395d..00000000 --- a/Pages/Word/TrackChanges.cshtml +++ /dev/null @@ -1,94 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.TrackChanges - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Track Changes : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("trackchanges", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Author Name: - -
-
- - -
- - -
- - -
- - -
-
- -      - -
-
-
- Html.EndForm(); - } - } -
- -} -@section ActionDescription{ -
- This sample demonstrates how to accept or reject the tracked changes in the Word document using Essential DocIO. -
-} -@section Description{ -
- With DocIO, you can accept or reject the tracked changes from an existing Word document (DOCX, DOC). -
    -
  • - You can accept or reject the tracked changes based on author, date, and type of revision. -
  • -
  • - You can accept or reject all the tracked changes in the Word document. -
  • -
-
-
- More information about accepting or rejecting track changes can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Track Changes Example - Syncfusion Demos - } -@section Header{ -

Example of Track Changes in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/TrackChanges.cshtml.cs b/Pages/Word/TrackChanges.cshtml.cs deleted file mode 100644 index 001111f9..00000000 --- a/Pages/Word/TrackChanges.cshtml.cs +++ /dev/null @@ -1,128 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class TrackChanges : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public TrackChanges(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1, string Button, int AuthorName) - { - if (Group1 == null) - return null; - // return View(); - if (Button == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/TrackChangesTemplate.docx"; - string contenttype1 = "application/vnd.ms-word.document.12"; - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - if (Button == "View Template") - return File(fileStream, contenttype1, "TrackChangesTemplate.docx"); - - // Opens a source document. - WordDocument document = new WordDocument(); - document.Open(dataPath, FormatType.Docx); - - string author = GetAuthorName(AuthorName); - - //Accepts the all changes made by the author - if (Group1 == "acceptRadio") - AcceptRevisionsOfAuthor(document, author); - //Rejects the all the changes made by the author - else if (Group1 == "rejectRadio") - RejectRevisionsOfAuthor(document, author); - //Rejects all the tracked changes revisions in the Word document - else if (Group1 == "rejectAllRadio") - document.Revisions.RejectAll(); - //Accepts all the tracked changes revisions in the Word document - else - document.Revisions.AcceptAll(); - - FormatType type = FormatType.Docx; - string filename = "Track Changes.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - - #endregion Document SaveOption - - } - /// - /// Rejects the all changes made by the author - /// - private void RejectRevisionsOfAuthor(WordDocument document, string author) - { - //Iterate into all the revisions in Word document - for (int i = document.Revisions.Count - 1; i >= 0; i--) - { - //Checks the author of current revision and rejects it. - if (document.Revisions[i].Author == author) - document.Revisions[i].Reject(); - - //Reset to last item when reject the moving related revisions. - if (i > document.Revisions.Count - 1) - i = document.Revisions.Count; - } - } - /// - /// Accepts the all changes made by the author - /// - private void AcceptRevisionsOfAuthor(WordDocument document, string author) - { - //Iterate into all the revisions in Word document - for (int i = document.Revisions.Count - 1; i >= 0; i--) - { - //Checks the author of current revision and rejects it. - if (document.Revisions[i].Author == author) - document.Revisions[i].Accept(); - - //Reset to last item when accept the moving related revisions. - if (i > document.Revisions.Count - 1) - i = document.Revisions.Count; - } - } - /// - /// Gets the author name - /// - private string GetAuthorName(int selectedIndex) - { - switch (selectedIndex) - { - case 1: - return "Nancy Davolio"; - case 2: - return "Steven Buchanan"; - case 3: - return "Stanley Hudson"; - case 4: - return "Andrew Fuller"; - } - return string.Empty; - } -} \ No newline at end of file diff --git a/Pages/Word/UpdateFields.cshtml b/Pages/Word/UpdateFields.cshtml deleted file mode 100644 index 1eee3ef3..00000000 --- a/Pages/Word/UpdateFields.cshtml +++ /dev/null @@ -1,67 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.UpdateFields - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Update Fields : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("updatefields", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
- -
-
-
- Save As : - - -   - - -   - - -
-
-
- -   - -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to update the fields available in the Word document using Essential DocIO. Here, in the example, merge fields and formula fields are used together to populate the net profit or loss. -
-} -@section Description{ -
- Fields in a Word document are like placeholders where the data can be populated or calculated dynamically based on various factors. Most commonly used fields are merge fields, Table of contents (TOC), page number related fields, IF fields, date fields etc. -
-
- Another example: IF field compares two values and then inserts the text appropriate to the rest of the comparison. When used in a mail merge, the field can examine information in the merged data records, and populate appropriate text. -
-
- More information about the fields and updating fields can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Update Fields Example - Syncfusion Demos - } -@section Header{ -

Example of Update Fields in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/UpdateFields.cshtml.cs b/Pages/Word/UpdateFields.cshtml.cs deleted file mode 100644 index 0ddcd945..00000000 --- a/Pages/Word/UpdateFields.cshtml.cs +++ /dev/null @@ -1,341 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; -using System.Xml; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class UpdateFields : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public UpdateFields(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1, string Button, string UnlinkFields) - { - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/TemplateUpdateFields.docx"; - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - if (Group1 == null) - return null; - // return View(); - string contenttype1 = "application/vnd.ms-word.document.12"; - if (Button == "View Template") - { - return File(fileStream, contenttype1, "TemplateUpdateFields.docx"); - } - - //Loads the template document. - string dataPathField = basePath + @"/Word/TemplateUpdateFields.docx"; - FileStream fileStreamField = new FileStream(dataPathField, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - WordDocument document = new WordDocument(fileStreamField, FormatType.Docx); - fileStreamField.Dispose(); - fileStreamField = null; - - //Create MailMergeDataTable - MailMergeDataTable mailMergeDataTableStock = GetMailMergeDataTableStock(); - // Execute Mail Merge with groups. - document.MailMerge.ExecuteGroup(mailMergeDataTableStock); - - //Update fields in the document. - document.UpdateDocumentFields(); - - //Unlink the fields in Word document when UnlinkFields is enable. - if (UnlinkFields == "UnlinkFields") - UnlinkFieldsInDocument(document); - - FormatType type = FormatType.Docx; - string filename = "Update Fields.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "Update Fields.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "Update Fields.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - - /// - /// Iterates to document elements and get fields. - /// - /// Input Word document. - /// Type of the field to find in document. - private void UnlinkFieldsInDocument(WordDocument document) - { - //Iterates each section and get the tables. - foreach (WSection section in document.Sections) - { - RemoveFieldCodesInTextBody(section.Body); - } - } - - /// - /// Iterates into body items. - /// - private void RemoveFieldCodesInTextBody(WTextBody textBody) - { - for (int i = 0; i < textBody.ChildEntities.Count; i++) - { - //IEntity is the basic unit in DocIO DOM. - IEntity bodyItemEntity = textBody.ChildEntities[i]; - - //A Text body has 3 types of elements - Paragraph, Table, and Block Content Control - //Decides the element type by using EntityType - switch (bodyItemEntity.EntityType) - { - case EntityType.Paragraph: - WParagraph paragraph = bodyItemEntity as WParagraph; - //Iterates into paragraph items. - RemoveFieldCodesInParagraph(paragraph.Items); - break; - - case EntityType.Table: - //Table is a collection of rows and cells - //Iterates through table's DOM - RemoveFieldCodesInTable(bodyItemEntity as WTable); - break; - - case EntityType.BlockContentControl: - BlockContentControl blockContentControl = bodyItemEntity as BlockContentControl; - //Iterates to the body items of Block Content Control. - RemoveFieldCodesInTextBody(blockContentControl.TextBody); - break; - } - } - } - - /// - /// Iterates into paragraph items. - /// - /// The paragraph. - /// Type of field. - private void RemoveFieldCodesInParagraph(ParagraphItemCollection paraItems) - { - for (int i = 0; i < paraItems.Count; i++) - { - if (paraItems[i] is WField) - { - WField field = paraItems[i] as WField; - field.Unlink(); - } - else if (paraItems[i] is WTextBox) - { - //If paragraph item is textbox, iterates into textbody of textbox. - WTextBox textBox = paraItems[i] as WTextBox; - RemoveFieldCodesInTextBody(textBox.TextBoxBody); - } - else if (paraItems[i] is Shape) - { - //If paragraph item is shape, iterates into textbody of shape. - Shape shape = paraItems[i] as Shape; - RemoveFieldCodesInTextBody(shape.TextBody); - } - else if (paraItems[i] is InlineContentControl) - { - //If paragraph item is inline content control, iterates into its item. - InlineContentControl inlineContentControl = paraItems[i] as InlineContentControl; - RemoveFieldCodesInParagraph(inlineContentControl.ParagraphItems); - } - } - } - - /// - /// Iterates into table. - /// - /// The table. - /// Type of Field. - private void RemoveFieldCodesInTable(WTable table) - { - //Iterates the row collection in a table - foreach (WTableRow row in table.Rows) - { - //Iterates the cell collection in a table row - foreach (WTableCell cell in row.Cells) - { - RemoveFieldCodesInTextBody(cell); - } - } - } - - /// - /// Gets the mail merge data table. - /// - private MailMergeDataTable GetMailMergeDataTableStock() - { - List stockDetails = new List(); - FileStream fs = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/StockDetails.xml", FileMode.Open, - FileAccess.Read); - XmlReader reader = XmlReader.Create(fs); - if (reader == null) - throw new Exception("reader"); - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - if (reader.LocalName != "StockMarket") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - reader.Read(); - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - while (reader.LocalName != "StockMarket") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "StockDetails": - stockDetails.Add(GetStockDetails(reader)); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "StockMarket") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - MailMergeDataTable dataTable = new MailMergeDataTable("StockDetails", stockDetails); - reader.Dispose(); - fs.Dispose(); - return dataTable; - } - - /// - /// Gets the StockDetails. - /// - /// The reader. - - private StockDetails GetStockDetails(XmlReader reader) - { - if (reader == null) - throw new Exception("reader"); - while (reader.NodeType != XmlNodeType.Element) - reader.Read(); - if (reader.LocalName != "StockDetails") - throw new XmlException("Unexpected xml tag " + reader.LocalName); - reader.Read(); - while (reader.NodeType == XmlNodeType.Whitespace) - reader.Read(); - StockDetails stockDetails = new StockDetails(); - while (reader.LocalName != "StockDetails") - { - if (reader.NodeType == XmlNodeType.Element) - { - switch (reader.LocalName) - { - case "TradeNo": - stockDetails.TradeNo = reader.ReadElementContentAsString(); - break; - case "CompanyName": - stockDetails.CompanyName = reader.ReadElementContentAsString(); - break; - case "CostPrice": - stockDetails.CostPrice = reader.ReadElementContentAsString(); - break; - case "SharesCount": - stockDetails.SharesCount = reader.ReadElementContentAsString(); - break; - case "SalesPrice": - stockDetails.SalesPrice = reader.ReadElementContentAsString(); - break; - - default: - reader.Skip(); - break; - } - } - else - { - reader.Read(); - if ((reader.LocalName == "StockDetails") && reader.NodeType == XmlNodeType.EndElement) - break; - } - } - - return stockDetails; - } -} - -public class StockDetails -{ - #region Fields - private string m_tradeNo; - private string m_companyName; - private string m_costPrice; - private string m_sharesCount; - private string m_salesPrice; - #endregion - #region Properties - public string TradeNo - { - get { return m_tradeNo; } - set { m_tradeNo = value; } - } - public string CompanyName - { - get { return m_companyName; } - set { m_companyName = value; } - } - public string CostPrice - { - get { return m_costPrice; } - set { m_costPrice = value; } - } - public string SharesCount - { - get { return m_sharesCount; } - set { m_sharesCount = value; } - } - public string SalesPrice - { - get { return m_salesPrice; } - set { m_salesPrice = value; } - } - - #endregion - #region Constructor - public StockDetails(string tradeNo, string companyName, string costPrice, string sharesCount, string salesPrice) - { - m_tradeNo = tradeNo; - m_companyName = companyName; - m_costPrice = costPrice; - m_sharesCount = sharesCount; - m_salesPrice = salesPrice; - } - public StockDetails() - { } - #endregion -} \ No newline at end of file diff --git a/Pages/Word/Watermark.cshtml b/Pages/Word/Watermark.cshtml deleted file mode 100644 index c404d5b8..00000000 --- a/Pages/Word/Watermark.cshtml +++ /dev/null @@ -1,65 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.Watermark - -@using Syncfusion.EJ2 -@{ var Title = " Essential DocIO (Word) : Watermark : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("watermark", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Watermark : - - -   - - -
-
- Save As : - - -   - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Generate Document").Render() -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to insert text and picture watermark into the Word document using Essential DocIO. -
-} -@section Description{ -
- Watermark will be displayed behind the document content and usually it shows the trademark, copyright or ownership details of the document. With the help of DocIO, you can add and modify the text and image watermarks in the Word document. -
-
- More information about the watermarks can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Watermark Example - Syncfusion Demos - } -@section Header{ -

Example of Watermark in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/Watermark.cshtml.cs b/Pages/Word/Watermark.cshtml.cs deleted file mode 100644 index 1ad44d91..00000000 --- a/Pages/Word/Watermark.cshtml.cs +++ /dev/null @@ -1,100 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class Watermark : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public Watermark(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public ActionResult OnPost(string Group1, string Group2) - { - if (Group2 == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - string dataPath = basePath + @"/Word/Watermark.doc"; - //Open an existing word document - FileStream fileStream = new FileStream(dataPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - WordDocument doc = new WordDocument(fileStream, FormatType.Doc); - fileStream.Dispose(); - fileStream = null; - - if (Group2 != "Picture") - { - //Add text watermark. - TextWatermark textWatermark = new TextWatermark("Demo", "Arial", 160, 160); - doc.Watermark = textWatermark; - - //Set the color for the watermark text. - textWatermark.Color = Syncfusion.Drawing.Color.Gray; - - //Set the size. - textWatermark.Size = 120; - } - else - { - //Add Picture watermark to the word document. - PictureWatermark picWatermark = new PictureWatermark(); - doc.Watermark = picWatermark; - - FileStream imageStream = new FileStream(basePath + @"/images/Word/Northwind_logo.png", FileMode.Open, - FileAccess.Read); - BinaryReader br = new BinaryReader(imageStream); - byte[] image = br.ReadBytes((int)imageStream.Length); - - //Set the picture. - picWatermark.LoadPicture(image); - //Set the properties for the watermark. - picWatermark.Scaling = 100.0f; - picWatermark.Washout = false; - } - - FormatType type = FormatType.Docx; - string filename = "Watermark.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "Watermark.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "Watermark.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - doc.Save(ms, type); - doc.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } -} \ No newline at end of file diff --git a/Pages/Word/WordMLToWord.cshtml b/Pages/Word/WordMLToWord.cshtml deleted file mode 100644 index af6f4551..00000000 --- a/Pages/Word/WordMLToWord.cshtml +++ /dev/null @@ -1,62 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.WordMLToWord - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Import, Word XML To Word, Conversion : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("wordmltoword", "word", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- Select Document : - @Html.TextBox("file", "", new { type = "file", accept = ".xml" }) -
-
- Save As : - - -   - - -
-
-
- @Html.EJS().Button("createbtn").Content("Convert to Word").Render() -
-
- @Model.Message -
-
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to convert the Word processing XML to Word document using Essential DocIO. -
-} -@section Description{ -
- DocIO provides support to convert the Word processing 2003 XML and Word processing XML document to Word document. -
-
- More information about WordML conversion can be found on this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - WordML to Word Example - Syncfusion Demos - } -@section Header{ -

Example of WordML to Word in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/WordMLToWord.cshtml.cs b/Pages/Word/WordMLToWord.cshtml.cs deleted file mode 100644 index 5f1a4599..00000000 --- a/Pages/Word/WordMLToWord.cshtml.cs +++ /dev/null @@ -1,82 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class WordMLToWord : PageModel -{ - public void OnGet() - { - - } - - public string Message { get; set; } - - public ActionResult OnPost(string Group1) - { - if (Group1 == null) - return null; - // return View(); - if (Request.Form.Files != null) - { - var extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - if (extension == ".xml") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - WordDocument document = new WordDocument(stream, FormatType.WordML); - stream.Dispose(); - stream = null; - FormatType type = FormatType.Docx; - string filename = "WordMLToWord.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - #region Document SaveOption - - //Save as .doc format - if (Group1 == "WordDoc") - { - type = FormatType.Doc; - filename = "WordMLToWord.doc"; - contenttype = "application/msword"; - } - //Save as .xml format - else if (Group1 == "WordML") - { - type = FormatType.WordML; - filename = "WordMLToWord.xml"; - contenttype = "application/msword"; - } - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - else - { - Message = string.Format("Please choose WordML document to convert to Word Document"); - } - } - else - { - Message = - string.Format("Browse a WordML document and then click the button to convert as a Word document"); - } - - return null; - // return View(); - } -} \ No newline at end of file diff --git a/Pages/Word/WordToHTML.cshtml b/Pages/Word/WordToHTML.cshtml deleted file mode 100644 index 6cd20526..00000000 --- a/Pages/Word/WordToHTML.cshtml +++ /dev/null @@ -1,75 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.WordToHTML - -@using Syncfusion.EJ2 -@{var Title = "Essential DocIO (Word) : Word to HTML : Syncfusion";} -@section ControlsSection{ -
- @{ - Html.BeginForm("wordtohtml", "word", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view the generated HTML file converted from a Word document using the .NET Word Library (DocIO). -
-
- - - -
-
-
-
- -
- @Model.Message -
-
-
- Html.EndForm(); - } - } -
-} - - - -@section ActionDescription{ -
- This sample demonstrates how to convert a Word document to HTML using .NET Word Library (DocIO). -
-} -@section Description{ -
- The .NET Word Library (DocIO) supports converting Word documents to HTML and vice versa. -
    -
  • Customize image saving to save locally or upload to cloud storage.
  • -
  • Export text form fields as editable fields or plain text.
  • -
  • Option to generate HTML with body content only.
  • -
-
-
- More information about Word to HTML conversion and vice versa can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Word to HTML Example - Syncfusion Demos - } -@section Header{ -

Example of Word to HTML conversion in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/WordToHTML.cshtml.cs b/Pages/Word/WordToHTML.cshtml.cs deleted file mode 100644 index 98189905..00000000 --- a/Pages/Word/WordToHTML.cshtml.cs +++ /dev/null @@ -1,95 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc; -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; - -namespace EJ2CoreSampleBrowser.Pages.Word; -public class WordToHTML : PageModel -{ - private readonly IWebHostEnvironment _hostingEnvironment; - public WordToHTML(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public void OnGet() - { - - } - public string Message { get; set; } - public ActionResult OnPost(string button) - { - if (button == null) - return null; - //return View(); - Stream stream = GetWordDocumentForHTMLConversion(); - - if (stream != null) - { - try - { - string output = (Request.Form.Files != null && Request.Form.Files.Count != 0) ? Path.GetFileNameWithoutExtension(Request.Form.Files[0].FileName) : "WordToHTML"; - - //Opens an existing document from file system through constructor of WordDocument class - using (WordDocument document = new WordDocument(stream, FormatType.Automatic)) - { - FormatType type = FormatType.Html; - string filename = output + ".html"; - string contenttype = "application/html"; - - //Saves the Word document to MemoryStream - MemoryStream outputStream = new MemoryStream(); - document.Save(outputStream, type); - document.Close(); - outputStream.Position = 0; - return File(outputStream, contenttype, filename); - } - } - catch - { - Message = string.Format("The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - return null; - } - } - return null; - //return View(); - } - - /// - /// Gets Word document for HTML Conversion - /// - /// - private Stream GetWordDocumentForHTMLConversion() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".doc" || extension == ".docx") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - Message = string.Format("Please choose Word format document to convert to HTML"); - return null; - } - } - else - { - //Opens an existing document from stream through constructor of `WordDocument` class - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/WordToHTML.docx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } -} \ No newline at end of file diff --git a/Pages/Word/WordToImage.cshtml b/Pages/Word/WordToImage.cshtml deleted file mode 100644 index bae6ebca..00000000 --- a/Pages/Word/WordToImage.cshtml +++ /dev/null @@ -1,111 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.WordToImage - -@using Syncfusion.EJ2 -@using Syncfusion.EJ2.DropDowns -@{ var Title = "Essential DocIO (Word) : Word To Image : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("wordtoimage", "word", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view the resultant image being converted from Word document using the .NET Word Library (DocIO). -
-
- - - -
-
-
- - -
- - -
- - -
-
-
- -
-
- @Model.Message -
-
-
-
- Html.EndForm(); - } - } -
- -} - - -@section ActionDescription{ -
- This sample illustrates how to convert Word document to image using .NET Word Library (DocIO). -
-} -@section Description{ -
- DocIO provides support to render Word document from flow to fixed page model and export as Image. With this support to render Word document, -
    -
  • - You can generate invoice and other reports in image, starting from Word document. -
  • -
  • - You can view or print the contents of Word document by converting as image. -
  • -
  • - You can save a page of the document as thumbnail image for reference. -
  • -
-
-
- More information about Word to Image conversion can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Word to Image Example - Syncfusion Demos - } -@section Header{ -

Example of Word to Image in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/WordToImage.cshtml.cs b/Pages/Word/WordToImage.cshtml.cs deleted file mode 100644 index 0d0768f7..00000000 --- a/Pages/Word/WordToImage.cshtml.cs +++ /dev/null @@ -1,171 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIO.DLS; -using Syncfusion.DocIO; -using Syncfusion.DocIORenderer; -using Syncfusion.Compression.Zip; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class WordToImage : PageModel -{ - - public void OnGet() - { - - } - public string Message { get; set; } - private readonly IWebHostEnvironment _hostingEnvironment; - - public WordToImage(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public IActionResult OnPost(string option, string button, string from, string to) - { - if (button == null) - return null; - // return View(); - Stream stream = GetWordDocumentForImageConversion(); - if (stream != null) - { - try - { - string output = (Request.Form.Files != null && Request.Form.Files.Count != 0) - ? Path.GetFileNameWithoutExtension(Request.Form.Files[0].FileName) - : "WordtoImage"; - - //Loads document from stream. - using (WordDocument document = new WordDocument(stream, FormatType.Automatic)) - { - stream.Dispose(); - stream = null; - - //Creates a new instance of DocIORenderer class. - using (DocIORenderer render = new DocIORenderer()) - { - if (option == "FirstPage") - { - //Converts the first page of Word document to image. - MemoryStream imageStream = - (MemoryStream)document.RenderAsImages(0, Syncfusion.DocIO.ExportImageFormat.Jpeg); - imageStream.Position = 0; - return File(imageStream, "image/jpeg", output + "_Page1.jpeg"); - } - else - { - //Initialize ZipArchive to zip the image files. - ZipArchive zip = new ZipArchive(); - string zipFileName; - Stream[] imageStreams; - - if (option == "SpecificPages") - { - int firstPage = int.Parse(from); - int lastPage = int.Parse(to); - int pageCount = document.BuiltinDocumentProperties.PageCount; - - if (firstPage <= lastPage && firstPage <= pageCount && firstPage > 0) - { - int numberOfPages = lastPage - firstPage + 1; - - //Converts specific page range of Word document to images. - imageStreams = document.RenderAsImages(firstPage - 1, numberOfPages); - - zipFileName = output + "_Pages" + firstPage + "To" + lastPage + ".zip"; - return SaveImagesToZip(zip, output, firstPage, imageStreams, zipFileName); - } - else - { - Message = string.Format("Please enter a valid range of pages."); - } - } - else - { - //Converts all pages in Word document to images. - imageStreams = document.RenderAsImages(); - - zipFileName = output + "_Images.zip"; - return SaveImagesToZip(zip, output, 1, imageStreams, zipFileName); - } - } - } - } - } - catch - { - Message = - string.Format( - "The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - } - } - - return null; - // return View(); - } - - /// - /// Gets Word document for Image Conversion - /// - /// - private Stream GetWordDocumentForImageConversion() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".doc" || extension == ".docx" || extension == ".dot" || extension == ".dotx" || - extension == ".dotm" || extension == ".docm" - || extension == ".xml" || extension == ".rtf") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - Message = string.Format("Please choose Word format document to convert to Image"); - return null; - } - } - else - { - //Opens an existing document from stream through constructor of `WordDocument` class - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/WordtoImage.docx", - FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } - - /// - /// Save the images to zip file - /// - /// - private ActionResult SaveImagesToZip(ZipArchive zip, string output, int firstPage, Stream[] imageStreams, - string zipFileName) - { - foreach (Stream imageStream in imageStreams) - { - string filename = output + "_Page" + firstPage + ".jpeg"; - imageStream.Position = 0; - ZipArchiveItem item = new ZipArchiveItem(zip, filename, imageStream, true, - Syncfusion.Compression.FileAttributes.Compressed); - zip.AddItem(item); - firstPage++; - } - - MemoryStream stream = new MemoryStream(); - zip.Save(stream, true); - return File(stream.ToArray(), "application/zip", zipFileName); - } -} \ No newline at end of file diff --git a/Pages/Word/WordToMarkdown.cshtml b/Pages/Word/WordToMarkdown.cshtml deleted file mode 100644 index 5cbf7d00..00000000 --- a/Pages/Word/WordToMarkdown.cshtml +++ /dev/null @@ -1,82 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.WordToMarkdown - -@using Syncfusion.EJ2 -@{ - var Title = "Essential DocIO (Word) : Export, Word to Markdown, Conversion : Syncfusion"; -} -@section ControlsSection{ -
- @{ - Html.BeginForm("wordtomarkdown", "word", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view the generated Markdown document generated by .NET Word (DocIO) library. -
-
- - - -
-
-
- -
-
- @Model.Message -
-
-
-
- Html.EndForm(); - } - } -
-} - - @section ActionDescription{ -
- This sample demonstrates how to convert the Word document to Markdown using .NET Word (DocIO) library. -
-} - @section Description{ -
- .NET Word (DocIO) library provides support to convert Word document to Markdown. -
    -
  • - You can convert existing Word document or created using .NET Word (DocIO) library to Markdown. -
  • -
  • - You can convert headings, tables, hyperlinks, list, and images from Word document to Markdown. -
  • -
  • - You can customize the image path while exporting as Markdown. -
  • -
-
-
- More information about Word to Markdown conversion can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ -ASP.NET Core Word (DocIO) library - Word to Markdown Example - Syncfusion Demos - } -@section Header{ -

Example of Word to Markdown in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/WordToMarkdown.cshtml.cs b/Pages/Word/WordToMarkdown.cshtml.cs deleted file mode 100644 index ed9dc1cc..00000000 --- a/Pages/Word/WordToMarkdown.cshtml.cs +++ /dev/null @@ -1,90 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class WordToMarkdown : PageModel -{ - public void OnGet() - { - - } - public string Message { get; set; } - private readonly IWebHostEnvironment _hostingEnvironment; - - public WordToMarkdown(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public ActionResult OnPost(string button) - { - if (button == null) - return null; - // return View(); - Stream stream = GetWordDocumentForConversion(); - if (stream != null) - { - try - { - string output = (Request.Form.Files != null && Request.Form.Files.Count != 0) ? Path.GetFileNameWithoutExtension(Request.Form.Files[0].FileName) : "WordtoMD"; - WordDocument document = new WordDocument(stream, FormatType.Automatic); - #region Document SaveOption - //Save as .md format - FormatType type = FormatType.Markdown; - string contenttype = "application/msword"; - - #endregion Document SaveOption - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, output + ".md"); - - } - catch - { - Message = string.Format("The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - } - } - - return null; - // return View(); - } - private Stream GetWordDocumentForConversion() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".doc" || extension == ".docx" || extension == ".dot" || extension == ".dotx" || extension == ".dotm" || extension == ".docm" - || extension == ".xml" || extension == ".rtf") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - Message = string.Format("Please choose Word format document to convert to Markdown"); - return null; - } - } - else - { - //Opens an existing document from stream through constructor of `WordDocument` class - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/WordtoMD.docx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } -} \ No newline at end of file diff --git a/Pages/Word/WordToPDF.cshtml b/Pages/Word/WordToPDF.cshtml deleted file mode 100644 index facc8ae9..00000000 --- a/Pages/Word/WordToPDF.cshtml +++ /dev/null @@ -1,101 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.WordToPDF - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Word To PDF : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("wordtopdf", "word", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view the resultant PDF document being converted from Word document using Essential DocIO and Essential PDF. Please note that PDF viewer is required to view the resultant PDF. -
-
- - - -
-
-
- PDF Options -
- - -
- - -
- - -
- - -
-
- -
-
- @Model.Message -
-
-
-
- Html.EndForm(); - } - } -
- -} - - -@section ActionDescription{ -
- This sample illustrates how to convert Word document to PDF using Essential DocIO and Essential PDF. -
-} -@section Description{ -
- DocIO provides support to render Word document from flow to fixed page model and export as PDF or Image. With this support to render Word document, -
    -
  • - You can generate invoice and other reports in PDF, starting from Word document. -
  • -
  • - You can view or print the contents of Word document by converting as PDF and loading generated PDF via PDF viewer. -
  • -
-
-
- More information about Word to PDF conversion can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Word to PDF Example - Syncfusion Demos - } -@section Header{ -

Example of Word to PDF in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/WordToPDF.cshtml.cs b/Pages/Word/WordToPDF.cshtml.cs deleted file mode 100644 index ef6e62eb..00000000 --- a/Pages/Word/WordToPDF.cshtml.cs +++ /dev/null @@ -1,132 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIO.DLS; -using Syncfusion.DocIO; -using Syncfusion.DocIORenderer; -using Syncfusion.Pdf; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class WordToPDF : PageModel -{ - public string Message { get; set; } - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public WordToPDF(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public IActionResult OnPost(string button, string renderingMode1, string renderingMode2, string renderingMode3, - string renderingMode4) - { - if (button == null) - return null; - // return View(); - Stream stream = GetWordDocument(); - if (stream != null) - { - try - { - string output = (Request.Form.Files != null && Request.Form.Files.Count != 0) - ? Path.GetFileNameWithoutExtension(Request.Form.Files[0].FileName) - : "WordtoPDF"; - // Loads document from stream. - WordDocument document = new WordDocument(stream, FormatType.Automatic); - stream.Dispose(); - stream = null; - // Creates a new instance of DocIORenderer class. - DocIORenderer render = new DocIORenderer(); - if (renderingMode1 == "PreserveFormFields") - render.Settings.PreserveFormFields = true; - render.Settings.ExportBookmarks = renderingMode2 == "PreserveWordHeadingsToPDFBookmarks" - ? Syncfusion.DocIO.ExportBookmarkType.Headings - : Syncfusion.DocIO.ExportBookmarkType.Bookmarks; - if (renderingMode3 == "ShowRevisions") - { - //Enables to show the revision marks in the generated PDF for tracked changes or revisions in the Word document. - document.RevisionOptions.ShowMarkup = - RevisionType.Deletions | RevisionType.Formatting | RevisionType.Insertions; - // Set revision bars color as Black. - document.RevisionOptions.RevisionBarsColor = RevisionColor.Black; - // Set revised properties (Formatting) color as Blue. - document.RevisionOptions.RevisedPropertiesColor = RevisionColor.Blue; - // Set deleted text (Deletions) color as Yellow. - document.RevisionOptions.DeletedTextColor = RevisionColor.Yellow; - // Set inserted text (Insertions) color as Pink. - document.RevisionOptions.InsertedTextColor = RevisionColor.Pink; - } - - if (renderingMode4 == "ShowComments") - { - //Sets ShowInBalloons to render a document comments in converted PDF document. - document.RevisionOptions.CommentDisplayMode = CommentDisplayMode.ShowInBalloons; - //Sets the color to be used for Comment Balloon - document.RevisionOptions.CommentColor = RevisionColor.Blue; - } - - // Converts Word document into PDF document. - PdfDocument pdf = render.ConvertToPDF(document); - MemoryStream memoryStream = new MemoryStream(); - // Save the PDF document. - pdf.Save(memoryStream); - render.Dispose(); - pdf.Close(); - document.Close(); - memoryStream.Position = 0; - return File(memoryStream, "application/pdf", output + ".pdf"); - } - catch - { - Message = - string.Format( - "The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - } - } - - return null; - // return View(); - } - - private Stream GetWordDocument() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".doc" || extension == ".docx" || extension == ".dot" || extension == ".dotx" || - extension == ".dotm" || extension == ".docm" - || extension == ".xml" || extension == ".rtf") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - Message = string.Format("Please choose Word format document to convert to PDF"); - return null; - } - } - else - { - //Opens an existing document from stream through constructor of `WordDocument` class - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/WordtoPDF.docx", - FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } -} \ No newline at end of file diff --git a/Pages/Word/WordToPDFA.cshtml b/Pages/Word/WordToPDFA.cshtml deleted file mode 100644 index f29295e1..00000000 --- a/Pages/Word/WordToPDFA.cshtml +++ /dev/null @@ -1,67 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.WordToPDFA - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Word To PDF/A : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("wordtopdfa", "word", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view the generated PDF/A document being converted from Word document using .NET Word (DocIO) library and .NET PDF library. Please note that PDF viewer is required to view the resultant PDF. -
-
- - - -
-
-
- -
-
- @Model.Message -
-
-
-
- Html.EndForm(); - } - } -
- -} - - -@section ActionDescription{ -
- This sample demonstrates how to convert a Word document to PDF/A using .NET Word (DocIO) library and .NET PDF library. -
-} -@section Description{ -
- This feature can be used for long term archiving and standardization. More information about converting Word document to PDF with conformance can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Word to PDF/A Example - Syncfusion Demos - } -@section Header{ -

Example of Word to PDF/A in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/WordToPDFA.cshtml.cs b/Pages/Word/WordToPDFA.cshtml.cs deleted file mode 100644 index d7620dc1..00000000 --- a/Pages/Word/WordToPDFA.cshtml.cs +++ /dev/null @@ -1,102 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIO.DLS; -using Syncfusion.DocIO; -using Syncfusion.DocIORenderer; -using Syncfusion.Pdf; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class WordToPDFA : PageModel -{ - public string Message { get; set; } - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public WordToPDFA(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public IActionResult OnPost(string button) - { - if (button == null) - return null; - // return View(); - Stream stream = GetWordDocument(); - if (stream != null) - { - try - { - string output = (Request.Form.Files != null && Request.Form.Files.Count != 0) - ? Path.GetFileNameWithoutExtension(Request.Form.Files[0].FileName) - : "WordtoPDF_Pdf_A3A"; - // Loads document from stream. - WordDocument document = new WordDocument(stream, FormatType.Automatic); - stream.Dispose(); - stream = null; - // Creates a new instance of DocIORenderer class. - DocIORenderer render = new DocIORenderer(); - //Set the conformance for PDF/A3A conversion. - render.Settings.PdfConformanceLevel = PdfConformanceLevel.Pdf_A3A; - // Converts Word document into PDF document. - PdfDocument pdf = render.ConvertToPDF(document); - MemoryStream memoryStream = new MemoryStream(); - // Save the PDF document. - pdf.Save(memoryStream); - render.Dispose(); - pdf.Close(); - document.Close(); - memoryStream.Position = 0; - return File(memoryStream, "application/pdf", output + ".pdf"); - } - catch - { - Message = - string.Format( - "The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - } - } - - return null; - // return View(); - } - private Stream GetWordDocument() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".doc" || extension == ".docx" || extension == ".dot" || extension == ".dotx" || extension == ".dotm" || extension == ".docm" - || extension == ".xml" || extension == ".rtf") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - Message = string.Format("Please choose Word format document to convert to PDF"); - return null; - } - } - else - { - //Opens an existing document from stream through constructor of `WordDocument` class - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/WordtoPDF.docx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } -} \ No newline at end of file diff --git a/Pages/Word/WordToPDFUA.cshtml b/Pages/Word/WordToPDFUA.cshtml deleted file mode 100644 index 0cd09957..00000000 --- a/Pages/Word/WordToPDFUA.cshtml +++ /dev/null @@ -1,67 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.WordToPDFUA - -@using Syncfusion.EJ2 -@{var Title = " Essential DocIO (Word) : Word To PDF/UA : Syncfusion";} -@section ControlsSection{ -
- @{Html.BeginForm("wordtopdfua", "word", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view the generated PDF/UA document being converted from Word document using .NET Word (DocIO) library and .NET PDF library. Please note that PDF viewer is required to view the resultant PDF. -
-
- - - -
-
-
- -
-
- @Model.Message -
-
-
-
- Html.EndForm(); - } - } -
- -} - - -@section ActionDescription{ -
- This sample demonstrates how to convert a Word document to PDF/UA (Section 508 compliant) using .NET Word (DocIO) library and .NET PDF library. -
-} -@section Description{ -
- This feature is used for people who require assistive technologies when the electronic content is ready. The .NET Word (DocIO) library supports converting a Word document to a tagged PDF with Section 508 compliant. For more information about Word to PDF/UA, see this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Word to PDF/UA Example - Syncfusion Demos - } -@section Header{ -

Example of Word to PDF/UA in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/WordToPDFUA.cshtml.cs b/Pages/Word/WordToPDFUA.cshtml.cs deleted file mode 100644 index 52f52e1e..00000000 --- a/Pages/Word/WordToPDFUA.cshtml.cs +++ /dev/null @@ -1,102 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIO.DLS; -using Syncfusion.DocIO; -using Syncfusion.DocIORenderer; -using Syncfusion.Pdf; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class WordToPDFUA : PageModel -{ - public string Message { get; set; } - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - - public WordToPDFUA(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public IActionResult OnPost(string button) - { - if (button == null) - return null; - // return View(); - Stream stream = GetWordDocument(); - if (stream != null) - { - try - { - string output = (Request.Form.Files != null && Request.Form.Files.Count != 0) - ? Path.GetFileNameWithoutExtension(Request.Form.Files[0].FileName) - : "WordtoPDF_Pdf_UA"; - // Loads document from stream. - WordDocument document = new WordDocument(stream, FormatType.Automatic); - stream.Dispose(); - stream = null; - // Creates a new instance of DocIORenderer class. - DocIORenderer render = new DocIORenderer(); - //Sets true to preserve document structured tags in the converted PDF document. - render.Settings.AutoTag = true; - // Converts Word document into PDF document. - PdfDocument pdf = render.ConvertToPDF(document); - MemoryStream memoryStream = new MemoryStream(); - // Save the PDF document. - pdf.Save(memoryStream); - render.Dispose(); - pdf.Close(); - document.Close(); - memoryStream.Position = 0; - return File(memoryStream, "application/pdf", output + ".pdf"); - } - catch - { - Message = - string.Format( - "The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - } - } - - return null; - // return View(); - } - private Stream GetWordDocument() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".doc" || extension == ".docx" || extension == ".dot" || extension == ".dotx" || extension == ".dotm" || extension == ".docm" - || extension == ".xml" || extension == ".rtf") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - Message = string.Format("Please choose Word format document to convert to PDF"); - return null; - } - } - else - { - //Opens an existing document from stream through constructor of `WordDocument` class - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/WordtoPDF.docx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } -} \ No newline at end of file diff --git a/Pages/Word/WordToRTF.cshtml b/Pages/Word/WordToRTF.cshtml deleted file mode 100644 index 5092349c..00000000 --- a/Pages/Word/WordToRTF.cshtml +++ /dev/null @@ -1,70 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.WordToRTF - -@using Syncfusion.EJ2 -@{var Title = "Essential DocIO (Word) : Word to RTF : Syncfusion";} -@section ControlsSection{ -
- @{ - Html.BeginForm("wordtortf", "word", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view the generated RTF document converted from a Word document using the .NET Word Library (DocIO). Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
-
- - - -
-
-
-
- -
- @Model.Message -
-
-
- Html.EndForm(); - } - } -
-} - - - -@section ActionDescription{ -
- This sample demonstrates how to convert a Word document to an RTF file using .NET Word Library (DocIO). -
-} -@section Description{ -
- .NET Word Library (DocIO) provides support to convert the Word document to RTF file and vice versa. -
-
- More information about Word to RTF and vice versa can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Word to RTF Example - Syncfusion Demos - } -@section Header{ -

Example of Word to RTF conversion in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/WordToRTF.cshtml.cs b/Pages/Word/WordToRTF.cshtml.cs deleted file mode 100644 index eb28d1ee..00000000 --- a/Pages/Word/WordToRTF.cshtml.cs +++ /dev/null @@ -1,96 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using System.IO; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; -public partial class WordToRTF : PageModel -{ - private readonly IWebHostEnvironment _hostingEnvironment; - public WordToRTF(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public void OnGet() - { - - } - public string Message { get; set; } - public ActionResult OnPost(string button) - { - if (button == null) - return null; - //return View(); - Stream stream = GetWordDocumentForRTFConversion(); - - if (stream != null) - { - try - { - string output = (Request.Form.Files != null && Request.Form.Files.Count != 0) ? Path.GetFileNameWithoutExtension(Request.Form.Files[0].FileName) : "WordtoRTF"; - - //Opens an existing document from file system through constructor of WordDocument class - using (WordDocument document = new WordDocument(stream, FormatType.Automatic)) - { - FormatType type = FormatType.Rtf; - string filename = output + ".rtf"; - string contenttype = "application/vnd.ms-word.document.12"; - - //Saves the Word document to MemoryStream - MemoryStream outputStream = new MemoryStream(); - document.Save(outputStream, type); - document.Close(); - outputStream.Position = 0; - return File(outputStream, contenttype, filename); - } - } - catch - { - Message = string.Format("The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - return null; - } - } - return null; - //return View(); - } - - /// - /// Gets Word document for RTF Conversion - /// - /// - private Stream GetWordDocumentForRTFConversion() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".doc" || extension == ".docx") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - Message = string.Format("Please choose Word format document to convert to RTF"); - return null; - } - } - else - { - //Opens an existing document from stream through constructor of `WordDocument` class - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/WordtoRTF.docx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } -} \ No newline at end of file diff --git a/Pages/Word/WordToTXT.cshtml b/Pages/Word/WordToTXT.cshtml deleted file mode 100644 index 14e3c81a..00000000 --- a/Pages/Word/WordToTXT.cshtml +++ /dev/null @@ -1,70 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.WordToTXT - -@using Syncfusion.EJ2 -@{var Title = "Essential DocIO (Word) : Word to TXT : Syncfusion";} -@section ControlsSection{ -
- @{ - Html.BeginForm("wordtotxt", "word", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view the generated text file converted from a Word document using the .NET Word Library (DocIO). -
-
- - - -
-
-
-
- -
- @Model.Message -
-
-
- Html.EndForm(); - } - } -
-} - - - -@section ActionDescription{ -
- This sample demonstrates how to convert a Word document to a text file using the .NET Word Library (DocIO). -
-} -@section Description{ -
- The .NET Word Library (DocIO) supports converting a Word document to a TXT file and vice versa. -
-
- More information about Word to TXT conversion can be found on this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Word to TXT Example - Syncfusion Demos - } -@section Header{ -

Example of Word to TXT conversion in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/WordToTXT.cshtml.cs b/Pages/Word/WordToTXT.cshtml.cs deleted file mode 100644 index 866904e1..00000000 --- a/Pages/Word/WordToTXT.cshtml.cs +++ /dev/null @@ -1,96 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using System.IO; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; -public partial class WordToTXT : PageModel -{ - private readonly IWebHostEnvironment _hostingEnvironment; - public WordToTXT(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - public void OnGet() - { - - } - public string Message { get; set; } - public ActionResult OnPost(string button) - { - if (button == null) - return null; - //return View(); - Stream stream = GetWordDocumentForTXTConversion(); - - if (stream != null) - { - try - { - string output = (Request.Form.Files != null && Request.Form.Files.Count != 0) ? Path.GetFileNameWithoutExtension(Request.Form.Files[0].FileName) : "WordtoTXT"; - - //Opens an existing document from file system through constructor of WordDocument class - using (WordDocument document = new WordDocument(stream, FormatType.Automatic)) - { - FormatType type = FormatType.Txt; - string filename = output + ".txt"; - string contenttype = "text/plain"; - - //Saves the Word document to MemoryStream - MemoryStream outputStream = new MemoryStream(); - document.Save(outputStream, type); - document.Close(); - outputStream.Position = 0; - return File(outputStream, contenttype, filename); - } - } - catch - { - Message = string.Format("The input document could not be processed completely, Could you please email the document to support@syncfusion.com for troubleshooting."); - return null; - } - } - return null; - //return View(); - } - - /// - /// Gets Word document for TXT Conversion - /// - /// - private Stream GetWordDocumentForTXTConversion() - { - if (Request.Form.Files != null && Request.Form.Files.Count != 0) - { - // Gets the extension from file. - string extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - - // Compares extension with supported extensions. - if (extension == ".doc" || extension == ".docx") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - return stream; - } - else - { - Message = string.Format("Please choose Word format document to convert to TXT"); - return null; - } - } - else - { - //Opens an existing document from stream through constructor of `WordDocument` class - FileStream fileStreamPath = new FileStream(_hostingEnvironment.WebRootPath + @"/Word/WordToTXT.docx", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return fileStreamPath; - } - } -} \ No newline at end of file diff --git a/Pages/Word/WordToWordML.cshtml b/Pages/Word/WordToWordML.cshtml deleted file mode 100644 index 02f5c59e..00000000 --- a/Pages/Word/WordToWordML.cshtml +++ /dev/null @@ -1,54 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.WordToWordML - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : Export, Word to Word XML, Conversion : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("wordtowordml", "word", FormMethod.Post, new { enctype = "multipart/form-data" }); - { -
- Click the button to view the resultant WordML document generated by Essential DocIO. -
-
- Select Document : - @Html.TextBox("file", "", new { type = "file", accept = ".doc,.docx,.rtf,.dot,.dotm,.dotx,docm,.xml" }) -
-
-
- -
-
- @Model.Message -
-
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to convert the Word document to Word processing XML using Essential DocIO. -
-} -@section Description{ -
- DocIO provides support to convert the Word document to Word processing XML document and vice versa. -
-
- More information about WordML conversion can be found on this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - Word to WordML Example - Syncfusion Demos - } -@section Header{ -

Example of Word to WordML in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/WordToWordML.cshtml.cs b/Pages/Word/WordToWordML.cshtml.cs deleted file mode 100644 index c2e71137..00000000 --- a/Pages/Word/WordToWordML.cshtml.cs +++ /dev/null @@ -1,82 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Microsoft.AspNetCore.Mvc; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class WordToWordML : PageModel -{ - public void OnGet() - { - - } - public string Message { get; set; } - - public ActionResult OnPost(string button) - { - if (button == null) - return null; - // return View(); - if (Request.Form.Files != null) - { - var extension = Path.GetExtension(Request.Form.Files[0].FileName).ToLower(); - if (extension == ".doc" || extension == ".docx" || extension == ".dot" || extension == ".dotx" || - extension == ".dotm" || extension == ".docm" - || extension == ".xml" || extension == ".rtf") - { - MemoryStream stream = new MemoryStream(); - Request.Form.Files[0].CopyTo(stream); - WordDocument document = new WordDocument(stream, FormatType.Automatic); - stream.Dispose(); - stream = null; - //Convert word document into WordML document - try - { - #region Document SaveOption - - //Save as .xml format - - FormatType type = FormatType.WordML; - string filename = "WordToWordML.xml"; - string contenttype = "application/msword"; - - #endregion Document SaveOption - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - - } - catch (Exception) - { - } - finally - { - - } - } - else - { - Message = string.Format("Please choose Word format document to convert to WordML"); - } - } - else - { - Message = - string.Format("Browse a Word document and then click the button to convert as a WordML document"); - } - - return null; - // return View(); - } -} \ No newline at end of file diff --git a/Pages/Word/XMLMapping.cshtml b/Pages/Word/XMLMapping.cshtml deleted file mode 100644 index e46d9eba..00000000 --- a/Pages/Word/XMLMapping.cshtml +++ /dev/null @@ -1,44 +0,0 @@ -@page -@model EJ2CoreSampleBrowser.Pages.Word.XMLMapping - -@using Syncfusion.EJ2 -@{ var Title = "Essential DocIO (Word) : XML Mapping : Syncfusion"; } -@section ControlsSection{ -
- @{Html.BeginForm("xmlmapping", "word", FormMethod.Post); - { -
- Click the button to view the generated Word document. Please note that Microsoft Word Viewer or Microsoft Word is required to view the resultant Word document. -
- -
-
- Html.EndForm(); - } - } -
-} -@section ActionDescription{ -
- This sample demonstrates how to map custom XML parts to content controls in the Word document using Essential DocIO. -
-} -@section Description{ -
- DocIO allows you to bind content controls to XML elements that are embedded in the document. When you bind a content control to a custom XML part, two-way data binding is automatically enabled. -
-
- More information about the content controls can be found in this - Documentation - section. -
-} -@section Meta{ - - } -@section Title{ - ASP.NET Core Word (DocIO) library - XML Mapping Example - Syncfusion Demos - } -@section Header{ -

Example of XML Mapping in ASP.NET Core Word (DocIO) Library

- } \ No newline at end of file diff --git a/Pages/Word/XMLMapping.cshtml.cs b/Pages/Word/XMLMapping.cshtml.cs deleted file mode 100644 index 543123bb..00000000 --- a/Pages/Word/XMLMapping.cshtml.cs +++ /dev/null @@ -1,252 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using Microsoft.AspNetCore.Mvc.RazorPages; -using Microsoft.AspNetCore.Mvc; -using Syncfusion.DocIO; -using Syncfusion.DocIO.DLS; -using Syncfusion.Drawing; - -namespace EJ2CoreSampleBrowser.Pages.Word; - -public class XMLMapping : PageModel -{ - public void OnGet() - { - - } - private readonly IWebHostEnvironment _hostingEnvironment; - public XMLMapping(IWebHostEnvironment hostingEnvironment) - { - _hostingEnvironment = hostingEnvironment; - } - - public IActionResult OnPost(string Group) - { - if (Group == null) - return null; - // return View(); - string basePath = _hostingEnvironment.WebRootPath; - // Load Template document stream. - FileStream inputStream = new FileStream(basePath + @"/Word/Employees.xml", FileMode.Open, FileAccess.Read); - - // Create a new document. - WordDocument document = new WordDocument(); - - //Add a section & a paragraph in the empty document. - document.EnsureMinimal(); - - //Loads XML file into the customXML part of the Word document. - CustomXMLPart docIOxmlPart = new CustomXMLPart(document); - docIOxmlPart.Load(inputStream); - - //Insert content controls and maps Employees details to it. - InsertAndMapEmployees(document, "EmployeesList", docIOxmlPart); - - FormatType type = FormatType.Docx; - string filename = "XMLMapping.docx"; - string contenttype = "application/vnd.ms-word.document.12"; - - MemoryStream ms = new MemoryStream(); - document.Save(ms, type); - document.Close(); - ms.Position = 0; - return File(ms, contenttype, filename); - } - - /// - /// Insert and Maps CustomXMLPart to content control based on XPath. - /// - /// Paragraph instance to append content control. - /// XPath of the CustomXMLNode to be mapped - /// CustomXMLPart of the CustomXMLNode - private void MapCustomXMLPart(IWParagraph paragraph, string XPath, CustomXMLPart custXMLPart) - { - IInlineContentControl contentControl = paragraph.AppendInlineContentControl(ContentControlType.Text); - contentControl.ContentControlProperties.XmlMapping.SetMapping(XPath, string.Empty, custXMLPart); - } - - /// - /// Inserts content control and maps the employees details to it. - /// - /// Word document instance. - /// Custom XML root Xpath. - /// CustomXMLPart instance. - private void InsertAndMapEmployees(WordDocument document, string xmlRootPath, CustomXMLPart docIOxmlPart) - { - //Retrieving CustomXMLNode from xmlRootPath. - CustomXMLNode parentNode = docIOxmlPart.SelectSingleNode(xmlRootPath); - - int empIndex = 1; - foreach (CustomXMLNode employeeNode in parentNode.ChildNodes) - { - if (employeeNode.HasChildNodes()) - { - //Adds new paragraph to the section - IWParagraph paragraph = document.LastSection.AddParagraph(); - paragraph.ParagraphFormat.BackColor = Color.Gray; - - IWTextRange textrange = paragraph.AppendText("Employee"); - textrange.CharacterFormat.TextColor = Color.White; - textrange.CharacterFormat.Bold = true; - textrange.CharacterFormat.FontSize = 14; - - //Insert content controls and maps Employee details to it. - InsertAndMapEmployee(document, employeeNode, xmlRootPath, docIOxmlPart, empIndex); - } - - empIndex++; - } - } - - /// - /// Inserts content control and maps the employee details to it. - /// - /// Word document instance. - /// CustomXMLNode of employee. - /// Custom XML root Xpath. - /// CustomXMLPart instance. - /// Current employee index. - private void InsertAndMapEmployee(WordDocument document, CustomXMLNode employeesNode, string rootXmlPath, - CustomXMLPart docIOxmlPart, int empIndex) - { - //Column names of Employee element. - string[] employeesDetails = - { "FirstName", "LastName", "EmployeeID", "Extension", "Address", "City", "Country" }; - int empChildIndex = 0; - int customerIndex = 1; - - // Append current empolyee XPath with root XPath. - string empPath = "/" + rootXmlPath + "/Employees[" + empIndex + "]/"; - // Iterating child elements of Employee - foreach (CustomXMLNode employeeChild in employeesNode.ChildNodes) - { - IWParagraph paragraph = document.LastParagraph; - if (employeeChild.HasChildNodes()) - { - //Insert a content controls and maps Customer details to it. - InsertAndMapCustomer(document, employeeChild, docIOxmlPart, empPath, customerIndex); - customerIndex++; - } - else - { - if (empChildIndex != 1) - { - //Insert a content controls and maps Employee details other than Customer details to it. - paragraph = document.LastSection.AddParagraph(); - if (empChildIndex == 0) - paragraph.AppendText("Name:"); - else - paragraph.AppendText(employeesDetails[empChildIndex] + ":"); - } - - MapCustomXMLPart(paragraph, empPath + employeesDetails[empChildIndex], docIOxmlPart); - } - - empChildIndex++; - } - } - - /// - /// Insert a content controls and maps Customer details to it. - /// - /// Word document instance. - /// CustomXMLNode of customer. - /// CustomXMLPart instance. - /// Current employee index. - /// Current customer index. - private void InsertAndMapCustomer(WordDocument document, CustomXMLNode customerNode, CustomXMLPart docIOxmlPart, - string empPath, int custIndex) - { - //Column names of Customer element. - string[] customersDetails = { "CustomerID", "EmployeeID", "CompanyName", "ContactName", "City", "Country" }; - - document.LastSection.AddParagraph(); - - //Adds new paragraph to the section - IWParagraph paragraph = document.LastSection.AddParagraph(); - paragraph.ParagraphFormat.BackColor = Color.Green; - paragraph.ParagraphFormat.LeftIndent = 72; - - IWTextRange textrange = paragraph.AppendText("Customers"); - textrange.CharacterFormat.TextColor = Color.White; - textrange.CharacterFormat.Bold = true; - textrange.CharacterFormat.FontSize = 14; - - int orderIndex = 1; - int custChild = 0; - bool isFirstOrder = true; - string customerXpath = empPath + "Customers[" + custIndex + "]/"; - foreach (CustomXMLNode customerChild in customerNode.ChildNodes) - { - if (customerChild.HasChildNodes()) - { - //Insert a content controls and maps Orders details to it. - InsertAndMapOrders(document, customerChild, docIOxmlPart, customerXpath, orderIndex, isFirstOrder); - document.LastSection.AddParagraph(); - isFirstOrder = false; - orderIndex++; - } - else - { - //Insert a content controls and maps Customer details other than Order details to it. - paragraph = document.LastSection.AddParagraph(); - paragraph.ParagraphFormat.LeftIndent = 72; - - paragraph.AppendText(customersDetails[custChild] + ":"); - MapCustomXMLPart(paragraph, customerXpath + customersDetails[custChild], docIOxmlPart); - } - - custChild++; - } - } - - /// - /// Insert a content controls and maps Orders details to it. - /// - /// Word document instance. - /// CustomXMLNode of order. - /// CustomXMLPart instance. - /// Current customer index - /// Current order index - /// Indicates whether it is the first order of the customer. - private void InsertAndMapOrders(WordDocument document, CustomXMLNode orderNode, CustomXMLPart docIOxmlPart, - string custPath, int orderIndex, bool isFirst) - { - //Column names of order element. - string[] ordersDetails = { "OrderID", "CustomerID", "OrderDate", "ShippedDate", "RequiredDate" }; - - IWParagraph paragraph = null; - IWTextRange textrange = null; - if (isFirst) - { - document.LastSection.AddParagraph(); - //Adds new paragraph to the section - paragraph = document.LastSection.AddParagraph(); - paragraph.ParagraphFormat.BackColor = Color.Red; - paragraph.ParagraphFormat.LeftIndent = 128; - - textrange = paragraph.AppendText("Orders"); - textrange.CharacterFormat.TextColor = Color.White; - textrange.CharacterFormat.Bold = true; - textrange.CharacterFormat.FontSize = 14; - } - - int orderChildIndex = 0; - string customerXpath = custPath + "Orders[" + orderIndex + "]/"; - foreach (CustomXMLNode orderChild in orderNode.ChildNodes) - { - //Adds new paragraph to the section - paragraph = document.LastSection.AddParagraph(); - paragraph.ParagraphFormat.LeftIndent = 128; - - paragraph.AppendText(ordersDetails[orderChildIndex] + ":"); - MapCustomXMLPart(paragraph, customerXpath + "/" + ordersDetails[orderChildIndex], docIOxmlPart); - orderChildIndex++; - } - } -} \ No newline at end of file diff --git a/Presentation/EJ2CoreSampleBrowser_NET8.csproj b/Presentation/EJ2CoreSampleBrowser_NET8.csproj deleted file mode 100644 index dba4fdb2..00000000 --- a/Presentation/EJ2CoreSampleBrowser_NET8.csproj +++ /dev/null @@ -1,56 +0,0 @@ - - - - net8.0 - enable - enable - NET8_0 - false - false - en - - - - TRACE;RELEASE;$(SyncfusionLicensing) - - - - $(DefineConstants);REDIS - - - - - - - - - - - - - - - - - - - - - - - - - Always - - - - - - - - - - - - diff --git a/Presentation/EJ2CoreSampleBrowser_NET8.sln b/Presentation/EJ2CoreSampleBrowser_NET8.sln deleted file mode 100644 index 6b087c1c..00000000 --- a/Presentation/EJ2CoreSampleBrowser_NET8.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.8.34112.27 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EJ2CoreSampleBrowser_NET8", "EJ2CoreSampleBrowser_NET8.csproj", "{88189D22-0C47-4532-BCB4-21880180E031}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {88189D22-0C47-4532-BCB4-21880180E031}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {88189D22-0C47-4532-BCB4-21880180E031}.Debug|Any CPU.Build.0 = Debug|Any CPU - {88189D22-0C47-4532-BCB4-21880180E031}.Release|Any CPU.ActiveCfg = Release|Any CPU - {88189D22-0C47-4532-BCB4-21880180E031}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {EAFF0E5A-D397-4A01-8A96-838B4ADC1C37} - EndGlobalSection -EndGlobal diff --git a/Presentation/EJ2CoreSampleBrowser_NET9.csproj b/Presentation/EJ2CoreSampleBrowser_NET9.csproj deleted file mode 100644 index 640964b7..00000000 --- a/Presentation/EJ2CoreSampleBrowser_NET9.csproj +++ /dev/null @@ -1,56 +0,0 @@ - - - - net9.0 - enable - enable - NET9_0 - false - false - en - - - - TRACE;RELEASE;$(SyncfusionLicensing) - - - - $(DefineConstants);REDIS - - - - - - - - - - - - - - - - - - - - - - - - - Always - - - - - - - - - - - - diff --git a/Presentation/EJ2CoreSampleBrowser_NET9.sln b/Presentation/EJ2CoreSampleBrowser_NET9.sln deleted file mode 100644 index 278f31ab..00000000 --- a/Presentation/EJ2CoreSampleBrowser_NET9.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.9.34526.213 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EJ2CoreSampleBrowser_NET9", "EJ2CoreSampleBrowser_NET9.csproj", "{439E6E04-D767-479C-8B23-65238827BA6F}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {439E6E04-D767-479C-8B23-65238827BA6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {439E6E04-D767-479C-8B23-65238827BA6F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {439E6E04-D767-479C-8B23-65238827BA6F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {439E6E04-D767-479C-8B23-65238827BA6F}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {6EF663D2-B2BA-4F71-A01F-29B58D52E995} - EndGlobalSection -EndGlobal diff --git a/Presentation/Program.cs b/Presentation/Program.cs deleted file mode 100644 index 59dabf50..00000000 --- a/Presentation/Program.cs +++ /dev/null @@ -1,89 +0,0 @@ -#region Copyright Syncfusion® Inc. 2001-2025. -// Copyright Syncfusion® Inc. 2001-2025. All rights reserved. -// Use of this code is subject to the terms of our license. -// A copy of the current license can be obtained at any time by e-mailing -// licensing@syncfusion.com. Any infringement will be prosecuted under -// applicable laws. -#endregion -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using Microsoft.AspNetCore; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.FileProviders; -using Syncfusion.Licensing; -using EJ2ScheduleSample.Pages; -using EJ2SpreadsheetSample.Pages; - -using System.Text.RegularExpressions; - -if (File.Exists(Directory.GetCurrentDirectory() + "/SyncfusionLicense.txt")) -{ - string licenseKey = File.ReadAllText(Directory.GetCurrentDirectory() + "/SyncfusionLicense.txt").Trim(); - SyncfusionLicenseProvider.RegisterLicense(licenseKey); - if (File.Exists(Directory.GetCurrentDirectory() + "/wwwroot/scripts/index.js")) - { - string regexPattern = "ej.base.registerLicense(.*);"; - string jsContent = File.ReadAllText(Directory.GetCurrentDirectory() + "/wwwroot/scripts/index.js"); - MatchCollection matchCases = Regex.Matches(jsContent, regexPattern); - foreach (Match matchCase in matchCases) - { - var replaceableString = matchCase.ToString(); - jsContent = jsContent.Replace(replaceableString, "ej.base.registerLicense('" + licenseKey + "');"); - } - File.WriteAllText(Directory.GetCurrentDirectory() + "/wwwroot/scripts/index.js", jsContent); - } -} - -var builder = WebApplication.CreateBuilder(args); -builder.Services.AddRouting(options => options.LowercaseUrls = true); -// Add services to the container. -builder.Services.AddRazorPages(); - -builder.Services.AddMvc() - .AddNewtonsoftJson(x => - { - x.SerializerSettings.ContractResolver = null; - }); -builder.Services.AddSignalR(); -builder.Services.AddDirectoryBrowser(); -builder.Services.AddRazorPages().AddRazorRuntimeCompilation(); -#if REDIS -builder.Services.AddMemoryCache(); -builder.Services.AddDistributedRedisCache(option => { option.Configuration = builder.Configuration["ConnectionStrings:Redis"]; }); -#endif -var app = builder.Build(); - -if (!app.Environment.IsDevelopment()) -{ - app.UseExceptionHandler("/Error"); - // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. - app.UseHsts(); -} - -app.UseRouting(); -app.UseAuthorization(); -app.MapRazorPages(); - -app.UseFileServer(); -app.UseStaticFiles(new StaticFileOptions -{ - ServeUnknownFileTypes = true, - DefaultContentType = "plain/text", - FileProvider = new PhysicalFileProvider( - Path.Combine(Directory.GetCurrentDirectory(), "Pages")), - RequestPath = "/Pages" -}); -app.UseEndpoints(endpoints => -{ - endpoints.MapHub("/scheduleHub"); - endpoints.MapHub("/spreadsheetHub"); -}); - -app.Run(); - diff --git a/Presentation/sampleOrder.json b/Presentation/sampleOrder.json deleted file mode 100644 index 9e1b98e7..00000000 --- a/Presentation/sampleOrder.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "Document Processing Library": [ "PowerPoint" ] -} \ No newline at end of file diff --git a/Presentation/samplelist.js b/Presentation/samplelist.js deleted file mode 100644 index 42aecf21..00000000 --- a/Presentation/samplelist.js +++ /dev/null @@ -1,264 +0,0 @@ -if (!window) { - - var window = exports.window = {}; -} -window.samplesList = [ - { - "name": "PowerPoint (Presentation)", - "directory": "PowerPoint", - "category": "Document Processing Library", - "samples": [ - { - "url": "Default", - "name": "Create Presentation", - "category": "Getting Started", - "order": 0, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045450" - }, - { - "url": "PowerPointViewer", - "name": "PowerPoint Viewer", - "category": "Product Showcase", - "order": 1, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045451", - "sourceFiles": [ - { "displayName": "PowerPointViewer.cshtml", path: "../Views/PowerPoint/PowerPointViewer.cshtml" }, - { "displayName": "PowerPointViewerController.cs", path: "../Controllers/PowerPoint/PowerPointViewerController.cs" } - ] - }, - { - "url": "PPTXToImage", - "name": "PPTX To Image", - "category": "Conversions", - "order": 2, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045452" - }, - { - "url": "PPTXToPDF", - "name": "PPTX To PDF", - "category": "Conversions", - "order": 2, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045453", - }, - { - "url": "PPTXToPDFA", - "name": "PPTX To PDF/A", - "category": "Conversions", - "order": 2, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045454" - }, - { - "url": "PPTXToPDFUA", - "name": "PPTX To PDF/UA", - "category": "Conversions", - "order": 2, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045455" - }, - { - "url": "FindAndReplace", - "name": "Find and Replace", - "category": "Editing", - "order": 3, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045456" - }, - { - "url": "FindAndHighlight", - "name": "Find and Highlight", - "category": "Editing", - "order": 3, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045457" - }, - { - "url": "WriteProtection", - "name": "Write Protection", - "category": "Security", - "order": 4, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045458" - }, - { - "url": "EncryptAndDecrypt", - "name": "Encrypt And Decrypt", - "category": "Security", - "order": 4, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "00454559" - - }, - { - "url": "Image", - "name": "Image", - "category": "Slide Elements", - "order": 5, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045460" - }, - { - "url": "Chart", - "name": "Chart", - "category": "Slide Elements", - "order": 5, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045461" - }, - { - "url": "Slide", - "name": "Slide", - "category": "Slide Elements", - "order": 5, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045462" - }, - { - "url": "SmartArt", - "name": "SmartArt", - "category": "Slide Elements", - "order": 5, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045463" - }, - { - "url": "Table", - "name": "Table", - "category": "Slide Elements", - "order": 5, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045464" - }, - { - "url": "Comment", - "name": "Comment", - "category": "Slide Elements", - "order": 5, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045465" - }, - { - "url": "Connector", - "name": "Connector", - "category": "Slide Elements", - "order": 5, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045466" - }, - { - "url": "OLEObject", - "name": "OLE Object", - "category": "Slide Elements", - "order": 5, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045467" - }, - { - "url": "HeaderAndFooter", - "name": "Header And Footer", - "category": "Slide Elements", - "order": 5, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045468" - }, - { - "url": "ImportData", - "name": "Import Data", - "category": "Slide Elements", - "order": 5, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045469", - "sourceFiles": [ - { "displayName": "ImportData.cshtml", path: "../Views/PowerPoint/ImportData.cshtml" }, - { "displayName": "ImportDataController.cs", path: "../Controllers/PowerPoint/ImportDataController.cs" } - ] - }, - { - "url": "CreateAnimation", - "name": "Create Animation", - "category": "Animation", - "order": 6, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045470" - }, - { - "url": "ModifyAnimation", - "name": "Modify Animation", - "category": "Animation", - "order": 6, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045471" - }, - { - "url": "AnimationConverter", - "name": "Animation Converter", - "category": "Animation", - "order": 6, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045472", - }, - { - "url": "SlideTransition", - "name": "Slide Transition", - "category": "Transition", - "order": 7, - "component": "PowerPoint", - "dir": "PowerPoint", - "parentId": "045", - "uid": "0045473" - } - ], - "order": 7, - "uid": "045" - }, -] diff --git a/README.md b/README.md index 77e3a3d1..cff359c5 100644 --- a/README.md +++ b/README.md @@ -63,7 +63,6 @@ Clone the repository. This repository contains the .NET 8 and .NET 9 project and -

 

INTERACTIVE CHAT

@@ -90,18 +89,11 @@ Clone the repository. This repository contains the .NET 8 and .NET 9 project and

FORMS

 

-

DOCUMENT PROCESSING LIBRARIES

- - - - -

 

 

-

VIEWER & EDITORS

- +

EDITORS

diff --git a/Word/EJ2CoreSampleBrowser_NET8.csproj b/Word/EJ2CoreSampleBrowser_NET8.csproj deleted file mode 100644 index d86055e5..00000000 --- a/Word/EJ2CoreSampleBrowser_NET8.csproj +++ /dev/null @@ -1,57 +0,0 @@ - - - - net8.0 - enable - enable - NET8_0 - false - false - en - - - - TRACE;RELEASE;$(SyncfusionLicensing) - - - - $(DefineConstants);REDIS - - - - - - - - - - - - - - - - - - - - - - - - - Always - - - - - - - - - - - - - - diff --git a/Word/EJ2CoreSampleBrowser_NET8.sln b/Word/EJ2CoreSampleBrowser_NET8.sln deleted file mode 100644 index 6b087c1c..00000000 --- a/Word/EJ2CoreSampleBrowser_NET8.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.8.34112.27 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EJ2CoreSampleBrowser_NET8", "EJ2CoreSampleBrowser_NET8.csproj", "{88189D22-0C47-4532-BCB4-21880180E031}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {88189D22-0C47-4532-BCB4-21880180E031}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {88189D22-0C47-4532-BCB4-21880180E031}.Debug|Any CPU.Build.0 = Debug|Any CPU - {88189D22-0C47-4532-BCB4-21880180E031}.Release|Any CPU.ActiveCfg = Release|Any CPU - {88189D22-0C47-4532-BCB4-21880180E031}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {EAFF0E5A-D397-4A01-8A96-838B4ADC1C37} - EndGlobalSection -EndGlobal diff --git a/Word/EJ2CoreSampleBrowser_NET9.csproj b/Word/EJ2CoreSampleBrowser_NET9.csproj deleted file mode 100644 index b5a6e5db..00000000 --- a/Word/EJ2CoreSampleBrowser_NET9.csproj +++ /dev/null @@ -1,57 +0,0 @@ - - - - net9.0 - enable - enable - NET9_0 - false - false - en - - - - TRACE;RELEASE;$(SyncfusionLicensing) - - - - $(DefineConstants);REDIS - - - - - - - - - - - - - - - - - - - - - - - - - Always - - - - - - - - - - - - - - diff --git a/Word/EJ2CoreSampleBrowser_NET9.sln b/Word/EJ2CoreSampleBrowser_NET9.sln deleted file mode 100644 index 43d73009..00000000 --- a/Word/EJ2CoreSampleBrowser_NET9.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.9.34526.213 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EJ2CoreSampleBrowser_NET9", "EJ2CoreSampleBrowser_NET9.csproj", "{D40C7AC7-C7FB-434E-B17F-2C1C4329A536}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D40C7AC7-C7FB-434E-B17F-2C1C4329A536}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D40C7AC7-C7FB-434E-B17F-2C1C4329A536}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D40C7AC7-C7FB-434E-B17F-2C1C4329A536}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D40C7AC7-C7FB-434E-B17F-2C1C4329A536}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {49716AA1-ABFF-4C30-9C10-C65FDEB1EC72} - EndGlobalSection -EndGlobal diff --git a/Word/sampleOrder.json b/Word/sampleOrder.json deleted file mode 100644 index 85002357..00000000 --- a/Word/sampleOrder.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "Document Processing Library": ["Word"], - "Editor": ["DocumentEditor"] -} \ No newline at end of file diff --git a/Word/samplelist.js b/Word/samplelist.js deleted file mode 100644 index f29f3b85..00000000 --- a/Word/samplelist.js +++ /dev/null @@ -1,1121 +0,0 @@ -if (!window) { - - var window = exports.window = {}; -} -window.samplesList = [ - { - "name": "Word (DocIO)", - "directory": "Word", - "type": "update", - "category": "Document Processing Library", - "samples": [ - { - "url": "SalesInvoice", - "name": "Sales Invoice", - "category": "Product Showcase", - "order": 0, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "0047470", - "sourceFiles": [ - { "displayName": "SalesInvoice.cshtml", path: "../Views/Word/SalesInvoice.cshtml" }, - { "displayName": "SalesInvoiceController.cs", path: "../Controllers/Word/SalesInvoiceController.cs" } - ] - }, - { - "url": "UpdateFields", - "name": "Update Fields", - "category": "Product Showcase", - "order": 0, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "0047471" - }, - { - "url": "HelloWorld", - "name": "Hello World", - "category": "Getting Started", - "order": 1, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "0047472" - }, - { - "url": "FindandHighlight", - "name": "Find and Highlight", - "category": "Editing", - "order": 2, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "0047473" - }, - { - "url": "SimpleReplace", - "name": "Simple Replace", - "category": "Editing", - "order": 2, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "0047474" - }, - { - "url": "AdvancedReplace", - "name": "Advanced Replace", - "category": "Editing", - "order": 2, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "0047475" - }, - { - "url": "BookmarkNavigation", - "name": "Bookmark Navigation", - "category": "Editing", - "order": 2, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "0047476" - }, - { - "url": "CloneandMerge", - "name": "Clone and Merge", - "category": "Editing", - "order": 2, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "0047477" - }, - { - "url": "Forms", - "name": "Forms", - "category": "Editing", - "order": 2, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "0047478" - }, - { - "url": "SplitBySection", - "name": "Split by Section", - "category": "Split Word Documents", - "order": 3, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "0047479" - }, - { - "url": "SplitByHeading", - "name": "Split by Heading", - "category": "Split Word Documents", - "order": 3, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474710" - }, - { - "url": "SplitByBookmark", - "name": "Split by Bookmark", - "category": "Split Word Documents", - "order": 3, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474711" - }, - { - "url": "SplitByPlaceholder", - "name": "Split by Placeholder", - "category": "Split Word Documents", - "order": 3, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474712" - }, - { - "url": "FormFillingAndProtection", - "name": "Form filling and Protection", - "category": "Content Control", - "order": 4, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474713" - }, - { - "url": "XMLMapping", - "name": "XML Mapping", - "category": "Content Control", - "order": 4, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474714" - }, - { - "url": "CreateEquation", - "name": "Create Equation", - "category": "Mathematical Equation", - "order": 5, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474715" - }, - { - "url": "EditEquation", - "name": "Edit Equation", - "category": "Mathematical Equation", - "order": 5, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474716" - }, - { - "url": "CreateUsingLaTeX", - "name": "Create using LaTeX", - "category": "Mathematical Equation", - "order": 5, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474717" - }, - { - "url": "EditUsingLaTeX", - "name": "Edit using LaTeX", - "category": "Mathematical Equation", - "order": 5, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474718" - }, - { - "url": "Bookmarks", - "name": "Bookmarks", - "category": "Insert Content", - "order": 6, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474719" - }, - { - "url": "HeaderandFooter", - "name": "Header and Footer", - "category": "Insert Content", - "order": 6, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474720" - }, - { - "url": "ImageInsertion", - "name": "Image Insertion", - "category": "Insert Content", - "order": 6, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474721" - }, - { - "url": "InsertOLEObject", - "name": "Insert OLE Object", - "category": "Insert Content", - "order": 6, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474722" - }, - { - "url": "FormatTable", - "name": "Format Table", - "category": "Formatting", - "order": 7, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474723" - }, - { - "url": "RTL", - "name": "RTL", - "category": "Formatting", - "order": 7, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474724" - }, - { - "url": "Styles", - "name": "Styles", - "category": "Formatting", - "order": 7, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474725" - }, - { - "url": "TableStyles", - "name": "Table Styles", - "category": "Formatting", - "order": 7, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474726" - }, - { - "url": "EmployeeReport", - "name": "Employee Report", - "category": "Mail Merge", - "order": 8, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474727" - }, - { - "url": "LetterFormat", - "name": "Letter Format", - "category": "Mail Merge", - "order": 8, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474728" - }, - { - "url": "MailMergeEvent", - "name": "Mail Merge Event", - "category": "Mail Merge", - "order": 8, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474729" - }, - { - "url": "NestedMailMerge", - "name": "Nested Mail Merge", - "category": "Mail Merge", - "order": 8, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474730" - }, - { - "url": "WordToPDF", - "name": "Word to PDF", - "category": "Conversions", - "type": "update", - "order": 9, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474731" - }, - { - "url": "WordToPDFA", - "name": "Word to PDF/A", - "category": "Conversions", - "type": "update", - "order": 9, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474732" - }, - { - "url": "WordToPDFUA", - "name": "Word to PDF/UA", - "category": "Conversions", - "type": "update", - "order": 9, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474733" - }, - { - "url": "WordToImage", - "name": "Word to Image", - "category": "Conversions", - "type": "update", - "order": 9, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474734" - }, - { - "url": "WordToHTML", - "name": "Word to HTML", - "category": "Conversions", - "order": 9, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474735" - }, - { - "url": "HTMLToWord", - "name": "HTML to Word", - "category": "Conversions", - "order": 9, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474736" - }, - { - "url": "WordToMarkdown", - "name": "Word to Markdown", - "category": "Conversions", - "order": 9, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474737" - }, - { - "url": "MarkdownToWord", - "name": "Markdown to Word", - "category": "Conversions", - "order": 9, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474738" - }, - { - "url": "WordToRTF", - "name": "Word to RTF", - "category": "Conversions", - "order": 9, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474739" - }, - { - "url": "RTFToDoc", - "name": "RTF to Word", - "category": "Conversions", - "order": 9, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474740" - }, - { - "url": "WordToWordML", - "name": "Word to WordML", - "category": "Conversions", - "order": 9, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474741" - }, - { - "url": "WordMLToWord", - "name": "WordML to Word", - "category": "Conversions", - "order": 9, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474742" - }, - { - "url": "WordToTXT", - "name": "Word to TXT", - "category": "Conversions", - "type": "update", - "order": 9, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474743" - }, - { - "url": "TXTtoWord", - "name": "TXT to Word", - "category": "Conversions", - "type": "update", - "order": 9, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474744" - }, - { - "url": "DOCtoODT", - "name": "Word to ODT", - "category": "Conversions", - "order": 9, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474745" - }, - { - "url": "InsertBreak", - "name": "Insert Break", - "category": "Page Layout", - "order": 10, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474746" - }, - { - "url": "Watermark", - "name": "Watermark", - "category": "Page Layout", - "order": 10, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474747" - }, - { - "url": "TableOfContents", - "name": "Table of Contents", - "category": "References", - "order": 11, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474748" - }, - { - "url": "TableOfFigures", - "name": "Table of Figures", - "category": "References", - "order": 11, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474749" - }, - { - "url": "FootnotesandEndnotes", - "name": "Footnotes and Endnotes", - "category": "References", - "order": 11, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474750" - }, - { - "url": "AutoShapes", - "name": "AutoShapes", - "category": "Shapes", - "order": 12, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474751" - }, - { - "url": "GroupShapes", - "name": "Group Shapes", - "category": "Shapes", - "order": 12, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474752" - }, - { - "url": "CreateSmartArt", - "name": "Create SmartArt", - "category": "SmartArts", - "order": 13, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474753" - }, - { - "url": "EditSmartArt", - "name": "Edit SmartArt", - "category": "SmartArts", - "order": 13, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474754" - }, - { - "url": "PieChart", - "name": "Pie Chart", - "category": "Charts", - "order": 14, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474755" - }, - { - "url": "BarChart", - "name": "Bar Chart", - "category": "Charts", - "order": 14, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474756" - }, - { - "url": "DocumentSettings", - "name": "Document Settings", - "category": "View", - "order": 15, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474757" - }, - { - "url": "MacroPreservation", - "name": "Macro Preservation", - "category": "View", - "order": 15, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474758" - }, - { - "url": "DocumentProtection", - "name": "Document Protection", - "category": "Security", - "type": "update", - "order": 16, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474759" - }, - { - "url": "EncryptAndDecrypt", - "name": "Encrypt and Decrypt", - "category": "Security", - "order": 16, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474760" - }, - { - "url": "TrackChanges", - "name": "Track Changes", - "category": "Review", - "order": 17, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474761" - }, - { - "url": "CompareDocuments", - "name": "Compare Documents", - "category": "Review", - "order": 17, - "component": "Word", - "dir": "Word", - "parentId": "047", - "uid": "00474762" - } - - ], - "order": 7, - "uid": "047" - }, - { - "name": "Word Processor", - "directory": "DocumentEditor", - "category": "Editors", - "ftName": "document-editor", - "hideOnDevice": true, - "type": "update", - "samples": [ - { - "url": "Default", - "name": "Default Functionalities", - "category": "DocumentEditor", - "type": "update", - "order": 0, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036342", - "sourceFiles": [ - { "displayName": "Default.cshtml", path: "../Views/DocumentEditor/Default.cshtml" }, - { "displayName": "DefaultController.cs", path: "../Controllers/DocumentEditor/DefaultController.cs" } - ] - }, - { - "url": "BindUItoDocument", - "name": "Bind UI To Document", - "category": "DocumentEditor", - "order": 0, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036350", - "sourceFiles": [ - { "displayName": "BindUIToDocument.cshtml", path: "../Views/DocumentEditor/BindUIToDocument.cshtml" }, - { "displayName": "BindUIToDocumentController.cs", path: "../Controllers/DocumentEditor/BindUIToDocumentController.cs" } - ] - }, - { - "url": "DocumentList", - "name": "Document List", - "category": "File Management", - "order": 1, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036343", - "sourceFiles": [ - { "displayName": "DocumentList.cshtml", path: "../Views/DocumentEditor/DocumentList.cshtml" }, - { "displayName": "DocumentListController.cs", path: "../Controllers/DocumentEditor/DocumentListController.cs" } - ] - }, - { - "url": "MailMerge", - "name": "Mail Merge", - "category": "Mail Merge", - "order": 2, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036365", - "sourceFiles": [ - { "displayName": "MailMerge.cshtml", path: "../Views/DocumentEditor/MailMerge.cshtml" }, - { "displayName": "MailMergeController.cs", path: "../Controllers/DocumentEditor/MailMergeController.cs" } - ] - }, - { - "url": "Comments", - "name": "Comments", - "category": "Review", - "order": 3, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036362", - "sourceFiles": [ - { "displayName": "Comments.cshtml", path: "../Views/DocumentEditor/Comments.cshtml" }, - { "displayName": "CommentsController.cs", path: "../Controllers/DocumentEditor/CommentsController.cs" } - ] - }, - { - "url": "TrackChanges", - "name": "Track Changes", - "category": "Review", - "order": 3, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036363", - "sourceFiles": [ - { "displayName": "TrackChanges.cshtml", path: "../Views/DocumentEditor/TrackChanges.cshtml" }, - { "displayName": "TrackChangesController.cs", path: "../Controllers/DocumentEditor/TrackChangesController.cs" } - ] - }, - { - "url": "DocumentProtection", - "name": "Document Protection", - "category": "Security", - "order": 4, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036358", - "sourceFiles": [ - { "displayName": "DocumentProtection.cshtml", path: "../Views/DocumentEditor/DocumentProtection.cshtml" }, - { "displayName": "DocumentProtectionController.cs", path: "../Controllers/DocumentEditor/DocumentProtectionController.cs" } - ] - }, - { - "url": "RibbonCustomization", - "name": "Ribbon Customization", - "category": "Customization", - "type": "new", - "order": 5, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036373", - "sourceFiles": [ - { "displayName": "RibbonCustomization.cshtml", path: "../Views/DocumentEditor/RibbonCustomization.cshtml" }, - { "displayName": "RibbonCustomizationController.cs", path: "../Controllers/DocumentEditor/RibbonCustomizationController.cs" } - ] - }, - { - "url": "CustomContextMenu", - "name": "Custom Context Menu", - "category": "Customization", - "order": 5, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036355", - "sourceFiles": [ - { "displayName": "CustomContextMenu.cshtml", path: "../Views/DocumentEditor/CustomContextMenu.cshtml" }, - { "displayName": "CustomContextMenuController.cs", path: "../Controllers/DocumentEditor/CustomContextMenuController.cs" } - ] - }, - { - "url": "AutoSave", - "name": "Auto Save", - "category": "Customization", - "order": 5, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036356", - "sourceFiles": [ - { "displayName": "AutoSave.cshtml", path: "../Views/DocumentEditor/AutoSave.cshtml" }, - { "displayName": "AutoSaveController.cs", path: "../Controllers/DocumentEditor/AutoSaveController.cs" } - ] - }, - { - "url": "ToolbarCustomization", - "name": "Toolbar Customization", - "category": "Customization", - "order": 5, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036361", - "sourceFiles": [ - { "displayName": "ToolbarCustomization.cshtml", path: "../Views/DocumentEditor/ToolbarCustomization.cshtml" }, - { "displayName": "ToolbarCustomizationController.cs", path: "../Controllers/DocumentEditor/ToolbarCustomizationController.cs" } - ] - }, - { - "url": "ColorpickerCustomization", - "name": "Colorpicker Customization", - "category": "Customization", - "order": 5, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036369", - "sourceFiles": [ - { "displayName": "ColorpickerCustomization.cshtml", path: "../Views/DocumentEditor/ColorpickerCustomization.cshtml" }, - { "displayName": "ColorpickerCustomizationController.cs", path: "../Controllers/DocumentEditor/ColorpickerCustomizationController.cs" } - ] - }, - { - "url": "RightToLeft", - "name": "Right To Left", - "category": "RTL", - "order": 6, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036354", - "sourceFiles": [ - { "displayName": "RightToLeft.cshtml", path: "../Views/DocumentEditor/RightToLeft.cshtml" }, - { "displayName": "RightToLeftController.cs", path: "../Controllers/DocumentEditor/RightToLeftController.cs" } - ] - }, - { - "url": "Print", - "name": "Print", - "category": "Exporting", - "order": 7, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036353", - "sourceFiles": [ - { "displayName": "Print.cshtml", path: "../Views/DocumentEditor/Print.cshtml" }, - { "displayName": "PrintController.cs", path: "../Controllers/DocumentEditor/PrintController.cs" } - ] - }, - { - "url": "Export", - "name": "Advanced Exporting", - "category": "Exporting", - "order": 7, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036368", - "sourceFiles": [ - { "displayName": "Export.cshtml", path: "../Views/DocumentEditor/Export.cshtml" }, - { "displayName": "ExportController.cs", path: "../Controllers/DocumentEditor/ExportController.cs" } - ] - }, - { - "url": "TableOfContents", - "name": "Table of Contents", - "category": "References", - "order": 8, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036352", - "sourceFiles": [ - { "displayName": "TableOfContents.cshtml", path: "../Views/DocumentEditor/TableOfContents.cshtml" }, - { "displayName": "TableOfContentsController.cs", path: "../Controllers/DocumentEditor/TableOfContentsController.cs" } - ] - }, - { - "url": "Notes", - "name": "Footnotes and Endnotes", - "category": "References", - "order": 8, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036366", - "sourceFiles": [ - { "displayName": "Notes.cshtml", path: "../Views/DocumentEditor/Notes.cshtml" }, - { "displayName": "NotesController.cs", path: "../Controllers/DocumentEditor/NotesController.cs" } - ] - }, - { - "url": "AutoShapes", - "name": "Auto Shapes", - "category": "Shapes", - "type": "update", - "order": 9, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036372", - "sourceFiles": [ - { "displayName": "AutoShapes.cshtml", path: "../Views/DocumentEditor/AutoShapes.cshtml" }, - { "displayName": "AutoShapesController.cs", path: "../Controllers/DocumentEditor/AutoShapesController.cs" } - ] - }, - { - "url": "WebLayout", - "name": "Web Layout", - "category": "View", - "order": 9, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036359", - "sourceFiles": [ - { "displayName": "WebLayout.cshtml", path: "../Views/DocumentEditor/WebLayout.cshtml" }, - { "displayName": "WebLayoutController.cs", path: "../Controllers/DocumentEditor/WebLayoutController.cs" } - ] - }, - { - "url": "Ruler", - "name": "Ruler", - "category": "View", - "order": 9, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036371", - "sourceFiles": [ - { "displayName": "Ruler.cshtml", path: "../Views/DocumentEditor/Ruler.cshtml" }, - { "displayName": "RulerController.cs", path: "../Controllers/DocumentEditor/RulerController.cs" } - ] - }, - { - "url": "HeadingNavigation", - "name": "Heading Navigation", - "category": "View", - "order": 9, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036370", - "sourceFiles": [ - { "displayName": "HeadingNavigation.cshtml", path: "../Views/DocumentEditor/HeadingNavigation.cshtml" }, - { "displayName": "HeadingNavigationController.cs", path: "../Controllers/DocumentEditor/HeadingNavigationController.cs" } - ] - }, - { - "url": "CharacterFormat", - "name": "Character Formatting", - "category": "Editing Features", - "order": 10, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036344", - "sourceFiles": [ - { "displayName": "CharacterFormat.cshtml", path: "../Views/DocumentEditor/CharacterFormat.cshtml" }, - { "displayName": "CharacterFormatController.cs", path: "../Controllers/DocumentEditor/CharacterFormatController.cs" } - ] - }, - { - "url": "ParagraphFormat", - "name": "Paragraph Formatting", - "category": "Editing Features", - "order": 10, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036345", - "sourceFiles": [ - { "displayName": "ParagraphFormat.cshtml", path: "../Views/DocumentEditor/ParagraphFormat.cshtml" }, - { "displayName": "ParagraphFormatController.cs", path: "../Controllers/DocumentEditor/ParagraphFormatController.cs" } - ] - }, - { - "url": "Styles", - "name": "Styles", - "category": "Editing Features", - "order": 10, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036346", - "sourceFiles": [ - { "displayName": "Styles.cshtml", path: "../Views/DocumentEditor/Styles.cshtml" }, - { "displayName": "StylesController.cs", path: "../Controllers/DocumentEditor/StylesController.cs" } - ] - }, - { - "url": "BulletsAndNumbering", - "name": "Bullets and Numbering", - "category": "Editing Features", - "order": 10, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036347", - "sourceFiles": [ - { "displayName": "BulletsAndNumbering.cshtml", path: "../Views/DocumentEditor/BulletsAndNumbering.cshtml" }, - { "displayName": "BulletsAndNumberingController.cs", path: "../Controllers/DocumentEditor/BulletsAndNumberingController.cs" } - ] - }, - { - "url": "HyperlinksAndBookmarks", - "name": "Hyperlinks and Bookmarks", - "category": "Editing Features", - "order": 10, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036348", - "sourceFiles": [ - { "displayName": "HyperlinksAndBookmarks.cshtml", path: "../Views/DocumentEditor/HyperlinksAndBookmarks.cshtml" }, - { "displayName": "HyperlinksAndBookmarksController.cs", path: "../Controllers/DocumentEditor/HyperlinksAndBookmarksController.cs" } - ] - }, - { - "url": "TableFormat", - "name": "Table Formatting", - "category": "Editing Features", - "order": 10, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036349", - "sourceFiles": [ - { "displayName": "TableFormat.cshtml", path: "../Views/DocumentEditor/TableFormat.cshtml" }, - { "displayName": "TableFormatController.cs", path: "../Controllers/DocumentEditor/TableFormatController.cs" } - ] - }, - { - "url": "SectionFormat", - "name": "Section Formatting", - "category": "Editing Features", - "order": 10, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "00363450", - "sourceFiles": [ - { "displayName": "SectionFormat.cshtml", path: "../Views/DocumentEditor/SectionFormat.cshtml" }, - { "displayName": "SectionFormatController.cs", path: "../Controllers/DocumentEditor/SectionFormatController.cs" } - ] - }, - { - "url": "HeadersAndFooters", - "name": "Headers and Footers", - "category": "Editing Features", - "order": 10, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036351", - "sourceFiles": [ - { "displayName": "HeadersAndFooters.cshtml", path: "../Views/DocumentEditor/HeadersAndFooters.cshtml" }, - { "displayName": "HeadersAndFootersController.cs", path: "../Controllers/DocumentEditor/HeadersAndFootersController.cs" } - ] - }, - { - "url": "FormFields", - "name": "Form Fields", - "category": "Editing Features", - "order": 10, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036364", - "sourceFiles": [ - { "displayName": "FormFields.cshtml", path: "../Views/DocumentEditor/FormFields.cshtml" }, - { "displayName": "FormFieldsController.cs", path: "../Controllers/DocumentEditor/FormFieldsController.cs" } - ] - }, - { - "url": "MultipleColumns", - "name": "Multiple Columns", - "category": "Editing Features", - "order": 10, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036367", - "sourceFiles": [ - { "displayName": "MultipleColumns.cshtml", path: "../Views/DocumentEditor/MultipleColumns.cshtml" }, - { "displayName": "MultipleColumnsController.cs", path: "../Controllers/DocumentEditor/MultipleColumnsController.cs" } - ] - }, - { - "url": "Chart", - "name": "Chart Preservation", - "category": "Charts", - "order": 11, - "component": "DocumentEditor", - "dir": "DocumentEditor", - "parentId": "035", - "uid": "0036357", - "sourceFiles": [ - { "displayName": "Chart.cshtml", path: "../Views/DocumentEditor/Chart.cshtml" }, - { "displayName": "ChartController.cs", path: "../Controllers/DocumentEditor/ChartController.cs" } - ] - }, - ], - "order": 4, - "uid": "035" - } -] diff --git a/web.config b/web.config index 5809d4fe..87496a8d 100644 --- a/web.config +++ b/web.config @@ -16,11 +16,11 @@ - + @@ -49,4 +49,4 @@ - \ No newline at end of file + diff --git a/wwwroot/scripts/ej2.min.js.map b/wwwroot/scripts/ej2.min.js.map deleted file mode 100644 index ee326e59..00000000 --- a/wwwroot/scripts/ej2.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ej2.min.js","sources":["../node_modules/@syncfusion/ej2-base/src/util.js","../node_modules/@syncfusion/ej2-base/src/dom.js","../node_modules/@syncfusion/ej2-base/src/base.js","../node_modules/@syncfusion/ej2-base/src/notify-property-change.js","../node_modules/@syncfusion/ej2-base/src/animation.js","../node_modules/@syncfusion/ej2-base/src/internationalization.js","../node_modules/@syncfusion/ej2-base/src/template.js","../node_modules/@syncfusion/ej2-base/src/template-engine.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/utility/dom-util.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/utility/barcode-util.js","../node_modules/@syncfusion/ej2-buttons/src/common/common.js","../node_modules/@syncfusion/ej2-popups/src/common/position.js","../node_modules/@syncfusion/ej2-popups/src/common/collision.js","../node_modules/@syncfusion/ej2-popups/src/popup/popup.js","../node_modules/@syncfusion/ej2-popups/src/common/resize.js","../node_modules/@syncfusion/ej2-popups/src/spinner/spinner.js","../node_modules/@syncfusion/ej2-inputs/src/maskedtextbox/base/mask-base.js","../node_modules/@syncfusion/ej2-splitbuttons/src/common/common.js","../node_modules/@syncfusion/ej2-lists/src/common/list-base.js","../node_modules/@syncfusion/ej2-lists/src/sortable/sortable.js","../node_modules/@syncfusion/ej2-charts/src/common/model/theme.js","../node_modules/@syncfusion/ej2-svg-base/src/tooltip/interface.js","../node_modules/@syncfusion/ej2-svg-base/src/tooltip/helper.js","../node_modules/@syncfusion/ej2-charts/src/common/utils/helper.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/collections/utils.js","../node_modules/@syncfusion/ej2-file-utils/src/encoding.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/model/acc-base.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/utils/helper.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/utils/theme.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/utils/helper.js","../node_modules/@syncfusion/ej2-charts/src/sparkline/utils/helper.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/utils/helper.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/path-util.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/primitives/matrix.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/dictionary/basic-shapes.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/dictionary/common.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/dictionary/flow-shapes.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/connector.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/tooltip.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/connector.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/ruler/ruler.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/constraints-util.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/dictionary/umlactivity-shapes.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/container-interaction.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/swim-lane-util.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/diagram-util.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/uml-util.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/dom-util.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/utility/base-util.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/actions.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/bpmn.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/layout/symmetrical-layout.js","../node_modules/@syncfusion/ej2-dropdowns/src/common/incremental-search.js","../node_modules/@syncfusion/ej2-dropdowns/src/common/highlight-search.js","../node_modules/@syncfusion/ej2-dropdowns/src/multi-select/float-label.js","../node_modules/@syncfusion/ej2-drawings/src/drawing/primitives/matrix.js","../node_modules/@syncfusion/ej2-drawings/src/drawing/utility/dom-util.js","../node_modules/@syncfusion/ej2-drawings/src/drawing/utility/base-util.js","../node_modules/@syncfusion/ej2-drawings/src/drawing/utility/path-util.js","../node_modules/@syncfusion/ej2-drawings/src/drawing/rendering/canvas-renderer.js","../node_modules/@syncfusion/ej2-drawings/src/drawing/rendering/svg-renderer.js","../node_modules/@syncfusion/ej2-drawings/src/drawing/utility/diagram-util.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/common/utility.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/common/operations.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/pop-up/dialog.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/print.js","../node_modules/@syncfusion/ej2-grids/src/grid/base/util.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/aria-service.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/aggregate.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/datepicker-edit-cell.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/base/utils.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/utils.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/crud-actions.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/items.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/util.js","../node_modules/@syncfusion/ej2-richtexteditor/src/common/util.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/html-attributes.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/utils/helper.js","../node_modules/@syncfusion/ej2-inplace-editor/src/inplace-editor/base/util.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/utils/helper.js","../node_modules/@syncfusion/ej2-maps/src/maps/utils/helper.js","../node_modules/@syncfusion/ej2-pdfviewer/src/diagram/drawing-util.js","../node_modules/@syncfusion/ej2-pdfviewer/src/diagram/connector-util.js","../node_modules/@syncfusion/ej2-pdfviewer/src/diagram/action.js","../node_modules/@syncfusion/ej2-pdfviewer/src/diagram/dom-util.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/base/util.js","../node_modules/@syncfusion/ej2-schedule/src/recurrence-editor/date-generator.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/common/address.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/common/worker.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/common/math.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/integrations/number-format.js","../node_modules/@syncfusion/ej2-spreadsheet/src/calculate/common/module.js","../node_modules/@syncfusion/ej2-spreadsheet/src/calculate/common/module-loader.js","../node_modules/@syncfusion/ej2-spreadsheet/src/calculate/base/calculate.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/common/module.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/common/util.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/base/cell.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/base/row.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/base/column.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/base/data.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/base/sheet.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/common/module.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/common/util.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/utils/helper.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/model/theme.js","../node_modules/@syncfusion/ej2-base/src/ajax.js","../node_modules/@syncfusion/ej2-base/src/event-handler.js","../node_modules/@syncfusion/ej2-base/src/observer.js","../node_modules/@syncfusion/ej2-base/src/browser.js","../node_modules/@syncfusion/ej2-base/src/intl/intl-base.js","../node_modules/@syncfusion/ej2-base/src/module-loader.js","../node_modules/@syncfusion/ej2-base/src/child-property.js","../node_modules/@syncfusion/ej2-base/src/intl/parser-base.js","../node_modules/@syncfusion/ej2-base/src/intl/number-formatter.js","../node_modules/@syncfusion/ej2-base/src/hijri-parser.js","../node_modules/@syncfusion/ej2-base/src/intl/date-formatter.js","../node_modules/@syncfusion/ej2-base/src/component.js","../node_modules/@syncfusion/ej2-base/src/intl/date-parser.js","../node_modules/@syncfusion/ej2-base/src/intl/number-parser.js","../node_modules/@syncfusion/ej2-base/src/draggable.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/enum/enum.js","../node_modules/@syncfusion/ej2-base/src/droppable.js","../node_modules/@syncfusion/ej2-base/src/keyboard.js","../node_modules/@syncfusion/ej2-base/src/l10n.js","../node_modules/@syncfusion/ej2-base/src/touch.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/primitives/size.js","../node_modules/@syncfusion/ej2-popups/src/dialog/dialog.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/rendering/canvas-renderer.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/rendering/svg-renderer.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/rendering/renderer.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/barcode-base.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/primitives/rect.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/one-dimension.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/one-dimension/code128.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/one-dimension/code128B.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/one-dimension/code128C.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/primitives/margin.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/primitives/displaytext.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/one-dimension/code39.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/one-dimension/codabar.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/one-dimension/code128A.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/one-dimension/ean8.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/one-dimension/ean13.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/one-dimension/upcE.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/one-dimension/upcA.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/one-dimension/code11.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/one-dimension/code93.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/one-dimension/code93Extension.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/one-dimension/code32.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/one-dimension/code39Extension.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/barcode.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/primitives/point.js","../node_modules/@syncfusion/ej2-barcode-generator/src/barcode/rendering/canvas-interface.js","../node_modules/@syncfusion/ej2-barcode-generator/src/qrcode/qr-barcode-values.js","../node_modules/@syncfusion/ej2-barcode-generator/src/qrcode/qr-error-correction.js","../node_modules/@syncfusion/ej2-barcode-generator/src/qrcode/qr-code-util.js","../node_modules/@syncfusion/ej2-barcode-generator/src/qrcode/qrcode.js","../node_modules/@syncfusion/ej2-barcode-generator/src/datamatrix/datamatrix-util.js","../node_modules/@syncfusion/ej2-barcode-generator/src/datamatrix/datamatrix.js","../node_modules/@syncfusion/ej2-buttons/src/button/button.js","../node_modules/@syncfusion/ej2-buttons/src/check-box/check-box.js","../node_modules/@syncfusion/ej2-buttons/src/radio-button/radio-button.js","../node_modules/@syncfusion/ej2-buttons/src/switch/switch.js","../node_modules/@syncfusion/ej2-buttons/src/chips/chip-list.js","../node_modules/@syncfusion/ej2-buttons/src/chips/chip.js","../node_modules/@syncfusion/ej2-calendars/src/calendar/calendar.js","../node_modules/@syncfusion/ej2-calendars/src/calendar/islamic.js","../node_modules/@syncfusion/ej2-popups/src/tooltip/tooltip.js","../node_modules/@syncfusion/ej2-inputs/src/input/input.js","../node_modules/@syncfusion/ej2-inputs/src/numerictextbox/numerictextbox.js","../node_modules/@syncfusion/ej2-inputs/src/form-validator/form-validator.js","../node_modules/@syncfusion/ej2-inputs/src/maskedtextbox/maskedtextbox/maskedtextbox.js","../node_modules/@syncfusion/ej2-inputs/src/slider/slider.js","../node_modules/@syncfusion/ej2-inputs/src/uploader/uploader.js","../node_modules/@syncfusion/ej2-splitbuttons/src/drop-down-button/drop-down-button.js","../node_modules/@syncfusion/ej2-splitbuttons/src/split-button/split-button.js","../node_modules/@syncfusion/ej2-splitbuttons/src/progress-button/progress-button.js","../node_modules/@syncfusion/ej2-inputs/src/color-picker/color-picker.js","../node_modules/@syncfusion/ej2-inputs/src/textbox/textbox.js","../node_modules/@syncfusion/ej2-calendars/src/datepicker/datepicker.js","../node_modules/@syncfusion/ej2-data/src/query.js","../node_modules/@syncfusion/ej2-data/src/util.js","../node_modules/@syncfusion/ej2-data/src/adaptors.js","../node_modules/@syncfusion/ej2-data/src/manager.js","../node_modules/@syncfusion/ej2-lists/src/list-view/list-view.js","../node_modules/@syncfusion/ej2-calendars/src/timepicker/timepicker.js","../node_modules/@syncfusion/ej2-lists/src/list-view/virtualization.js","../node_modules/@syncfusion/ej2-calendars/src/daterangepicker/daterangepicker.js","../node_modules/@syncfusion/ej2-calendars/src/datetimepicker/datetimepicker.js","../calendars.ts","../node_modules/@syncfusion/ej2-charts/src/common/model/base.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-string.js","../node_modules/@syncfusion/ej2-svg-base/src/svg-render/svg-renderer.js","../node_modules/@syncfusion/ej2-svg-base/src/svg-render/canvas-renderer.js","../node_modules/@syncfusion/ej2-svg-base/src/tooltip/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/chart/utils/double-range.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/double-axis.js","../node_modules/@syncfusion/ej2-charts/src/common/model/constants.js","../node_modules/@syncfusion/ej2-charts/src/chart/model/chart-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/axis.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/cartesian-panel.js","../node_modules/@syncfusion/ej2-charts/src/chart/utils/get-data.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/chart-series.js","../node_modules/@syncfusion/ej2-charts/src/common/model/data.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/marker-explode.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/marker.js","../node_modules/@syncfusion/ej2-charts/src/common/legend/legend.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/technical-indicator.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/collections/dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-name.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-operators.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-dictionary-properties.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-number.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-array.js","../node_modules/@syncfusion/ej2-file-utils/src/save.js","../node_modules/@syncfusion/ej2-file-utils/src/xml-writer.js","../node_modules/@syncfusion/ej2-file-utils/src/stream-writer.js","../node_modules/@syncfusion/ej2-compression/src/compression-writer.js","../node_modules/@syncfusion/ej2-compression/src/zip-archive.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-stream.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-reference.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/actions/action.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/actions/uri-action.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-color.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/drawing/pdf-drawing.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/brushes/pdf-brush.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/brushes/pdf-solid-brush.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-string-format.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/string-layouter.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/string-tokenizer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-font.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-writer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-main-object-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/cross-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-document-base.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-catalog.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-cross-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-size.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-margins.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/image-decoder.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-settings.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/pdf-stream-writer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-pen.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-transformation-matrix.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/constants.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/collections/object-object-pair/dictionary.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-transparency.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/automatic-field-info-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/base/graphics-element.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/automatic-field.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/automatic-field-info.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/byte-array.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/primitives/pdf-boolean.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/unit-convertor.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/pdf-image.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/images/pdf-bitmap.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-table-info.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-name-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-name-record.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-head-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-metrics.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-horizontal-header-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-OS2-Table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-post-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-long-hor-metric.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-cmap-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-glyph-info.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-loca-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-apple-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-microsoft-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-trimmed-cmap-sub-table.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-glyph-header.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/input-output/big-endian-writer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/ttf-reader.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-font-metrics.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/unicode-true-type-font.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/rtl/rtl-text-shape.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/rtl/rtl-bidirectional.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/rtl-renderer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-graphics.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-layer.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/general/pdf-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-layer-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/pdf-template.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/pdf-resources.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-base.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/annotation-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/page-added-event-arguments.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section-page-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-document-template.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section-templates.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-section-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-document-page-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/general/pdf-cache-collection.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/pdf-document.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-standard-font-metrics-factory.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-standard-font.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/annotation.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/link-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/action-link-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/document-link-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/base/element-layouter.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/layout-element.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/base/text-layouter.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/general/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/figures/text-element.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/uri-annotation.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/annotations/pdf-text-web-link.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/pdf-numbers-convertor.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/pdf-template-value-pair.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/multiple-value-field.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/pdf-page-number-field.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/composite-field.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/single-value-field.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/document/automatic-fields/page-count-field.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/general/pdf-destination.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/tables/light-tables/enum.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/graphics/fonts/pdf-true-type-font.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/pages/pdf-page-template-element.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/styles/pdf-borders.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/styles/style.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/pdf-grid-cell.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/pdf-grid-column.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/pdf-grid-row.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/pdf-grid.js","../node_modules/@syncfusion/ej2-pdf-export/src/implementation/structured-elements/grid/layout/grid-layouter.js","../node_modules/@syncfusion/ej2-charts/src/common/utils/export.js","../node_modules/@syncfusion/ej2-charts/src/chart/chart.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/axis-helper.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/date-time-axis.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/category-axis.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/logarithmic-axis.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/date-time-category-axis.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/strip-line.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/line-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/line-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/column-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/column-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/multi-colored-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/bar-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/polar-radar-panel.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/polar-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/radar-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/stacking-bar-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/candle-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/stacking-column-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/step-line-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/step-area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/stacking-area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/stacking-line-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/scatter-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/range-column-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/waterfall-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/hilo-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/hilo-open-close-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/range-area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/bubble-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/spline-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/spline-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/histogram-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/spline-area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/indicator-base.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/sma-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/ema-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/tma-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/ad-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/atr-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/momentum-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/rsi-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/stochastic-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/bollinger-bands.js","../node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/macd-indicator.js","../node_modules/@syncfusion/ej2-charts/src/chart/trend-lines/trend-line.js","../node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/crosshair.js","../node_modules/@syncfusion/ej2-charts/src/common/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/zooming-toolkit.js","../node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/zooming.js","../node_modules/@syncfusion/ej2-charts/src/common/user-interaction/selection.js","../node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/selection.js","../node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/data-editing.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/data-label.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/error-bar.js","../node_modules/@syncfusion/ej2-charts/src/chart/legend/legend.js","../node_modules/@syncfusion/ej2-charts/src/common/annotation/annotation.js","../node_modules/@syncfusion/ej2-charts/src/chart/annotation/annotation.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/box-and-whisker-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/multi-colored-area-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/multi-colored-line-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/axis/multi-level-labels.js","../node_modules/@syncfusion/ej2-charts/src/common/scrollbar/scrollbar-elements.js","../node_modules/@syncfusion/ej2-charts/src/common/scrollbar/scrollbar.js","../node_modules/@syncfusion/ej2-charts/src/chart/series/pareto-series.js","../node_modules/@syncfusion/ej2-charts/src/chart/print-export/export.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/accumulation-base.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/pie-base.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/pie-series.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/accumulation.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/triangular-base.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/funnel-series.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/pyramid-series.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/legend.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/renderer/dataLabel.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/user-interaction/selection.js","../node_modules/@syncfusion/ej2-charts/src/accumulation-chart/annotation/annotation.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/renderer/chart-render.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/renderer/range-axis.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/model/range-base.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/model/theme.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/renderer/slider.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/range-navigator.js","../node_modules/@syncfusion/ej2-navigations/src/common/h-scroll.js","../node_modules/@syncfusion/ej2-navigations/src/common/v-scroll.js","../node_modules/@syncfusion/ej2-navigations/src/common/menu-base.js","../node_modules/@syncfusion/ej2-navigations/src/toolbar/toolbar.js","../node_modules/@syncfusion/ej2-navigations/src/accordion/accordion.js","../node_modules/@syncfusion/ej2-navigations/src/context-menu/context-menu.js","../node_modules/@syncfusion/ej2-navigations/src/menu/menu.js","../node_modules/@syncfusion/ej2-navigations/src/tab/tab.js","../node_modules/@syncfusion/ej2-navigations/src/treeview/treeview.js","../node_modules/@syncfusion/ej2-navigations/src/sidebar/sidebar.js","../node_modules/@syncfusion/ej2-charts/src/common/period-selector/period-selector.js","../node_modules/@syncfusion/ej2-charts/src/range-navigator/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/stock-chart/renderer/cartesian-chart.js","../node_modules/@syncfusion/ej2-charts/src/stock-chart/renderer/range-selector.js","../node_modules/@syncfusion/ej2-charts/src/stock-chart/renderer/toolbar-selector.js","../node_modules/@syncfusion/ej2-charts/src/stock-chart/model/base.js","../node_modules/@syncfusion/ej2-charts/src/stock-chart/renderer/stock-events.js","../node_modules/@syncfusion/ej2-charts/src/stock-chart/stock-chart.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/utils/utils.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/legend/legend.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/axis/axis.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/title/title.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/series/series.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/utils/area.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/axis/axisrender.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/series/marker.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/model/constant.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/series/datalabel.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/series/seriesrender.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/utils/export.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/utils/enum.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/smithchart.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/series/tooltip.js","../node_modules/@syncfusion/ej2-charts/src/smithchart/legend/legendrender.js","../node_modules/@syncfusion/ej2-charts/src/sparkline/model/base.js","../node_modules/@syncfusion/ej2-charts/src/sparkline/rendering/sparkline-renderer.js","../node_modules/@syncfusion/ej2-charts/src/sparkline/sparkline.js","../node_modules/@syncfusion/ej2-charts/src/sparkline/rendering/sparkline-tooltip.js","../charts.ts","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/model/theme.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/model/base.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/axes/axis.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/annotations/annotations.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/model/constants.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/axes/axis-renderer.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/axes/pointer-renderer.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/axes/axis-panel.js","../node_modules/@syncfusion/ej2-circulargauge/src/circular-gauge/circular-gauge.js","../circulargauge.ts","../node_modules/@syncfusion/ej2-diagrams/src/diagram/primitives/size.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/primitives/point.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/primitives/rect.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/enum/enum.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/appearance.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/elements/diagram-element.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/containers/container.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/elements/text-element.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/containers/canvas.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/elements/path-element.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/elements/image-element.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/elements/native-element.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/port.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/annotation.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/icon.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/node-base.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/elements/html-element.js","../node_modules/@syncfusion/ej2-diagrams/src/ruler/ruler.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/selector.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram/keyboard-commands.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/containers/grid.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/core/containers/stack-panel.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/node.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/rendering/canvas-renderer.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/rendering/svg-renderer.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/rendering/renderer.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram/page-settings.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/service.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram/grid-lines.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram/ruler-settings.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram/data-source.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/layout/layout-base.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/tool.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/connector-editing.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/event-handlers.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram/layer.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/command-manager.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/scroller.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/spatial-search/quad.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/interaction/spatial-search/spatial-search.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram/serialization-settings.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/diagram.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/print-settings.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/data-binding/data-binding.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/context-menu.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/connector-bridging.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/snapping.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/undo-redo.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/objects/layout-animation.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/layout/hierarchical-tree.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/layout/mind-map.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/layout/radial-tree.js","../node_modules/@syncfusion/ej2-diagrams/src/diagram/layout/complex-hierarchical-tree.js","../node_modules/@syncfusion/ej2-diagrams/src/symbol-palette/symbol-palette.js","../node_modules/@syncfusion/ej2-diagrams/src/overview/overview.js","../diagrams.ts","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/base/dictionary.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/base/unique-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/base/unique-formats.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/section-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/list/level-override.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/list/list.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/list-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/paragraph-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/character-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor/editor-helper.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/style.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/border.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/borders.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/shading.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/table-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/row-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/format/cell-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/page.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/spell-check/spell-checker.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/spellCheck-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/document-editor.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/print.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/context-menu.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/list/abstract-list.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/list/list-level.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/layout.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/render.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/text-helper.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/zooming.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/restrict-editing/add-user-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/restrict-editing/enforce-protection-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/restrict-editing/restrict-editing-pane.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/viewer.js","../node_modules/@syncfusion/ej2-office-chart/src/office-chart/chart.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/viewer/sfdt-reader.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/selection/selection-format.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/writer/html-export.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/selection/selection-helper.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/selection/selection.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/text-search.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/text-search-result.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/text-search-results.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/search-results.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/search.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/search/options-pane.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor/table-resizer.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor/editor.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor-history/history-helper.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor-history/base-history-info.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor/image-resizer.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor-history/history-info.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/editor-history/editor-history.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/writer/word-export.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/writer/text-export.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/writer/sfdt-export.js","../node_modules/@syncfusion/ej2-dropdowns/src/drop-down-base/drop-down-base.js","../node_modules/@syncfusion/ej2-dropdowns/src/drop-down-list/drop-down-list.js","../node_modules/@syncfusion/ej2-dropdowns/src/combo-box/combo-box.js","../node_modules/@syncfusion/ej2-dropdowns/src/auto-complete/auto-complete.js","../node_modules/@syncfusion/ej2-dropdowns/src/multi-select/multi-select.js","../node_modules/@syncfusion/ej2-dropdowns/src/multi-select/checkbox-selection.js","../node_modules/@syncfusion/ej2-dropdowns/src/list-box/list-box.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/hyperlink-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/table-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/bookmark-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/table-of-contents-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/page-setup-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/paragraph-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/list-view-model.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/list-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/style-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/bullets-and-numbering-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/font-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/table-properties-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/borders-and-shading-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/table-options-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/cell-options-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor/implementation/dialogs/styles-dialog.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/tool-bar/tool-bar.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/properties-pane/text-properties.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/properties-pane/paragraph-properties.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/properties-pane/text-properties-pane.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/properties-pane/header-footer-pane.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/properties-pane/image-properties-pane.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/properties-pane/table-of-content-pane.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/properties-pane/table-properties-pane.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/properties-pane/status-bar.js","../node_modules/@syncfusion/ej2-documenteditor/src/document-editor-container/document-editor-container.js","../documenteditor.ts","../node_modules/@syncfusion/ej2-drawings/src/drawing/enum/enum.js","../node_modules/@syncfusion/ej2-drawings/src/drawing/core/appearance.js","../node_modules/@syncfusion/ej2-drawings/src/drawing/primitives/size.js","../node_modules/@syncfusion/ej2-drawings/src/drawing/primitives/rect.js","../node_modules/@syncfusion/ej2-drawings/src/drawing/core/elements/drawing-element.js","../node_modules/@syncfusion/ej2-drawings/src/drawing/core/containers/container.js","../node_modules/@syncfusion/ej2-drawings/src/drawing/core/elements/text-element.js","../node_modules/@syncfusion/ej2-drawings/src/drawing/core/containers/canvas.js","../node_modules/@syncfusion/ej2-drawings/src/drawing/core/elements/image-element.js","../node_modules/@syncfusion/ej2-drawings/src/drawing/core/elements/path-element.js","../node_modules/@syncfusion/ej2-drawings/src/drawing/primitives/point.js","../node_modules/@syncfusion/ej2-drawings/src/drawing/rendering/renderer.js","../dropdowns.ts","../node_modules/@syncfusion/ej2-grids/src/grid/base/enum.js","../node_modules/@syncfusion/ej2-excel-export/src/cell-style.js","../node_modules/@syncfusion/ej2-excel-export/src/cell.js","../node_modules/@syncfusion/ej2-excel-export/src/column.js","../node_modules/@syncfusion/ej2-excel-export/src/row.js","../node_modules/@syncfusion/ej2-excel-export/src/worksheets.js","../node_modules/@syncfusion/ej2-excel-export/src/worksheet.js","../node_modules/@syncfusion/ej2-excel-export/src/value-formatter.js","../node_modules/@syncfusion/ej2-excel-export/src/csv-helper.js","../node_modules/@syncfusion/ej2-excel-export/src/blob-helper.js","../node_modules/@syncfusion/ej2-excel-export/src/workbook.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/ajax-settings.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/toolbar-settings.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/search-settings.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/details-view-settings.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/contextMenu-settings.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/navigation-pane-settings.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/upload-settings.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/base/classes.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/base/constant.js","../node_modules/@syncfusion/ej2-layouts/src/splitter/splitter.js","../node_modules/@syncfusion/ej2-layouts/src/dashboard-layout/dashboard-layout.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/layout/large-icons-view.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/actions/breadcrumb-bar.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/pop-up/context-menu.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/models/default-locale.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/base/file-manager.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/actions/toolbar.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/layout/navigation-pane.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/value-formatter.js","../node_modules/@syncfusion/ej2-grids/src/grid/models/column.js","../node_modules/@syncfusion/ej2-grids/src/grid/base/constant.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/checkbox-filter.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/edit.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/data.js","../node_modules/@syncfusion/ej2-grids/src/grid/models/row.js","../node_modules/@syncfusion/ej2-grids/src/grid/models/cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/cell-merge-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/row-model-generator.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/summary-model-generator.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/group-model-generator.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/content-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/stacked-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/indent-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/caption-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/expand-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-indent-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/detail-header-indent-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/detail-expand-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-drag-drop-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-drag-header-indent-render.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/render.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/cell-render-factory.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/service-locator.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/renderer-factory.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/width-controller.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/focus-strategy.js","../node_modules/@syncfusion/ej2-grids/src/grid/models/page-settings.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/selection.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/search.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/show-hide.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/scroll.js","../node_modules/@syncfusion/ej2-grids/src/grid/models/aggregate.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/clipboard.js","../node_modules/@syncfusion/ej2-grids/src/grid/base/grid.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/sort.js","../node_modules/@syncfusion/ej2-grids/src/pager/numeric-container.js","../node_modules/@syncfusion/ej2-grids/src/pager/pager-message.js","../node_modules/@syncfusion/ej2-grids/src/pager/pager.js","../node_modules/@syncfusion/ej2-grids/src/pager/pager-dropdown.js","../node_modules/@syncfusion/ej2-grids/src/pager/external-message.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/page.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-menu-operator.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/string-filter-ui.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/number-filter-ui.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/boolean-filter-ui.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/date-filter-ui.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-menu-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/excel-filter.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/filter.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/resize.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/reorder.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/row-reorder.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/group.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/detail-row.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/toolbar.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/footer-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/summary-cell-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/intersection-observer.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/virtual-row-model-generator.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/virtual-content-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/virtual-scroll.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/inline-edit-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/batch-edit-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/dialog-edit-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/edit-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/boolean-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/dropdown-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/numeric-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/default-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/normal-edit.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/inline-edit.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/batch-edit.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/dialog-edit.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/template-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/column-chooser.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/export-helper.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/excel-export.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/pdf-export.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/command-column-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/command-column.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/context-menu.js","../node_modules/@syncfusion/ej2-grids/src/grid/services/freeze-row-model-generator.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/freeze-renderer.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/freeze.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/column-menu.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/foreign-key.js","../node_modules/@syncfusion/ej2-grids/src/grid/actions/logger.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/autocomplete-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/combobox-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/multiselect-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/timepicker-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/toggleswitch-edit-cell.js","../node_modules/@syncfusion/ej2-grids/src/grid/renderer/inputmask-edit-cell.js","../node_modules/@syncfusion/ej2-filemanager/src/file-manager/layout/details-view.js","../filemanager.ts","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/enum.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/base/date-processor.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/base/task-processor.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/base/css-constants.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/actions/chart-scroll.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/base/gantt-chart.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/renderer/timeline.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/column.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/filter-settings.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/textwrap-settings.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/base/constant.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/selection.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/column-menu.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/print.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/search-settings.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/selection-settings.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/renderer/render.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/sort.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/base/data.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/rowdragdrop.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/page-settings.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/enum.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/summary.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/edit-settings.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/models/sort-settings.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/base/treegrid.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/reorder.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/resize.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/renderer/virtual-row-model-generator.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/filter.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/excel-export.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/pdf-export.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/page.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/toolbar.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/summary.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/context-menu.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/edit.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/command-column.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/detail-row.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/renderer/virtual-tree-content-render.js","../node_modules/@syncfusion/ej2-treegrid/src/treegrid/actions/virtual-scroll.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/models/column.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/base/tree-grid.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/models/day-working-time.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/models/add-dialog-field-settings.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/models/edit-dialog-field-settings.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/models/edit-settings.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/models/event-marker.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/models/filter-settings.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/models/search-settings.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/models/holiday.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/models/label-settings.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/models/selection-settings.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/models/splitter-settings.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/models/task-fields.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/models/timeline-settings.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/models/tooltip-settings.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/models/sort-settings.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/renderer/chart-rows.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/actions/dependency.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/renderer/connector-line.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/actions/connector-line-edit.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/base/splitter.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/renderer/tooltip.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/base/gantt.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/actions/cell-edit.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/renderer/edit-tooltip.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/actions/taskbar-edit.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/constant.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/classes.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/default-locale.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/toolbar-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/base-toolbar.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/dropdown-buttons.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/services/service-locator.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/services/renderer-factory.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/toolbar-action.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/toolbar.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/keyboard.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/color-picker.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/base-quick-toolbar.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/popup-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/quick-toolbar.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/count.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/markdown-selection.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/markdown-toolbar-status.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/execute-command-callback.js","../node_modules/@syncfusion/ej2-richtexteditor/src/common/constant.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/formatter/formatter.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/base/constant.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/lists.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/formats.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/md-selection-formats.js","../node_modules/@syncfusion/ej2-richtexteditor/src/common/config.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/undo.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/link.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/table.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/plugin/clearformat.js","../node_modules/@syncfusion/ej2-richtexteditor/src/markdown-parser/base/markdown-parser.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/formatter/markdown-formatter.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/markdown-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/markdown-editor.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/base/constant.js","../node_modules/@syncfusion/ej2-richtexteditor/src/selection/selection.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/dom-node.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/lists.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/formats.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/insert-methods.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/nodecutter.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/inserthtml.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/link.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/alignments.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/indents.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/base/classes.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/image.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/table.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/isformatted.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/selection-commands.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/selection-exec.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/inserthtml-exec.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/clearformat.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/clearformat-exec.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/undo.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/ms-word-clean-up.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/insert-text.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/base/editor-manager.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/formatter/html-formatter.js","../node_modules/@syncfusion/ej2-richtexteditor/src/editor-manager/plugin/toolbar-status.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/html-toolbar-status.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/content-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/iframe-content-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/sanitize-helper.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/html-editor.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/paste-clean-up.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/render.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/link-module.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/image-module.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/view-source.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/table-module.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/interface.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/toolbar-settings.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/iframe-settings.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/models/inline-mode.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/actions/full-screen.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/renderer/dialog-renderer.js","../node_modules/@syncfusion/ej2-richtexteditor/src/rich-text-editor/base/rich-text-editor.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/actions/dialog-edit.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/actions/edit.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/actions/column-reorder.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/actions/column-resize.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/actions/filter.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/actions/sort.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/actions/selection.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/actions/toolbar.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/base/constant.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/renderer/nonworking-day.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/renderer/event-marker.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/actions/day-markers.js","../node_modules/@syncfusion/ej2-gantt/src/gantt/actions/context-menu.js","../gantt.ts","../grids.ts","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/model/theme.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/model/base.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/utils/colorMapping.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/axis/axis.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/axis/axis-helpers.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/series/series.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/utils/tooltip.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/datasource/twodimensional.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/legend/legend.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/heatmap.js","../node_modules/@syncfusion/ej2-heatmap/src/heatmap/datasource/adaptor.js","../heatmap.ts","../node_modules/@syncfusion/ej2-inplace-editor/src/inplace-editor/base/events.js","../node_modules/@syncfusion/ej2-inplace-editor/src/inplace-editor/base/models.js","../node_modules/@syncfusion/ej2-inplace-editor/src/inplace-editor/base/classes.js","../node_modules/@syncfusion/ej2-inplace-editor/src/inplace-editor/base/inplace-editor.js","../node_modules/@syncfusion/ej2-inplace-editor/src/inplace-editor/modules/base-module.js","../node_modules/@syncfusion/ej2-inplace-editor/src/inplace-editor/modules/auto-complete.js","../node_modules/@syncfusion/ej2-inplace-editor/src/inplace-editor/modules/color-picker.js","../node_modules/@syncfusion/ej2-inplace-editor/src/inplace-editor/modules/combo-box.js","../node_modules/@syncfusion/ej2-inplace-editor/src/inplace-editor/modules/date-range-picker.js","../node_modules/@syncfusion/ej2-inplace-editor/src/inplace-editor/modules/multi-select.js","../node_modules/@syncfusion/ej2-inplace-editor/src/inplace-editor/modules/rte.js","../node_modules/@syncfusion/ej2-inplace-editor/src/inplace-editor/modules/slider.js","../node_modules/@syncfusion/ej2-inplace-editor/src/inplace-editor/modules/time-picker.js","../inplace-editor.ts","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/model/base.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/axes/axis.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/axes/axis-panel.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/model/constant.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/axes/animation.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/axes/axis-renderer.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/annotations/annotations.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/linear-gauge.js","../node_modules/@syncfusion/ej2-lineargauge/src/linear-gauge/model/theme.js","../lineargauge.ts","../lists.ts","../node_modules/@syncfusion/ej2-maps/src/maps/model/theme.js","../node_modules/@syncfusion/ej2-maps/src/maps/model/base.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/marker.js","../node_modules/@syncfusion/ej2-maps/src/maps/model/constants.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/bing-map.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/color-mapping.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/layer-panel.js","../node_modules/@syncfusion/ej2-maps/src/maps/user-interaction/annotation.js","../node_modules/@syncfusion/ej2-maps/src/maps/utils/export.js","../node_modules/@syncfusion/ej2-maps/src/maps/maps.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/bubble.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/data-label.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/navigation-selected-line.js","../node_modules/@syncfusion/ej2-maps/src/maps/layers/legend.js","../node_modules/@syncfusion/ej2-maps/src/maps/user-interaction/highlight.js","../node_modules/@syncfusion/ej2-maps/src/maps/user-interaction/selection.js","../node_modules/@syncfusion/ej2-maps/src/maps/user-interaction/tooltip.js","../node_modules/@syncfusion/ej2-maps/src/maps/user-interaction/zoom.js","../maps.ts","../node_modules/@syncfusion/ej2-notifications/src/toast/toast.js","../node_modules/@syncfusion/ej2-pdfviewer/src/diagram/pdf-annotation.js","../node_modules/@syncfusion/ej2-pdfviewer/src/diagram/selector.js","../node_modules/@syncfusion/ej2-pdfviewer/src/diagram/tools.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/annotation/annotation.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/annotation/link-annotation.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/annotation/text-markup-annotation.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/annotation/measure-annotation.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/annotation/shape-annotation.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/annotation/stamp-annotation.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/annotation/sticky-notes-annotation.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/base/navigation-pane.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/base/pdfviewer-base.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/base/text-layer.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/base/context-menu.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/base/ajax-handler.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/magnification/magnification.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/navigation/page-navigation.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/thumbnail-view/thumbnail-view.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/toolbar/toolbar.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/toolbar/annotation-toolbar.js","../node_modules/@syncfusion/ej2-pdfviewer/src/diagram/drawing.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/pdfviewer.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/bookmark-view/bookmark-view.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/text-selection/text-selection.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/text-search/text-search.js","../node_modules/@syncfusion/ej2-pdfviewer/src/pdfviewer/print/print.js","../pdfviewer.ts","../node_modules/@syncfusion/ej2-pivotview/src/base/util.js","../node_modules/@syncfusion/ej2-pivotview/src/base/engine.js","../node_modules/@syncfusion/ej2-pivotview/src/common/base/constant.js","../node_modules/@syncfusion/ej2-pivotview/src/common/base/css-constant.js","../node_modules/@syncfusion/ej2-pivotview/src/common/popups/aggregate-menu.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/renderer/render.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/model/datasourcesettings.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/model/gridsettings.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/actions/excel-export.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/actions/pdf-export.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/actions/keyboard.js","../node_modules/@syncfusion/ej2-pivotview/src/common/popups/context-menu.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/actions/virtualscroll.js","../node_modules/@syncfusion/ej2-pivotview/src/common/popups/drillthrough-dialog.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/actions/drill-through.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotchart/base/pivotchart.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/model/chartsettings.js","../node_modules/@syncfusion/ej2-pivotview/src/base/olap/mdx-query.js","../node_modules/@syncfusion/ej2-pivotview/src/base/olap/engine.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotview/base/pivotview.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/keyboard.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/event-base.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/node-state-modified.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/dataSource-update.js","../node_modules/@syncfusion/ej2-pivotview/src/common/popups/error-dialog.js","../node_modules/@syncfusion/ej2-pivotview/src/common/popups/filter-dialog.js","../node_modules/@syncfusion/ej2-pivotview/src/common/base/pivot-common.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotfieldlist/renderer/dialog-renderer.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotfieldlist/renderer/tree-renderer.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotfieldlist/renderer/axis-table-renderer.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/pivot-button.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotfieldlist/renderer/axis-field-renderer.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotfieldlist/renderer/renderer.js","../node_modules/@syncfusion/ej2-pivotview/src/pivotfieldlist/base/field-list.js","../node_modules/@syncfusion/ej2-pivotview/src/common/calculatedfield/calculated-field.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/field-list.js","../node_modules/@syncfusion/ej2-pivotview/src/common/actions/common.js","../node_modules/@syncfusion/ej2-pivotview/src/common/grouping-bar/axis-field-renderer.js","../node_modules/@syncfusion/ej2-pivotview/src/common/grouping-bar/grouping-bar.js","../node_modules/@syncfusion/ej2-pivotview/src/common/conditionalformatting/conditional-formatting.js","../node_modules/@syncfusion/ej2-pivotview/src/common/popups/toolbar.js","../node_modules/@syncfusion/ej2-pivotview/src/common/popups/formatting-dialog.js","../pivotview.ts","../node_modules/@syncfusion/ej2-querybuilder/src/query-builder/query-builder.js","../richtexteditor.ts","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/view-base.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/base/constant.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/base/css-constant.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/header-renderer.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/scroll.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/touch.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/keyboard.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/data.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/timezone/timezone.js","../node_modules/@syncfusion/ej2-schedule/src/common/calendar-util.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/event-base.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/crud.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/popups/form-validator.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/popups/quick-popups.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/popups/event-tooltip.js","../node_modules/@syncfusion/ej2-schedule/src/recurrence-editor/recurrence-editor.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/popups/event-window.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/virtual-scroll.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/renderer.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/work-hours.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/time-scale.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/quick-info-templates.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/header-rows.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/field-options.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/fields.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/event-settings.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/group.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/models/resources.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/base/resource.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/base/schedule.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/action-base.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/month.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/resize.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/timeline-view.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/drag.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/actions/work-cells.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/vertical-view.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/vertical-view.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/day.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/week.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/work-week.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/month.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/event-renderer/agenda-base.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/agenda.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/month-agenda.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/timeline-header-row.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/timeline-view.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/renderer/timeline-month.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/exports/calendar-export.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/exports/calendar-import.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/exports/excel-export.js","../node_modules/@syncfusion/ej2-schedule/src/schedule/exports/print.js","../schedule.ts","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/common/enum.js","../node_modules/@syncfusion/ej2-splitbuttons/src/button-group/button-group.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/common/event.js","../node_modules/@syncfusion/ej2-spreadsheet/src/calculate/common/enum.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/integrations/data-bind.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/integrations/open.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/workers/save-worker.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/integrations/save.js","../node_modules/@syncfusion/ej2-spreadsheet/src/calculate/common/common.js","../node_modules/@syncfusion/ej2-spreadsheet/src/calculate/formulas/basic.js","../node_modules/@syncfusion/ej2-spreadsheet/src/calculate/base/parser.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/integrations/formula.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/actions/cell-format.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/actions/edit.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/common/basic-module.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/common/all-module.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/common/class.js","../node_modules/@syncfusion/ej2-spreadsheet/src/workbook/base/workbook.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/common/event.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/actions/clipboard.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/actions/edit.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/actions/selection.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/actions/scroll.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/actions/virtual-scroll.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/actions/keyboard-navigation.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/actions/keyboard-shortcut.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/actions/cell-format.js","../node_modules/@syncfusion/ej2-spreadsheet/src/ribbon/ribbon.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/integrations/color-picker.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/integrations/ribbon.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/integrations/formula-bar.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/integrations/formula.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/integrations/sheet-tabs.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/integrations/open.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/integrations/save.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/integrations/context-menu.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/integrations/number-format.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/common/basic-module.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/common/all-module.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/common/class.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/common/constant.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/renderer/sheet.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/renderer/row.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/renderer/cell.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/renderer/render.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/services/service-locator.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/services/dialog.js","../node_modules/@syncfusion/ej2-spreadsheet/src/spreadsheet/base/spreadsheet.js","../spreadsheet.ts","../treegrid.ts","../node_modules/@syncfusion/ej2-treemap/src/treemap/model/constants.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/model/base.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/layout/render-panel.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/utils/export.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/treemap.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/layout/legend.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/user-interaction/highlight-selection.js","../node_modules/@syncfusion/ej2-treemap/src/treemap/user-interaction/tooltip.js","../treemap.ts"],"sourcesContent":["var instances = 'ej2_instances';\nvar uid = 0;\n/**\n * Create Instance from constructor function with desired parameters.\n * @param {Function} classFunction - Class function to which need to create instance\n * @param {any[]} params - Parameters need to passed while creating instance\n * @return {any}\n * @private\n */\nexport function createInstance(classFunction, params) {\n var arrayParam = params;\n arrayParam.unshift(undefined);\n return new (Function.prototype.bind.apply(classFunction, arrayParam));\n}\n/**\n * To run a callback function immediately after the browser has completed other operations.\n * @param {Function} handler - callback function to be triggered.\n * @return {Function}\n * @private\n */\nexport function setImmediate(handler) {\n var unbind;\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n intCrypto.getRandomValues(num);\n var secret = 'ej2' + combineArray(num);\n var messageHandler = function (event) {\n if (event.source === window && typeof event.data === 'string' && event.data.length <= 32 && event.data === secret) {\n handler();\n unbind();\n }\n };\n window.addEventListener('message', messageHandler, false);\n window.postMessage(secret, '*');\n return unbind = function () {\n window.removeEventListener('message', messageHandler);\n handler = messageHandler = secret = undefined;\n };\n}\n/**\n * To get nameSpace value from the desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} obj - Object to get the inner object value.\n * @return {any}\n * @private\n */\nexport function getValue(nameSpace, obj) {\n /* tslint:disable no-any */\n var value = obj;\n var splits = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n for (var i = 0; i < splits.length && !isUndefined(value); i++) {\n value = value[splits[i]];\n }\n return value;\n}\n/**\n * To set value for the nameSpace in desired object.\n * @param {string} nameSpace - String value to the get the inner object\n * @param {any} value - Value that you need to set.\n * @param {any} obj - Object to get the inner object value.\n * @return {void}\n * @private\n */\nexport function setValue(nameSpace, value, obj) {\n var keys = nameSpace.replace(/\\[/g, '.').replace(/\\]/g, '').split('.');\n var start = obj || {};\n var fromObj = start;\n var i;\n var length = keys.length;\n var key;\n for (i = 0; i < length; i++) {\n key = keys[i];\n if (i + 1 === length) {\n fromObj[key] = value === undefined ? {} : value;\n }\n else if (isNullOrUndefined(fromObj[key])) {\n fromObj[key] = {};\n }\n fromObj = fromObj[key];\n }\n return start;\n}\n/**\n * Delete an item from Object\n * @param {any} obj - Object in which we need to delete an item.\n * @param {string} params - String value to the get the inner object\n * @return {void}\n * @private\n */\nexport function deleteObject(obj, key) {\n delete obj[key];\n}\n/**\n * Check weather the given argument is only object.\n * @param {any} obj - Object which is need to check.\n * @return {boolean}\n * @private\n */\nexport function isObject(obj) {\n var objCon = {};\n return (!isNullOrUndefined(obj) && obj.constructor === objCon.constructor);\n}\n/**\n * To get enum value by giving the string.\n * @param {any} enumObject - Enum object.\n * @param {string} enumValue - Enum value to be searched\n * @return {any}\n * @private\n */\nexport function getEnumValue(enumObject, enumValue) {\n return enumObject[enumValue];\n}\n/**\n * Merge the source object into destination object.\n * @param {any} source - source object which is going to merge with destination object\n * @param {any} destination - object need to be merged\n * @return {void}\n * @private\n */\nexport function merge(source, destination) {\n if (!isNullOrUndefined(destination)) {\n var temrObj = source;\n var tempProp = destination;\n var keys = Object.keys(destination);\n var deepmerge = 'deepMerge';\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (!isNullOrUndefined(temrObj[deepmerge]) && (temrObj[deepmerge].indexOf(key) !== -1) &&\n (isObject(tempProp[key]) || Array.isArray(tempProp[key]))) {\n extend(temrObj[key], temrObj[key], tempProp[key], true);\n }\n else {\n temrObj[key] = tempProp[key];\n }\n }\n }\n}\n/**\n * Extend the two object with newer one.\n * @param {any} copied - Resultant object after merged\n * @param {Object} first - First object need to merge\n * @param {Object} second - Second object need to merge\n * @return {Object}\n * @private\n */\nexport function extend(copied, first, second, deep) {\n var result = copied || {};\n var length = arguments.length;\n if (deep) {\n length = length - 1;\n }\n var _loop_1 = function (i) {\n if (!arguments_1[i]) {\n return \"continue\";\n }\n var obj1 = arguments_1[i];\n Object.keys(obj1).forEach(function (key) {\n var src = result[key];\n var copy = obj1[key];\n var clone;\n if (deep && (isObject(copy) || Array.isArray(copy))) {\n if (isObject(copy)) {\n clone = src ? src : {};\n result[key] = extend({}, clone, copy, deep);\n }\n else {\n clone = src ? src : [];\n result[key] = extend([], clone, copy, deep);\n }\n }\n else {\n result[key] = copy;\n }\n });\n };\n var arguments_1 = arguments;\n for (var i = 1; i < length; i++) {\n _loop_1(i);\n }\n return result;\n}\n/**\n * To check whether the object is null or undefined.\n * @param {Object} value - To check the object is null or undefined\n * @return {boolean}\n * @private\n */\nexport function isNullOrUndefined(value) {\n return value === undefined || value === null;\n}\n/**\n * To check whether the object is undefined.\n * @param {Object} value - To check the object is undefined\n * @return {boolean}\n * @private\n */\nexport function isUndefined(value) {\n return ('undefined' === typeof value);\n}\n/**\n * To return the generated unique name\n * @param {string} definedName - To concatenate the unique id to provided name\n * @return {string}\n * @private\n */\nexport function getUniqueID(definedName) {\n return definedName + '_' + uid++;\n}\n/**\n * It limits the rate at which a function can fire. The function will fire only once every provided second instead of as quickly.\n * @param {Function} eventFunction - Specifies the function to run when the event occurs\n * @param {number} delay - A number that specifies the milliseconds for function delay call option\n * @return {Function}\n * @private\n */\nexport function debounce(eventFunction, delay) {\n var out;\n // tslint:disable-next-line\n return function () {\n var _this = this;\n var args = arguments;\n var later = function () {\n out = null;\n return eventFunction.apply(_this, args);\n };\n clearTimeout(out);\n out = setTimeout(later, delay);\n };\n}\n// Added since lint ignored after added '//tslint:disable-next-line' \n/* tslint:disable:no-any */\n/**\n * To convert the object to string for query url\n * @param {Object} data\n * @returns string\n * @private\n */\nexport function queryParams(data) {\n var array = [];\n var keys = Object.keys(data);\n for (var _i = 0, keys_2 = keys; _i < keys_2.length; _i++) {\n var key = keys_2[_i];\n array.push(encodeURIComponent(key) + '=' + encodeURIComponent('' + data[key]));\n }\n return array.join('&');\n}\n/**\n * To check whether the given array contains object.\n * @param {T[]} value- Specifies the T type array to be checked.\n * @private\n */\nexport function isObjectArray(value) {\n var parser = Object.prototype.toString;\n if (parser.call(value) === '[object Array]') {\n if (parser.call(value[0]) === '[object Object]') {\n return true;\n }\n }\n return false;\n}\n/**\n * To check whether the child element is descendant to parent element or parent and child are same element.\n * @param{Element} - Specifies the child element to compare with parent.\n * @param{Element} - Specifies the parent element.\n * @return boolean\n * @private\n */\nexport function compareElementParent(child, parent) {\n var node = child;\n if (node === parent) {\n return true;\n }\n else if (node === document || !node) {\n return false;\n }\n else {\n return compareElementParent(node.parentNode, parent);\n }\n}\n/**\n * To throw custom error message.\n * @param{string} - Specifies the error message to be thrown.\n * @private\n */\nexport function throwError(message) {\n try {\n throw new Error(message);\n }\n catch (e) {\n throw e.message + '\\n' + e.stack;\n }\n}\n/**\n * This function is used to print given element\n * @param{Element} element - Specifies the print content element.\n * @param{Window} printWindow - Specifies the print window.\n * @private\n */\nexport function print(element, printWindow) {\n var div = document.createElement('div');\n var links = [].slice.call(document.getElementsByTagName('head')[0].querySelectorAll('link, style'));\n var reference = '';\n if (isNullOrUndefined(printWindow)) {\n printWindow = window.open('', 'print', 'height=452,width=1024,tabbar=no');\n }\n div.appendChild(element.cloneNode(true));\n for (var i = 0, len = links.length; i < len; i++) {\n reference += links[i].outerHTML;\n }\n printWindow.document.write(' ' + reference + '' + div.innerHTML +\n '' + '');\n printWindow.document.close();\n printWindow.focus();\n // tslint:disable-next-line\n var interval = setInterval(function () {\n if (printWindow.ready) {\n printWindow.print();\n printWindow.close();\n clearInterval(interval);\n }\n }, 500);\n return printWindow;\n}\n/**\n * Function to normalize the units applied to the element.\n * @param {number|string} value\n * @return {string} result\n * @private\n */\nexport function formatUnit(value) {\n var result = value + '';\n if (result === 'auto' || result.indexOf('%') !== -1 || result.indexOf('px') !== -1) {\n return result;\n }\n return result + 'px';\n}\n/**\n * Function to check whether the platform is blazor or not.\n * @return {boolean} result\n * @private\n */\nexport function isBlazor() {\n return window && Object.keys(window).indexOf('Blazor') >= 0;\n}\n/**\n * Function to convert xPath to DOM element in blazor platform\n * @return {HTMLElement} result\n * @param {HTMLElement | object} element\n * @private\n */\nexport function getElement(element) {\n var xPath = 'xPath';\n if (!(element instanceof Node) && isBlazor() && !isNullOrUndefined(element[xPath])) {\n return document.evaluate(element[xPath], document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;\n }\n return element;\n}\n/**\n * Function to fetch the Instances of a HTML element for the given component.\n * @param {string | HTMLElement} element\n * @param {any} component\n * @return {Object} inst\n * @private\n */\n// tslint:disable-next-line\nexport function getInstance(element, component) {\n // tslint:disable-next-line:no-any\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[instances]) {\n for (var _i = 0, _a = elem[instances]; _i < _a.length; _i++) {\n var inst = _a[_i];\n if (inst instanceof component) {\n return inst;\n }\n }\n }\n return null;\n}\n/**\n * Function to add instances for the given element.\n * @param {string | HTMLElement} element\n * @param {Object} instance\n * @return {void}\n * @private\n */\nexport function addInstance(element, instance) {\n // tslint:disable-next-line:no-any\n var elem = (typeof (element) === 'string') ? document.querySelector(element) : element;\n if (elem[instances]) {\n elem[instances].push(instance);\n }\n else {\n elem[instances] = [instance];\n }\n}\n/**\n * Function to generate the unique id.\n * @return {any}\n * @private\n */\n// tslint:disable-next-line:no-any\nexport function uniqueID() {\n // tslint:disable-next-line:no-any\n if ((typeof window) === 'undefined') {\n return;\n }\n // tslint:disable-next-line:no-any\n var num = new Uint16Array(5);\n var intCrypto = window.msCrypto || window.crypto;\n return intCrypto.getRandomValues(num);\n}\nfunction combineArray(num) {\n var ret = '';\n for (var i = 0; i < 5; i++) {\n ret += (i ? ',' : '') + num[i];\n }\n return ret;\n}\n","/**\n * Functions related to dom operations.\n */\nimport { EventHandler } from './event-handler';\nimport { isNullOrUndefined } from './util';\nvar SVG_REG = /^svg|^path|^g/;\n/**\n * Function to create Html element.\n * @param tagName - Name of the tag, id and class names.\n * @param properties - Object to set properties in the element.\n * @param properties.id - To set the id to the created element.\n * @param properties.className - To add classes to the element.\n * @param properties.innerHTML - To set the innerHTML to element.\n * @param properties.styles - To set the some custom styles to element.\n * @param properties.attrs - To set the attributes to element.\n * @private\n */\nexport function createElement(tagName, properties) {\n //tslint:disable-next-line\n var element = (SVG_REG.test(tagName) ? document.createElementNS('http://www.w3.org/2000/svg', tagName) : document.createElement(tagName));\n if (typeof (properties) === 'undefined') {\n return element;\n }\n element.innerHTML = (properties.innerHTML ? properties.innerHTML : '');\n if (properties.className !== undefined) {\n element.className = properties.className;\n }\n if (properties.id !== undefined) {\n element.id = properties.id;\n }\n if (properties.styles !== undefined) {\n element.setAttribute('style', properties.styles);\n }\n if (properties.attrs !== undefined) {\n attributes(element, properties.attrs);\n }\n return element;\n}\n/**\n * The function used to add the classes to array of elements\n * @param {Element[]|NodeList} elements - An array of elements that need to add a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @private\n */\nexport function addClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n for (var _b = 0, classList_1 = classList; _b < classList_1.length; _b++) {\n var className = classList_1[_b];\n if (!ele.classList.contains(className)) {\n ele.classList.add(className);\n }\n }\n }\n return elements;\n}\n/**\n * The function used to add the classes to array of elements\n * @param {Element[]|NodeList} elements - An array of elements that need to remove a list of classes\n * @param {string|string[]} classes - String or array of string that need to add an individual element as a class\n * @private\n */\nexport function removeClass(elements, classes) {\n var classList = getClassList(classes);\n for (var _i = 0, _a = elements; _i < _a.length; _i++) {\n var ele = _a[_i];\n if (ele.className !== '') {\n for (var _b = 0, classList_2 = classList; _b < classList_2.length; _b++) {\n var className = classList_2[_b];\n ele.classList.remove(className);\n }\n }\n }\n return elements;\n}\nfunction getClassList(classes) {\n var classList = [];\n if (typeof classes === 'string') {\n classList.push(classes);\n }\n else {\n classList = classes;\n }\n return classList;\n}\n/**\n * The function used to check element is visible or not.\n * @param {Element|Node} element - An element the need to check visibility\n * @private\n */\nexport function isVisible(element) {\n var ele = element;\n return (ele.style.visibility === '' && ele.offsetWidth > 0);\n}\n/**\n * The function used to insert an array of elements into a first of the element.\n * @param {Element[]|NodeList} fromElements - An array of elements that need to prepend.\n * @param {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function prepend(fromElements, toElement, isEval) {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.insertBefore(docFrag, toElement.firstElementChild);\n if (isEval) {\n executeScript(toElement);\n }\n return fromElements;\n}\n/**\n * The function used to insert an array of elements into last of the element.\n * @param {Element[]|NodeList} fromElements - An array of elements that need to append.\n * @param {Element} toElement - An element that is going to prepend.\n * @private\n */\nexport function append(fromElements, toElement, isEval) {\n var docFrag = document.createDocumentFragment();\n for (var _i = 0, _a = fromElements; _i < _a.length; _i++) {\n var ele = _a[_i];\n docFrag.appendChild(ele);\n }\n toElement.appendChild(docFrag);\n if (isEval) {\n executeScript(toElement);\n }\n return fromElements;\n}\n/**\n * The function is used to evaluate script from Ajax request\n * @param ele - An element is going to evaluate the script\n */\nfunction executeScript(ele) {\n var eleArray = ele.querySelectorAll('script');\n eleArray.forEach(function (element) {\n var script = document.createElement('script');\n script.text = element.innerHTML;\n document.head.appendChild(script);\n detach(script);\n });\n}\n/**\n * The function used to remove the element from the\n * @param {Element|Node|HTMLElement} element - An element that is going to detach from the Dom\n * @private\n */\nexport function detach(element) {\n var parentNode = element.parentNode;\n return parentNode.removeChild(element);\n}\n/**\n * The function used to remove the element from Dom also clear the bounded events\n * @param {Element|Node|HTMLElement} element - An element remove from the Dom\n * @private\n */\nexport function remove(element) {\n var parentNode = element.parentNode;\n EventHandler.clearEvents(element);\n parentNode.removeChild(element);\n}\n/**\n * The function helps to set multiple attributes to an element\n * @param {Element|Node} element - An element that need to set attributes.\n * @param {{[key:string]:string}} attributes - JSON Object that is going to as attributes.\n * @private\n */\nexport function attributes(element, attributes) {\n var keys = Object.keys(attributes);\n var ele = element;\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n ele.setAttribute(key, attributes[key]);\n }\n return ele;\n}\n/**\n * The function selects the element from giving context.\n * @param {string} selector - Selector string need fetch element from the\n * @param {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\nexport function select(selector, context) {\n if (context === void 0) { context = document; }\n return context.querySelector(selector);\n}\n/**\n * The function selects an array of element from the given context.\n * @param {string} selector - Selector string need fetch element from the\n * @param {Document|Element=document} context - It is an optional type, That specifies a Dom context.\n * @private\n */\nexport function selectAll(selector, context) {\n if (context === void 0) { context = document; }\n var nodeList = context.querySelectorAll(selector);\n return nodeList;\n}\n/**\n * Returns single closest parent element based on class selector.\n * @param {Element} element - An element that need to find the closest element.\n * @param {string} selector - A classSelector of closest element.\n * @private\n */\nexport function closest(element, selector) {\n var el = element;\n if (typeof el.closest === 'function') {\n return el.closest(selector);\n }\n while (el && el.nodeType === 1) {\n if (matches(el, selector)) {\n return el;\n }\n el = el.parentNode;\n }\n return null;\n}\n/**\n * Returns all sibling elements of the given element.\n * @param {Element|Node} element - An element that need to get siblings.\n * @private\n */\nexport function siblings(element) {\n var siblings = [];\n var childNodes = Array.prototype.slice.call(element.parentNode.childNodes);\n for (var _i = 0, childNodes_1 = childNodes; _i < childNodes_1.length; _i++) {\n var curNode = childNodes_1[_i];\n if (curNode.nodeType === Node.ELEMENT_NODE && element !== curNode) {\n siblings.push(curNode);\n }\n }\n return siblings;\n}\n/**\n * set the value if not exist. Otherwise set the existing value\n * @param {HTMLElement} element - An element to which we need to set value.\n * @param {string} property - Property need to get or set.\n * @param {string} value - value need to set.\n * @private\n */\nexport function getAttributeOrDefault(element, property, value) {\n var attrVal = element.getAttribute(property);\n if (isNullOrUndefined(attrVal)) {\n element.setAttribute(property, value.toString());\n attrVal = value;\n }\n return attrVal;\n}\n/**\n * Set the style attributes to Html element.\n * @param {HTMLElement} element - Element which we want to set attributes\n * @param {any} attrs - Set the given attributes to element\n * @return {void}\n * @private\n */\nexport function setStyleAttribute(element, attrs) {\n if (attrs !== undefined) {\n Object.keys(attrs).forEach(function (key) {\n // tslint:disable-next-line:no-any\n element.style[key] = attrs[key];\n });\n }\n}\n/**\n * Method for add and remove classes to a dom element.\n * @param {Element} element - Element for add and remove classes\n * @param {string[]} addClasses - List of classes need to be add to the element\n * @param {string[]} removeClasses - List of classes need to be remove from the element\n * @return {void}\n * @private\n */\nexport function classList(element, addClasses, removeClasses) {\n addClass([element], addClasses);\n removeClass([element], removeClasses);\n}\n/**\n * Method to check whether the element matches the given selector.\n * @param {Element} element - Element to compare with the selector.\n * @param {string} selector - String selector which element will satisfy.\n * @return {void}\n * @private\n */\nexport function matches(element, selector) {\n var matches = element.matches || element.msMatchesSelector || element.webkitMatchesSelector;\n if (matches) {\n return matches.call(element, selector);\n }\n else {\n return [].indexOf.call(document.querySelectorAll(selector), element) !== -1;\n }\n}\n","import { isUndefined, isNullOrUndefined, merge, setImmediate, setValue, getValue } from './util';\nimport { addClass, removeClass } from './dom';\nimport { Observer } from './observer';\nvar isColEName = new RegExp('\\]');\n/* tslint:enable:no-any */\n/**\n * Base library module is common module for Framework modules like touch,keyboard and etc.,\n * @private\n */\nvar Base = /** @class */ (function () {\n /**\n * Base constructor accept options and element\n */\n function Base(options, element) {\n this.isProtectedOnChange = true;\n this.properties = {};\n this.changedProperties = {};\n this.oldProperties = {};\n this.refreshing = false;\n // tslint:disable-next-line:no-empty\n this.finalUpdate = function () { };\n this.childChangedProperties = {};\n this.modelObserver = new Observer(this);\n if (!isUndefined(element)) {\n if ('string' === typeof (element)) {\n this.element = document.querySelector(element);\n }\n else {\n this.element = element;\n }\n if (!isNullOrUndefined(this.element)) {\n this.isProtectedOnChange = false;\n this.addInstance();\n }\n }\n if (!isUndefined(options)) {\n this.setProperties(options, true);\n }\n this.isDestroyed = false;\n }\n /** Property base section */\n /**\n * Function used to set bunch of property at a time.\n * @private\n * @param {Object} prop - JSON object which holds components properties.\n * @param {boolean} muteOnChange? - Specifies to true when we set properties.\n */\n Base.prototype.setProperties = function (prop, muteOnChange) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = !!muteOnChange;\n merge(this, prop);\n if (muteOnChange !== true) {\n merge(this.changedProperties, prop);\n this.dataBind();\n }\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.isProtectedOnChange = prevDetection;\n };\n ;\n /**\n * Calls for child element data bind\n * @param {Object} obj\n * @param {Object} parent\n * @returns {void}\n */\n // tslint:disable-next-line:no-any\n Base.callChildDataBind = function (obj, parent) {\n var keys = Object.keys(obj);\n for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n var key = keys_1[_i];\n if (parent[key] instanceof Array) {\n for (var _a = 0, _b = parent[key]; _a < _b.length; _a++) {\n var obj_1 = _b[_a];\n if (obj_1.dataBind !== undefined) {\n obj_1.dataBind();\n }\n }\n }\n else {\n parent[key].dataBind();\n }\n }\n };\n Base.prototype.clearChanges = function () {\n this.finalUpdate();\n this.changedProperties = {};\n this.oldProperties = {};\n this.childChangedProperties = {};\n };\n /**\n * Bind property changes immediately to components\n */\n Base.prototype.dataBind = function () {\n Base.callChildDataBind(this.childChangedProperties, this);\n if (Object.getOwnPropertyNames(this.changedProperties).length) {\n var prevDetection = this.isProtectedOnChange;\n var newChanges = this.changedProperties;\n var oldChanges = this.oldProperties;\n this.clearChanges();\n this.isProtectedOnChange = true;\n this.onPropertyChanged(newChanges, oldChanges);\n this.isProtectedOnChange = prevDetection;\n }\n };\n ;\n Base.prototype.saveChanges = function (key, newValue, oldValue) {\n if (this.isProtectedOnChange) {\n return;\n }\n this.oldProperties[key] = oldValue;\n this.changedProperties[key] = newValue;\n this.finalUpdate();\n this.finalUpdate = setImmediate(this.dataBind.bind(this));\n };\n ;\n /** Event Base Section */\n /**\n * Adds the handler to the given event listener.\n * @param {string} eventName - A String that specifies the name of the event\n * @param {Function} listener - Specifies the call to run when the event occurs.\n * @return {void}\n */\n Base.prototype.addEventListener = function (eventName, handler) {\n this.modelObserver.on(eventName, handler);\n };\n /**\n * Removes the handler from the given event listener.\n * @param {string} eventName - A String that specifies the name of the event to remove\n * @param {Function} listener - Specifies the function to remove\n * @return {void}\n */\n Base.prototype.removeEventListener = function (eventName, handler) {\n this.modelObserver.off(eventName, handler);\n };\n /**\n * Triggers the handlers in the specified event.\n * @private\n * @param {string} eventName - Specifies the event to trigger for the specified component properties.\n * Can be a custom event, or any of the standard events.\n * @param {Event} eventProp - Additional parameters to pass on to the event properties\n * @param {Function} successHandler - this function will invoke after event successfully triggered\n * @param {Function} errorHandler - this function will invoke after event if it failured to call.\n * @return {void}\n */\n Base.prototype.trigger = function (eventName, eventProp, successHandler, errorHandler) {\n var _this = this;\n if (this.isDestroyed !== true) {\n var prevDetection = this.isProtectedOnChange;\n this.isProtectedOnChange = false;\n var data = this.modelObserver.notify(eventName, eventProp, successHandler, errorHandler);\n if (isColEName.test(eventName)) {\n var handler = getValue(eventName, this);\n if (handler) {\n var blazor = 'Blazor';\n if (window[blazor]) {\n var promise = handler.call(this, eventProp);\n if (promise && typeof promise.then === 'function') {\n if (!successHandler) {\n data = promise;\n }\n else {\n promise.then(function (data) {\n if (successHandler) {\n data = typeof data === 'string' && _this.modelObserver.isJson(data) ?\n JSON.parse(data) : data;\n successHandler.call(_this, data);\n }\n }).catch(function (data) {\n if (errorHandler) {\n data = typeof data === 'string' && _this.modelObserver.isJson(data) ? JSON.parse(data) : data;\n errorHandler.call(_this, data);\n }\n });\n }\n }\n else if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n else {\n handler.call(this, eventProp);\n if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n }\n else if (successHandler) {\n successHandler.call(this, eventProp);\n }\n }\n this.isProtectedOnChange = prevDetection;\n return data;\n }\n };\n /**\n * To maintain instance in base class\n */\n Base.prototype.addInstance = function () {\n // Add module class to the root element\n var moduleClass = 'e-' + this.getModuleName().toLowerCase();\n addClass([this.element], ['e-lib', moduleClass]);\n if (!isNullOrUndefined(this.element.ej2_instances)) {\n this.element.ej2_instances.push(this);\n }\n else {\n setValue('ej2_instances', [this], this.element);\n }\n };\n /**\n * To remove the instance from the element\n */\n Base.prototype.destroy = function () {\n var _this = this;\n this.element.ej2_instances =\n this.element.ej2_instances.filter(function (i) { return i !== _this; });\n removeClass([this.element], ['e-' + this.getModuleName()]);\n if (this.element.ej2_instances.length === 0) {\n // Remove module class from the root element\n removeClass([this.element], ['e-lib']);\n }\n this.clearChanges();\n this.modelObserver.destroy();\n this.isDestroyed = true;\n };\n return Base;\n}());\nexport { Base };\n/**\n * Global function to get the component instance from the rendered element.\n * @param elem Specifies the HTMLElement or element id string.\n * @param comp Specifies the component module name or Component.\n */\n// tslint:disable-next-line:no-any\nexport function getComponent(elem, comp) {\n var instance;\n var i;\n var ele = typeof elem === 'string' ? document.getElementById(elem) : elem;\n for (i = 0; i < ele.ej2_instances.length; i++) {\n instance = ele.ej2_instances[i];\n if (typeof comp === 'string') {\n var compName = instance.getModuleName();\n if (comp === compName) {\n return instance;\n }\n }\n else {\n // tslint:disable-next-line:no-any\n if (instance instanceof comp) {\n return instance;\n }\n }\n }\n return undefined;\n}\n","import { createInstance, isUndefined, merge, extend, getValue } from './util';\n/**\n * Returns the Class Object\n * @param {ClassObject} instance - instance of ClassObject\n * @param {string} curKey - key of the current instance\n * @param {Object} defaultValue - default Value\n * @param {Object[]} type\n */\nfunction getObject(instance, curKey, defaultValue, type) {\n if (!instance.properties.hasOwnProperty(curKey) || !(instance.properties[curKey] instanceof type)) {\n instance.properties[curKey] = createInstance(type, [instance, curKey, defaultValue]);\n }\n return instance.properties[curKey];\n}\n/**\n * Returns object array\n * @param {ClassObject} instance\n * @param {string} curKey\n * @param {Object[]} defaultValue\n * @param type\n * @param {boolean} isSetter\n * @returns {Object[]}\n */\nfunction getObjectArray(instance, curKey, defaultValue, type, isSetter, isFactory) {\n var result = [];\n var len = defaultValue.length;\n for (var i = 0; i < len; i++) {\n var curType = type;\n if (isFactory) {\n curType = type(defaultValue[i], instance);\n }\n if (isSetter) {\n var inst = createInstance(curType, [instance, curKey, {}, true]);\n inst.setProperties(defaultValue[i], true);\n result.push(inst);\n }\n else {\n result.push(createInstance(curType, [instance, curKey, defaultValue[i], true]));\n }\n }\n return result;\n}\n/**\n * Returns the properties of the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertyGetter(defaultValue, curKey) {\n return function () {\n if (!this.properties.hasOwnProperty(curKey)) {\n this.properties[curKey] = defaultValue;\n }\n return this.properties[curKey];\n };\n}\n/**\n * Set the properties for the object\n * @param {Object} defaultValue\n * @param {string} curKey\n */\nfunction propertySetter(defaultValue, curKey) {\n return function (newValue) {\n if (this.properties[curKey] !== newValue) {\n var oldVal = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n this.saveChanges(curKey, newValue, oldVal);\n this.properties[curKey] = newValue;\n }\n };\n}\n/**\n * Returns complex objects\n */\nfunction complexGetter(defaultValue, curKey, type) {\n return function () {\n return getObject(this, curKey, defaultValue, type);\n };\n}\n/**\n * Sets complex objects\n */\nfunction complexSetter(defaultValue, curKey, type) {\n return function (newValue) {\n getObject(this, curKey, defaultValue, type).setProperties(newValue);\n };\n}\nfunction complexFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (this.properties.hasOwnProperty(curKey)) {\n return this.properties[curKey];\n }\n else {\n return getObject(this, curKey, defaultValue, curType);\n }\n };\n}\nfunction complexFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var curType = type(newValue, this);\n getObject(this, curKey, defaultValue, curType).setProperties(newValue);\n };\n}\nfunction complexArrayGetter(defaultValue, curKey, type) {\n return function () {\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, type, false);\n this.properties[curKey] = defCollection;\n }\n return this.properties[curKey];\n };\n}\nfunction complexArraySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var oldValueCollection = getObjectArray(this, curKey, defaultValue, type, false);\n var newValCollection = getObjectArray(this, curKey, newValue, type, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[curKey] = newValCollection;\n };\n}\nfunction complexArrayFactorySetter(defaultValue, curKey, type) {\n return function (newValue) {\n var oldValueCollection = this.properties.hasOwnProperty(curKey) ? this.properties[curKey] : defaultValue;\n var newValCollection = getObjectArray(this, curKey, newValue, type, true, true);\n this.saveChanges(curKey, newValCollection, oldValueCollection);\n this.properties[curKey] = newValCollection;\n };\n}\nfunction complexArrayFactoryGetter(defaultValue, curKey, type) {\n return function () {\n var curType = type({});\n if (!this.properties.hasOwnProperty(curKey)) {\n var defCollection = getObjectArray(this, curKey, defaultValue, curType, false);\n this.properties[curKey] = defCollection;\n }\n return this.properties[curKey];\n };\n}\n/**\n * Method used to create property. General syntax below.\n * @param {T} defaultValue? - Specifies the default value of property.\n * ```\n * @Property('TypeScript')\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Property(defaultValue) {\n return function (target, key) {\n var propertyDescriptor = {\n set: propertySetter(defaultValue, key),\n get: propertyGetter(defaultValue, key),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'prop', defaultValue);\n };\n}\n/**\n * Method used to create complex property. General syntax below.\n * @param {T} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Complex({},Type)\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Complex(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexSetter(defaultValue, key, type),\n get: complexGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex Factory property. General syntax below.\n * @param {Function} defaultType - Specifies the default value of property.\n * @param {Function} type - Specifies the class factory type of complex object.\n * ```\n * @ComplexFactory(defaultType, factoryFunction)\n * propertyName: Type1 | Type2;\n * ```\n * @private\n */\nexport function ComplexFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexFactorySetter({}, key, type),\n get: complexFactoryGetter({}, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'complexProp', {}, type);\n };\n}\n/**\n * Method used to create complex array property. General syntax below.\n * @param {T[]} defaultValue - Specifies the default value of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function Collection(defaultValue, type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArraySetter(defaultValue, key, type),\n get: complexArrayGetter(defaultValue, key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', defaultValue, type);\n };\n}\n/**\n * Method used to create complex factory array property. General syntax below.\n * @param {T[]} defaultType - Specifies the default type of property.\n * @param {Function} type - Specifies the class type of complex object.\n * ```\n * @Collection([], Type);\n * propertyName: Type;\n * ```\n * @private\n */\nexport function CollectionFactory(type) {\n return function (target, key) {\n var propertyDescriptor = {\n set: complexArrayFactorySetter([], key, type),\n get: complexArrayFactoryGetter([], key, type),\n enumerable: true,\n configurable: true\n };\n //new property creation\n Object.defineProperty(target, key, propertyDescriptor);\n addPropertyCollection(target, key, 'colProp', {}, type);\n };\n}\n/**\n * Method used to create event property. General syntax below.\n * @param {Function} defaultValue? - Specifies the default value of property.\n * @param {boolean} isComplex? - Specifies the whether it is complex object.\n * ```\n * @Event(()=>{return true;})\n * ```\n * @private\n */\nexport function Event() {\n return function (target, key) {\n var eventDescriptor = {\n set: function (newValue) {\n var oldValue = this.properties[key];\n if (oldValue !== newValue) {\n var finalContext = getParentContext(this, key);\n if (isUndefined(oldValue) === false) {\n finalContext.context.removeEventListener(finalContext.prefix, oldValue);\n }\n finalContext.context.addEventListener(finalContext.prefix, newValue);\n this.properties[key] = newValue;\n }\n },\n get: propertyGetter(undefined, key),\n enumerable: true,\n configurable: true\n };\n Object.defineProperty(target, key, eventDescriptor);\n addPropertyCollection(target, key, 'event');\n };\n}\n/**\n * NotifyPropertyChanges is triggers the call back when the property has been changed.\n *\n * ```\n * @NotifyPropertyChanges\n * class DemoClass implements INotifyPropertyChanged {\n *\n * @Property()\n * property1: string;\n *\n * dataBind: () => void;\n *\n * constructor() { }\n *\n * onPropertyChanged(newProp: any, oldProp: any) {\n * // Called when property changed\n * }\n * }\n * ```\n * @private\n */\nexport function NotifyPropertyChanges(classConstructor) {\n /** Need to code */\n}\n/**\n * Method used to create the builderObject for the target component.\n * @private\n */\nfunction addPropertyCollection(target, key, propertyType, defaultValue, type) {\n if (isUndefined(target.propList)) {\n target.propList = {\n props: [],\n complexProps: [],\n colProps: [],\n events: [],\n propNames: [],\n complexPropNames: [],\n colPropNames: [],\n eventNames: []\n };\n }\n /* tslint:disable no-any */\n target.propList[propertyType + 's'].push({\n propertyName: key,\n defaultValue: defaultValue,\n type: type\n });\n target.propList[propertyType + 'Names'].push(key);\n /* tslint:enable no-any */\n}\n/**\n * Returns an object containing the builder properties\n * @param {Function} component\n * @private\n */\nfunction getBuilderProperties(component) {\n if (isUndefined(component.prototype.builderObject)) {\n component.prototype.builderObject = {\n properties: {}, propCollections: [], add: function () {\n this.isPropertyArray = true;\n this.propCollections.push(extend({}, this.properties, {}));\n }\n };\n var rex = /complex/;\n for (var _i = 0, _a = Object.keys(component.prototype.propList); _i < _a.length; _i++) {\n var key = _a[_i];\n var _loop_1 = function (prop) {\n if (rex.test(key)) {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n var childType = {};\n merge(childType, getBuilderProperties(prop.type));\n value(childType);\n var tempValue;\n if (!childType.isPropertyArray) {\n tempValue = extend({}, childType.properties, {});\n }\n else {\n tempValue = childType.propCollections;\n }\n this.properties[prop.propertyName] = tempValue;\n childType.properties = {};\n childType.propCollections = [];\n childType.isPropertyArray = false;\n return this;\n };\n }\n else {\n component.prototype.builderObject[prop.propertyName] = function (value) {\n this.properties[prop.propertyName] = value;\n return this;\n };\n }\n };\n for (var _b = 0, _c = component.prototype.propList[key]; _b < _c.length; _b++) {\n var prop = _c[_b];\n _loop_1(prop);\n }\n }\n }\n return component.prototype.builderObject;\n}\n/**\n * Method used to create builder for the components\n * @param {any} component -specifies the target component for which builder to be created.\n * @private\n */\nexport function CreateBuilder(component) {\n var builderFunction = function (element) {\n this.element = element;\n return this;\n };\n var instanceFunction = function (element) {\n if (!builderFunction.prototype.hasOwnProperty('create')) {\n builderFunction.prototype = getBuilderProperties(component);\n builderFunction.prototype.create = function () {\n var temp = extend({}, {}, this.properties);\n this.properties = {};\n return new component(temp, this.element);\n };\n }\n return new builderFunction(element);\n };\n return instanceFunction;\n}\n/**\n * Returns parent options for the object\n * @param {Object} context\n * @param {string} prefix\n * @private\n */\nfunction getParentContext(context, prefix) {\n if (context.hasOwnProperty('parentObj') === false) {\n return { context: context, prefix: prefix };\n }\n else {\n var curText = getValue('propName', context);\n if (curText) {\n prefix = curText + '-' + prefix;\n }\n return getParentContext(getValue('parentObj', context), prefix);\n }\n}\n","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n }\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { createElement, selectAll, closest } from './dom';\nimport { Base } from './base';\nimport { Browser } from './browser';\nimport { EventHandler } from './event-handler';\nimport { Property, NotifyPropertyChanges, Event } from './notify-property-change';\n/**\n * The Animation framework provide options to animate the html DOM elements\n * ```typescript\n * let animeObject = new Animation({\n * name: 'SlideLeftIn',\n * duration: 1000\n * });\n * animeObject.animate('#anime1');\n * animeObject.animate('#anime2', { duration: 500 });\n * ```\n */\nvar Animation = /** @class */ (function (_super) {\n __extends(Animation, _super);\n function Animation(options) {\n var _this = _super.call(this, options, undefined) || this;\n /**\n * @private\n */\n _this.easing = {\n ease: 'cubic-bezier(0.250, 0.100, 0.250, 1.000)',\n linear: 'cubic-bezier(0.250, 0.250, 0.750, 0.750)',\n easeIn: 'cubic-bezier(0.420, 0.000, 1.000, 1.000)',\n easeOut: 'cubic-bezier(0.000, 0.000, 0.580, 1.000)',\n easeInOut: 'cubic-bezier(0.420, 0.000, 0.580, 1.000)',\n elasticInOut: 'cubic-bezier(0.5,-0.58,0.38,1.81)',\n elasticIn: 'cubic-bezier(0.17,0.67,0.59,1.81)',\n elasticOut: 'cubic-bezier(0.7,-0.75,0.99,1.01)'\n };\n return _this;\n }\n Animation_1 = Animation;\n /**\n * Applies animation to the current element.\n * @param {string | HTMLElement} element - Element which needs to be animated.\n * @param {AnimationModel} options - Overriding default animation settings.\n * @return {void}\n */\n Animation.prototype.animate = function (element, options) {\n options = !options ? {} : options;\n var model = this.getModel(options);\n if (typeof element === 'string') {\n var elements = Array.prototype.slice.call(selectAll(element, document));\n for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n var element_1 = elements_1[_i];\n model.element = element_1;\n Animation_1.delayAnimation(model);\n }\n }\n else {\n model.element = element;\n Animation_1.delayAnimation(model);\n }\n };\n /**\n * Stop the animation effect on animated element.\n * @param {HTMLElement} element - Element which needs to be stop the animation.\n * @param {AnimationOptions} model - Handling the animation model at stop function.\n * @return {void}\n */\n Animation.stop = function (element, model) {\n element.style.animation = '';\n element.removeAttribute('e-animate');\n var animationId = element.getAttribute('e-animation-id');\n if (animationId) {\n var frameId = parseInt(animationId, 10);\n cancelAnimationFrame(frameId);\n element.removeAttribute('e-animation-id');\n }\n if (model && model.end) {\n model.end.call(this, model);\n }\n };\n /**\n * Set delay to animation element\n * @param {AnimationModel} model\n * @returns {void}\n */\n Animation.delayAnimation = function (model) {\n if (model.delay) {\n setTimeout(function () { Animation_1.applyAnimation(model); }, model.delay);\n }\n else {\n Animation_1.applyAnimation(model);\n }\n };\n /**\n * Triggers animation\n * @param {AnimationModel} model\n * @returns {void}\n */\n Animation.applyAnimation = function (model) {\n var _this = this;\n model.timeStamp = 0;\n var step = 0;\n var timerId = 0;\n var startTime = 0;\n var prevTimeStamp = 0;\n var duration = model.duration;\n model.element.setAttribute('e-animate', 'true');\n var startAnimation = function (timeStamp) {\n try {\n if (timeStamp) {\n // let step: number = model.timeStamp = timeStamp - startTime;\n /** phantomjs workaround for timestamp fix */\n prevTimeStamp = prevTimeStamp === 0 ? timeStamp : prevTimeStamp;\n model.timeStamp = (timeStamp + model.timeStamp) - prevTimeStamp;\n prevTimeStamp = timeStamp;\n /** phantomjs workaround end */\n // trigger animation begin event\n if (!step && model.begin) {\n model.begin.call(_this, model);\n }\n step = step + 1;\n var avg = model.timeStamp / step;\n if (model.timeStamp < duration && model.timeStamp + avg < duration && model.element.getAttribute('e-animate')) {\n // apply animation effect to the current element \n model.element.style.animation = model.name + ' ' + model.duration + 'ms ' + model.timingFunction;\n if (model.progress) {\n model.progress.call(_this, model);\n }\n // repeat requestAnimationFrame \n requestAnimationFrame(startAnimation);\n }\n else {\n // clear requestAnimationFrame\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n model.element.removeAttribute('e-animate');\n model.element.style.animation = '';\n if (model.end) {\n model.end.call(_this, model);\n }\n }\n }\n else {\n startTime = performance.now();\n // set initial requestAnimationFrame\n timerId = requestAnimationFrame(startAnimation);\n model.element.setAttribute('e-animation-id', timerId.toString());\n }\n }\n catch (e) {\n cancelAnimationFrame(timerId);\n model.element.removeAttribute('e-animation-id');\n if (model.fail) {\n model.fail.call(_this, e);\n }\n }\n };\n startAnimation();\n };\n /**\n * Returns Animation Model\n * @param {AnimationModel} options\n * @returns {AnimationModel}\n */\n Animation.prototype.getModel = function (options) {\n return {\n name: options.name || this.name,\n delay: options.delay || this.delay,\n duration: (options.duration !== undefined ? options.duration : this.duration),\n begin: options.begin || this.begin,\n end: options.end || this.end,\n fail: options.fail || this.fail,\n progress: options.progress || this.progress,\n timingFunction: this.easing[options.timingFunction] ? this.easing[options.timingFunction] :\n (options.timingFunction || this.easing[this.timingFunction])\n };\n };\n /**\n * @private\n */\n Animation.prototype.onPropertyChanged = function (newProp, oldProp) {\n // no code needed\n };\n /**\n * Returns module name as animation\n * @private\n */\n Animation.prototype.getModuleName = function () {\n return 'animation';\n };\n /**\n * @private\n */\n Animation.prototype.destroy = function () {\n //Override base destroy;\n };\n var Animation_1;\n __decorate([\n Property('FadeIn')\n ], Animation.prototype, \"name\", void 0);\n __decorate([\n Property(400)\n ], Animation.prototype, \"duration\", void 0);\n __decorate([\n Property('ease')\n ], Animation.prototype, \"timingFunction\", void 0);\n __decorate([\n Property(0)\n ], Animation.prototype, \"delay\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"progress\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"begin\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"end\", void 0);\n __decorate([\n Event()\n ], Animation.prototype, \"fail\", void 0);\n Animation = Animation_1 = __decorate([\n NotifyPropertyChanges\n ], Animation);\n return Animation;\n}(Base));\nexport { Animation };\n/**\n * Ripple provides material theme's wave effect when an element is clicked\n * ```html\n *
\n * \n * ```\n * @private\n * @param HTMLElement element - Target element\n * @param RippleOptions rippleOptions - Ripple options .\n */\nexport function rippleEffect(element, rippleOptions, done) {\n var rippleModel = getRippleModel(rippleOptions);\n if (rippleModel.rippleFlag === false || (rippleModel.rippleFlag === undefined && !isRippleEnabled)) {\n return Function;\n }\n element.setAttribute('data-ripple', 'true');\n EventHandler.add(element, 'mousedown', rippleHandler, { parent: element, rippleOptions: rippleModel });\n EventHandler.add(element, 'mouseup', rippleUpHandler, { parent: element, rippleOptions: rippleModel, done: done });\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n if (Browser.isPointer) {\n EventHandler.add(element, 'transitionend', rippleLeaveHandler, { parent: element, rippleOptions: rippleModel });\n }\n return (function () {\n element.removeAttribute('data-ripple');\n EventHandler.remove(element, 'mousedown', rippleHandler);\n EventHandler.remove(element, 'mouseup', rippleUpHandler);\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n EventHandler.remove(element, 'transitionend', rippleLeaveHandler);\n });\n}\nfunction getRippleModel(rippleOptions) {\n var rippleModel = {\n selector: rippleOptions && rippleOptions.selector ? rippleOptions.selector : null,\n ignore: rippleOptions && rippleOptions.ignore ? rippleOptions.ignore : null,\n rippleFlag: rippleOptions && rippleOptions.rippleFlag,\n isCenterRipple: rippleOptions && rippleOptions.isCenterRipple,\n duration: rippleOptions && rippleOptions.duration ? rippleOptions.duration : 350\n };\n return rippleModel;\n}\n/**\n * Handler for ripple event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleHandler(e) {\n var target = (e.target);\n var selector = this.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (this.rippleOptions && closest(target, this.rippleOptions.ignore))) {\n return;\n }\n var offset = element.getBoundingClientRect();\n var offsetX = e.pageX - document.body.scrollLeft;\n var offsetY = e.pageY - ((!document.body.scrollTop && document.documentElement) ?\n document.documentElement.scrollTop : document.body.scrollTop);\n var pageX = Math.max(Math.abs(offsetX - offset.left), Math.abs(offsetX - offset.right));\n var pageY = Math.max(Math.abs(offsetY - offset.top), Math.abs(offsetY - offset.bottom));\n var radius = Math.sqrt(pageX * pageX + pageY * pageY);\n var diameter = radius * 2 + 'px';\n var x = offsetX - offset.left - radius;\n var y = offsetY - offset.top - radius;\n if (this.rippleOptions && this.rippleOptions.isCenterRipple) {\n x = 0;\n y = 0;\n diameter = '100%';\n }\n element.classList.add('e-ripple');\n var duration = this.rippleOptions.duration.toString();\n var styles = 'width: ' + diameter + ';height: ' + diameter + ';left: ' + x + 'px;top: ' + y + 'px;' +\n 'transition-duration: ' + duration + 'ms;';\n var rippleElement = createElement('div', { className: 'e-ripple-element', styles: styles });\n element.appendChild(rippleElement);\n window.getComputedStyle(rippleElement).getPropertyValue('opacity');\n rippleElement.style.transform = 'scale(1)';\n if (element !== this.parent) {\n EventHandler.add(element, 'mouseleave', rippleLeaveHandler, { parent: this.parent, rippleOptions: this.rippleOptions });\n }\n}\n/**\n * Handler for ripple element mouse up event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleUpHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for ripple element mouse move event\n * @param {MouseEvent} e\n * @returns {void}\n * @private\n */\nfunction rippleLeaveHandler(e) {\n removeRipple(e, this);\n}\n/**\n * Handler for removing ripple element\n * @param {MouseEvent} e\n * @param {rippleArgs} eventArgs\n * @returns {void}\n * @private\n */\nfunction removeRipple(e, eventArgs) {\n var duration = eventArgs.rippleOptions.duration;\n var target = (e.target);\n var selector = eventArgs.rippleOptions.selector;\n var element = selector ? closest(target, selector) : target;\n if (!element || (element && element.className.indexOf('e-ripple') === -1)) {\n return;\n }\n var rippleElements = selectAll('.e-ripple-element', element);\n var rippleElement = rippleElements[rippleElements.length - 1];\n if (rippleElement) {\n rippleElement.style.opacity = '0.5';\n }\n if (eventArgs.parent !== element) {\n EventHandler.remove(element, 'mouseleave', rippleLeaveHandler);\n }\n /* tslint:disable:align */\n setTimeout(function () {\n if (rippleElement && rippleElement.parentNode) {\n rippleElement.parentNode.removeChild(rippleElement);\n }\n if (!element.getElementsByClassName('e-ripple-element').length) {\n element.classList.remove('e-ripple');\n }\n if (eventArgs.done) {\n eventArgs.done(e);\n }\n }, duration);\n}\nexport var isRippleEnabled = false;\n/**\n * Animation Module provides support to enable ripple effect functionality to Essential JS 2 components.\n * @param {boolean} isRipple Specifies the boolean value to enable or disable ripple effect.\n * @returns {boolean}\n */\nexport function enableRipple(isRipple) {\n isRippleEnabled = isRipple;\n return isRippleEnabled;\n}\n","import { DateFormat } from './intl/date-formatter';\nimport { NumberFormat } from './intl/number-formatter';\nimport { DateParser } from './intl/date-parser';\nimport { NumberParser } from './intl/number-parser';\nimport { IntlBase } from './intl/intl-base';\nimport { extend, getValue } from './util';\nimport { Observer } from './observer';\n/**\n * Specifies the observer used for external change detection.\n */\nexport var onIntlChange = new Observer();\n/**\n * Specifies the default rtl status for EJ2 components.\n */\nexport var rightToLeft = false;\n/**\n * Specifies the CLDR data loaded for internationalization functionalities.\n * @private\n */\nexport var cldrData = {};\n/**\n * Specifies the default culture value to be considered.\n * @private\n */\nexport var defaultCulture = 'en-US';\n/**\n * Specifies default currency code to be considered\n * @private\n */\nexport var defaultCurrencyCode = 'USD';\nvar mapper = ['numericObject', 'dateObject'];\n/**\n * Internationalization class provides support to parse and format the number and date object to the desired format.\n * ```typescript\n * // To set the culture globally\n * setCulture('en-GB');\n *\n * // To set currency code globally\n * setCurrencyCode('EUR');\n *\n * //Load cldr data\n * loadCldr(gregorainData);\n * loadCldr(timeZoneData);\n * loadCldr(numbersData);\n * loadCldr(numberSystemData);\n *\n * // To use formatter in component side\n * let Intl:Internationalization = new Internationalization();\n *\n * // Date formatting\n * let dateFormatter: Function = Intl.getDateFormat({skeleton:'long',type:'dateTime'});\n * dateFormatter(new Date('11/2/2016'));\n * dateFormatter(new Date('25/2/2030'));\n * Intl.formatDate(new Date(),{skeleton:'E'});\n *\n * //Number formatting\n * let numberFormatter: Function = Intl.getNumberFormat({skeleton:'C5'})\n * numberFormatter(24563334);\n * Intl.formatNumber(123123,{skeleton:'p2'});\n *\n * // Date parser\n * let dateParser: Function = Intl.getDateParser({skeleton:'short',type:'time'});\n * dateParser('10:30 PM');\n * Intl.parseDate('10',{skeleton:'H'});\n * ```\n */\nvar Internationalization = /** @class */ (function () {\n function Internationalization(cultureName) {\n if (cultureName) {\n this.culture = cultureName;\n }\n }\n /**\n * Returns the format function for given options.\n * @param {DateFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getDateFormat = function (options) {\n return DateFormat.dateFormat(this.getCulture(), options || { type: 'date', skeleton: 'short' }, cldrData);\n };\n /**\n * Returns the format function for given options.\n * @param {NumberFormatOptions} options - Specifies the format options in which the format function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getNumberFormat = function (options) {\n if (options && !options.currency) {\n options.currency = defaultCurrencyCode;\n }\n return NumberFormat.numberFormatter(this.getCulture(), options || {}, cldrData);\n };\n /**\n * Returns the parser function for given options.\n * @param {DateFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getDateParser = function (options) {\n return DateParser.dateParser(this.getCulture(), options || { skeleton: 'short', type: 'date' }, cldrData);\n };\n /**\n * Returns the parser function for given options.\n * @param {NumberFormatOptions} options - Specifies the format options in which the parser function will return.\n * @returns {Function}\n */\n Internationalization.prototype.getNumberParser = function (options) {\n return NumberParser.numberParser(this.getCulture(), options || { format: 'N' }, cldrData);\n };\n /**\n * Returns the formatted string based on format options.\n * @param {Number} value - Specifies the number to format.\n * @param {NumberFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string}\n */\n Internationalization.prototype.formatNumber = function (value, option) {\n return this.getNumberFormat(option)(value);\n };\n /**\n * Returns the formatted date string based on format options.\n * @param {Number} value - Specifies the number to format.\n * @param {DateFormatOptions} option - Specifies the format options in which the number will be formatted.\n * @returns {string}\n */\n Internationalization.prototype.formatDate = function (value, option) {\n return this.getDateFormat(option)(value);\n };\n /**\n * Returns the date object for given date string and options.\n * @param {string} value - Specifies the string to parse.\n * @param {DateFormatOptions} option - Specifies the parse options in which the date string will be parsed.\n * @returns {Date}\n */\n Internationalization.prototype.parseDate = function (value, option) {\n return this.getDateParser(option)(value);\n };\n /**\n * Returns the number object from the given string value and options.\n * @param {string} value - Specifies the string to parse.\n * @param {NumberFormatOptions} option - Specifies the parse options in which the string number will be parsed.\n * @returns {number}\n */\n Internationalization.prototype.parseNumber = function (value, option) {\n return this.getNumberParser(option)(value);\n };\n /**\n * Returns Native Date Time Pattern\n * @param {DateFormatOptions} option - Specifies the parse options for resultant date time pattern.\n * @param {boolean} isExcelFormat - Specifies format value to be converted to excel pattern.\n * @returns {string}\n * @private\n */\n Internationalization.prototype.getDatePattern = function (option, isExcelFormat) {\n return IntlBase.getActualDateTimeFormat(this.getCulture(), option, cldrData, isExcelFormat);\n };\n /**\n * Returns Native Number Pattern\n * @param {NumberFormatOptions} option - Specifies the parse options for resultant number pattern.\n * @returns {string}\n * @private\n */\n Internationalization.prototype.getNumberPattern = function (option) {\n return IntlBase.getActualNumberFormat(this.getCulture(), option, cldrData);\n };\n /**\n * Returns the First Day of the Week\n * @returns {number}\n */\n Internationalization.prototype.getFirstDayOfWeek = function () {\n return IntlBase.getWeekData(this.getCulture(), cldrData);\n };\n Internationalization.prototype.getCulture = function () {\n return this.culture || defaultCulture;\n };\n return Internationalization;\n}());\nexport { Internationalization };\n/**\n * Set the default culture to all EJ2 components\n * @param {string} cultureName - Specifies the culture name to be set as default culture.\n */\nexport function setCulture(cultureName) {\n defaultCulture = cultureName;\n onIntlChange.notify('notifyExternalChange', { 'locale': defaultCulture });\n}\n/**\n * Set the default currency code to all EJ2 components\n * @param {string} currencyCode Specifies the culture name to be set as default culture.\n * @returns {void}\n */\nexport function setCurrencyCode(currencyCode) {\n defaultCurrencyCode = currencyCode;\n onIntlChange.notify('notifyExternalChange', { 'currencyCode': defaultCurrencyCode });\n}\n/**\n * Load the CLDR data into context\n * @param {Object[]} obj Specifies the CLDR data's to be used for formatting and parser.\n * @returns {void}\n */\nexport function loadCldr() {\n var data = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n data[_i] = arguments[_i];\n }\n for (var _a = 0, data_1 = data; _a < data_1.length; _a++) {\n var obj = data_1[_a];\n extend(cldrData, obj, {}, true);\n }\n}\n/**\n * To enable or disable RTL functionality for all components globally.\n * @param {boolean} status - Optional argument Specifies the status value to enable or disable rtl option.\n * @returns {void}\n */\nexport function enableRtl(status) {\n if (status === void 0) { status = true; }\n rightToLeft = status;\n onIntlChange.notify('notifyExternalChange', { enableRtl: rightToLeft });\n}\n/**\n * To get the numeric CLDR object for given culture\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @ignore\n * @private\n */\nexport function getNumericObject(locale, type) {\n /* tslint:disable no-any */\n var numObject = IntlBase.getDependables(cldrData, locale, '', true)[mapper[0]];\n var dateObject = IntlBase.getDependables(cldrData, locale, '')[mapper[1]];\n var numSystem = getValue('defaultNumberingSystem', numObject);\n var symbPattern = getValue('symbols-numberSystem-' + numSystem, numObject);\n var pattern = IntlBase.getSymbolPattern(type || 'decimal', numSystem, numObject, false);\n return extend(symbPattern, IntlBase.getFormatData(pattern, true, '', true), { 'dateSeparator': IntlBase.getDateSeparator(dateObject) });\n}\n/**\n * To get the numeric CLDR number base object for given culture\n * @param {string} locale - Specifies the locale for which numericObject to be returned.\n * @param {string} currency - Specifies the currency for which numericObject to be returned.\n * @ignore\n * @private\n */\nexport function getNumberDependable(locale, currency) {\n var numObject = IntlBase.getDependables(cldrData, locale, '', true);\n return IntlBase.getCurrencySymbol(numObject.numericObject, currency);\n}\n/**\n * To get the default date CLDR object.\n * @ignore\n * @private\n */\nexport function getDefaultDateObject(mode) {\n return IntlBase.getDependables(cldrData, '', mode, false)[mapper[1]];\n}\n","/**\n * Template Engine\n */\nvar LINES = new RegExp('\\\\n|\\\\r|\\\\s\\\\s+', 'g');\nvar QUOTES = new RegExp(/'|\"/g);\nvar IF_STMT = new RegExp('if ?\\\\(');\nvar ELSEIF_STMT = new RegExp('else if ?\\\\(');\nvar ELSE_STMT = new RegExp('else');\nvar FOR_STMT = new RegExp('for ?\\\\(');\nvar IF_OR_FOR = new RegExp('(\\/if|\\/for)');\nvar CALL_FUNCTION = new RegExp('\\\\((.*)\\\\)', '');\nvar NOT_NUMBER = new RegExp('^[0-9]+$', 'g');\nvar WORD = new RegExp('[\\\\w\"\\'.\\\\s+]+', 'g');\nvar DBL_QUOTED_STR = new RegExp('\"(.*?)\"', 'g');\nvar SPECIAL_CHAR = /\\@|\\#|\\$/g;\nvar WORDIF = new RegExp('[\\\\w\"\\'@#$.\\\\s+]+', 'g');\nvar exp = new RegExp('\\\\${([^}]*)}', 'g');\n// let cachedTemplate: Object = {};\nvar ARR_OBJ = /^\\..*/gm;\n/**\n * The function to set regular expression for template expression string.\n * @param {RegExp} value - Value expression.\n * @private\n */\nexport function expression(value) {\n if (value) {\n exp = value;\n }\n return exp;\n}\n// /**\n// * To render the template string from the given data.\n// * @param {string} template - String Template.\n// * @param {Object[]|JSON} data - DataSource for the template.\n// * @param {Object} helper? - custom helper object.\n// */\n// export function template(template: string, data: JSON, helper?: Object): string {\n// let hash: string = hashCode(template);\n// let tmpl: Function;\n// if (!cachedTemplate[hash]) {\n// tmpl = cachedTemplate[hash] = compile(template, helper);\n// } else {\n// tmpl = cachedTemplate[hash];\n// }\n// return tmpl(data);\n// }\n/**\n * Compile the template string into template function.\n * @param {string} template - The template string which is going to convert.\n * @param {Object} helper? - Helper functions as an object.\n * @private\n */\nexport function compile(template, helper) {\n var argName = 'data';\n var evalExpResult = evalExp(template, argName, helper);\n var fnCode = \"var str=\\\"\" + evalExpResult + \"\\\"; return str;\";\n // tslint:disable-next-line:no-function-constructor-with-string-args\n var fn = new Function(argName, fnCode);\n return fn.bind(helper);\n}\n// function used to evaluate the function expression\nfunction evalExp(str, nameSpace, helper) {\n var varCOunt = 0;\n /**\n * Variable containing Local Keys\n */\n var localKeys = [];\n var isClass = str.match(/class=\"([^\\\"]+|)\\s{2}/g);\n var singleSpace = '';\n if (isClass) {\n isClass.forEach(function (value) {\n singleSpace = value.replace(/\\s\\s+/g, ' ');\n str = str.replace(value, singleSpace);\n });\n }\n return str.replace(LINES, '').replace(DBL_QUOTED_STR, '\\'$1\\'').replace(exp, function (match, cnt, offset, matchStr) {\n var matches = cnt.match(CALL_FUNCTION);\n // matches to detect any function calls\n if (matches) {\n var rlStr = matches[1];\n if (ELSEIF_STMT.test(cnt)) {\n //handling else-if condition\n cnt = '\";} ' + cnt.replace(matches[1], rlStr.replace(WORD, function (str) {\n str = str.trim();\n return addNameSpace(str, !(QUOTES.test(str)) && (localKeys.indexOf(str) === -1), nameSpace, localKeys);\n })) + '{ \\n str = str + \"';\n }\n else if (IF_STMT.test(cnt)) {\n //handling if condition\n cnt = '\"; ' + cnt.replace(matches[1], rlStr.replace(WORDIF, function (strs) {\n strs = strs.trim();\n var regExAt = /\\@|\\$|\\#/gm;\n if (regExAt.test(strs)) {\n strs = NameSpaceForspecialChar(strs, (localKeys.indexOf(strs) === -1), nameSpace, localKeys) + '\"]';\n }\n if (ARR_OBJ.test(strs)) {\n return NameSpaceArrObj(strs, !(QUOTES.test(strs)) && (localKeys.indexOf(strs) === -1), nameSpace, localKeys);\n }\n else {\n return addNameSpace(strs, !(QUOTES.test(strs)) && (localKeys.indexOf(strs) === -1), nameSpace, localKeys);\n }\n })) + '{ \\n str = str + \"';\n }\n else if (FOR_STMT.test(cnt)) {\n //handling for condition\n var rlStr_1 = matches[1].split(' of ');\n // replace for each into actual JavaScript\n cnt = '\"; ' + cnt.replace(matches[1], function (mtc) {\n localKeys.push(rlStr_1[0]);\n localKeys.push(rlStr_1[0] + 'Index');\n varCOunt = varCOunt + 1;\n // tslint:disable-next-line\n return 'var i' + varCOunt + '=0; i' + varCOunt + ' < ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys) + '.length; i' + varCOunt + '++';\n }) + '{ \\n ' + rlStr_1[0] + '= ' + addNameSpace(rlStr_1[1], true, nameSpace, localKeys)\n + '[i' + varCOunt + ']; \\n var ' + rlStr_1[0] + 'Index=i' + varCOunt + '; \\n str = str + \"';\n }\n else {\n //helper function handling\n var fnStr = cnt.split('(');\n var fNameSpace = (helper && helper.hasOwnProperty(fnStr[0]) ? 'this.' : 'global');\n fNameSpace = (/\\./.test(fnStr[0]) ? '' : fNameSpace);\n var ftArray = matches[1].split(',');\n if (matches[1].length !== 0 && !(/data/).test(ftArray[0]) && !(/window./).test(ftArray[0])) {\n matches[1] = (fNameSpace === 'global' ? nameSpace + '.' + matches[1] : matches[1]);\n }\n cnt = '\" + ' + (fNameSpace === 'global' ? '' : fNameSpace) +\n cnt.replace(rlStr, addNameSpace(matches[1].replace(/,( |)data.|,/gi, ',' + nameSpace + '.').replace(/,( |)data.window/gi, ',window'), (fNameSpace === 'global' ? false : true), nameSpace, localKeys)) +\n '+\"';\n }\n }\n else if (ELSE_STMT.test(cnt)) {\n //handling else condition\n cnt = '\"; ' + cnt.replace(ELSE_STMT, '} else { \\n str = str + \"');\n }\n else if (!!cnt.match(IF_OR_FOR)) {\n // close condition \n cnt = cnt.replace(IF_OR_FOR, '\"; \\n } \\n str = str + \"');\n }\n else if (SPECIAL_CHAR.test(cnt)) {\n // evaluate normal expression with special character\n cnt = '\"+' + NameSpaceForspecialChar(cnt, (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '\"]+\"';\n }\n else {\n // evaluate normal expression\n cnt = '\"+' + addNameSpace(cnt.replace(/\\,/gi, '+' + nameSpace + '.'), (localKeys.indexOf(cnt) === -1), nameSpace, localKeys) + '+\"';\n }\n return cnt;\n });\n}\nfunction addNameSpace(str, addNS, nameSpace, ignoreList) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1) ? nameSpace + '.' + str : str);\n}\nfunction NameSpaceArrObj(str, addNS, nameSpace, ignoreList) {\n var arrObjReg = /^\\..*/gm;\n return ((addNS && !(NOT_NUMBER.test(str)) &&\n ignoreList.indexOf(str.split('.')[0]) === -1 && !(arrObjReg.test(str))) ? nameSpace + '.' + str : str);\n}\n// // Create hashCode for template string to storeCached function\n// function hashCode(str: string): string {\n// return str.split('').reduce((a: number, b: string) => { a = ((a << 5) - a) + b.charCodeAt(0); return a & a; }, 0).toString();\n// }\nfunction NameSpaceForspecialChar(str, addNS, nameSpace, ignoreList) {\n return ((addNS && !(NOT_NUMBER.test(str)) && ignoreList.indexOf(str.split('.')[0]) === -1) ? nameSpace + '[\"' + str : str);\n}\n","/**\n * Template Engine Bridge\n */\nimport { compile as render } from './template';\nimport { createElement } from './dom';\nimport { isNullOrUndefined } from './util';\nvar HAS_ROW = /^[\\n\\r.]+\\