From 2c9c5b8957ab8996cee84fed6675a5eea0e2889f Mon Sep 17 00:00:00 2001
From: Vincentsf4657 <vincentkumar.l@syncfusion.com>
Date: Tue, 17 Sep 2024 17:05:57 +0530
Subject: [PATCH 1/4] 906190: UGDocumentation

---
 .../PDFViewerSample.csproj                    |  14 +
 .../PDFViewerSample.sln                       |  25 ++
 .../Pages/Error.cshtml                        |  26 ++
 .../Pages/Error.cshtml.cs                     |  27 ++
 .../Pages/Index.cshtml                        |  68 +++++
 .../Pages/Index.cshtml.cs                     | 266 ++++++++++++++++++
 .../Pages/Privacy.cshtml                      |   8 +
 .../Pages/Privacy.cshtml.cs                   |  19 ++
 .../Pages/Shared/_Layout.cshtml               |  51 ++++
 .../Pages/Shared/_Layout.cshtml.css           |  48 ++++
 .../Shared/_ValidationScriptsPartial.cshtml   |   2 +
 .../Pages/_ViewImports.cshtml                 |   4 +
 .../Pages/_ViewStart.cshtml                   |   3 +
 How to/Customize print Quality/Program.cs     |  25 ++
 .../Properties/launchSettings.json            |  28 ++
 How to/Customize print Quality/README.md      |  26 ++
 .../appsettings.Development.json              |   9 +
 .../Customize print Quality/appsettings.json  |   9 +
 .../wwwroot/favicon.ico                       | Bin 0 -> 5430 bytes
 19 files changed, 658 insertions(+)
 create mode 100644 How to/Customize print Quality/PDFViewerSample.csproj
 create mode 100644 How to/Customize print Quality/PDFViewerSample.sln
 create mode 100644 How to/Customize print Quality/Pages/Error.cshtml
 create mode 100644 How to/Customize print Quality/Pages/Error.cshtml.cs
 create mode 100644 How to/Customize print Quality/Pages/Index.cshtml
 create mode 100644 How to/Customize print Quality/Pages/Index.cshtml.cs
 create mode 100644 How to/Customize print Quality/Pages/Privacy.cshtml
 create mode 100644 How to/Customize print Quality/Pages/Privacy.cshtml.cs
 create mode 100644 How to/Customize print Quality/Pages/Shared/_Layout.cshtml
 create mode 100644 How to/Customize print Quality/Pages/Shared/_Layout.cshtml.css
 create mode 100644 How to/Customize print Quality/Pages/Shared/_ValidationScriptsPartial.cshtml
 create mode 100644 How to/Customize print Quality/Pages/_ViewImports.cshtml
 create mode 100644 How to/Customize print Quality/Pages/_ViewStart.cshtml
 create mode 100644 How to/Customize print Quality/Program.cs
 create mode 100644 How to/Customize print Quality/Properties/launchSettings.json
 create mode 100644 How to/Customize print Quality/README.md
 create mode 100644 How to/Customize print Quality/appsettings.Development.json
 create mode 100644 How to/Customize print Quality/appsettings.json
 create mode 100644 How to/Customize print Quality/wwwroot/favicon.ico

diff --git a/How to/Customize print Quality/PDFViewerSample.csproj b/How to/Customize print Quality/PDFViewerSample.csproj
new file mode 100644
index 0000000..dcbd110
--- /dev/null
+++ b/How to/Customize print Quality/PDFViewerSample.csproj	
@@ -0,0 +1,14 @@
+<Project Sdk="Microsoft.NET.Sdk.Web">
+
+  <PropertyGroup>
+    <TargetFramework>net6.0</TargetFramework>
+    <Nullable>enable</Nullable>
+    <ImplicitUsings>enable</ImplicitUsings>
+  </PropertyGroup>
+
+  <ItemGroup>
+    <PackageReference Include="Syncfusion.EJ2.AspNet.Core" Version="*" />
+    <PackageReference Include="Syncfusion.EJ2.PdfViewer.AspNet.Core" Version="*" />
+  </ItemGroup>
+
+</Project>
diff --git a/How to/Customize print Quality/PDFViewerSample.sln b/How to/Customize print Quality/PDFViewerSample.sln
new file mode 100644
index 0000000..67ddc5d
--- /dev/null
+++ b/How to/Customize print Quality/PDFViewerSample.sln	
@@ -0,0 +1,25 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.32112.339
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PDFViewerSample", "PDFViewerSample.csproj", "{39AA1883-BB43-4C46-9892-6033EA59C990}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{39AA1883-BB43-4C46-9892-6033EA59C990}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{39AA1883-BB43-4C46-9892-6033EA59C990}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{39AA1883-BB43-4C46-9892-6033EA59C990}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{39AA1883-BB43-4C46-9892-6033EA59C990}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(ExtensibilityGlobals) = postSolution
+		SolutionGuid = {5F13CE16-9CC4-4755-AFB4-367F461A209C}
+	EndGlobalSection
+EndGlobal
diff --git a/How to/Customize print Quality/Pages/Error.cshtml b/How to/Customize print Quality/Pages/Error.cshtml
new file mode 100644
index 0000000..6f92b95
--- /dev/null
+++ b/How to/Customize print Quality/Pages/Error.cshtml	
@@ -0,0 +1,26 @@
+@page
+@model ErrorModel
+@{
+    ViewData["Title"] = "Error";
+}
+
+<h1 class="text-danger">Error.</h1>
+<h2 class="text-danger">An error occurred while processing your request.</h2>
+
+@if (Model.ShowRequestId)
+{
+    <p>
+        <strong>Request ID:</strong> <code>@Model.RequestId</code>
+    </p>
+}
+
+<h3>Development Mode</h3>
+<p>
+    Swapping to the <strong>Development</strong> environment displays detailed information about the error that occurred.
+</p>
+<p>
+    <strong>The Development environment shouldn't be enabled for deployed applications.</strong>
+    It can result in displaying sensitive information from exceptions to end users.
+    For local debugging, enable the <strong>Development</strong> environment by setting the <strong>ASPNETCORE_ENVIRONMENT</strong> environment variable to <strong>Development</strong>
+    and restarting the app.
+</p>
diff --git a/How to/Customize print Quality/Pages/Error.cshtml.cs b/How to/Customize print Quality/Pages/Error.cshtml.cs
new file mode 100644
index 0000000..0a23fb0
--- /dev/null
+++ b/How to/Customize print Quality/Pages/Error.cshtml.cs	
@@ -0,0 +1,27 @@
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+using System.Diagnostics;
+
+namespace PDFViewerSample.Pages
+{
+    [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
+    [IgnoreAntiforgeryToken]
+    public class ErrorModel : PageModel
+    {
+        public string? RequestId { get; set; }
+
+        public bool ShowRequestId => !string.IsNullOrEmpty(RequestId);
+
+        private readonly ILogger<ErrorModel> _logger;
+
+        public ErrorModel(ILogger<ErrorModel> logger)
+        {
+            _logger = logger;
+        }
+
+        public void OnGet()
+        {
+            RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier;
+        }
+    }
+}
\ No newline at end of file
diff --git a/How to/Customize print Quality/Pages/Index.cshtml b/How to/Customize print Quality/Pages/Index.cshtml
new file mode 100644
index 0000000..9820d79
--- /dev/null
+++ b/How to/Customize print Quality/Pages/Index.cshtml	
@@ -0,0 +1,68 @@
+@page "{handler?}"
+@model IndexModel
+@{
+    ViewData["Title"] = "Home page";
+}
+
+<div>
+    <ejs-pdfviewer id="pdfviewer"
+                   style="width:1350px;height:100%"
+                   documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf"
+                   resourceUrl='https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib'
+                   toolbarClick="toolbarClick">
+    </ejs-pdfviewer>
+</div>
+
+<script type="text/javascript">
+    window.onload = function () {
+        var pdfViewer = document.getElementById('pdfviewer').ej2_instances[0];
+        var toolItem1 = {
+            prefixIcon: 'e-icons e-paste',
+            id: 'print',
+            tooltipText: 'Custom toolbar item',
+            align: 'left'
+        };
+        var toolItem2 = {
+            id: 'download',
+            text: 'Save',
+            tooltipText: 'Custom toolbar item',
+            align: 'right'
+        };
+        var LanguageList = ['Typescript', 'Javascript', 'Angular', 'C#', 'C', 'Python'];
+        var toolItem3 = {
+            type: 'Input',
+            tooltipText: 'Language List',
+            cssClass: 'percentage',
+            align: 'Left',
+            id: 'dropdown',
+            template: new ej.dropdowns.ComboBox({ width: 100, value: 'TypeScript', dataSource: LanguageList, popupWidth: 85, showClearButton: false, readonly: false })
+        };
+        var toolItem4 = {
+            type: 'Input',
+            tooltipText: 'Text',
+            align: 'Right',
+            cssClass: 'find',
+            id: 'textbox',
+            template: new ej.inputs.TextBox({ width: 125, placeholder: 'Type Here', created: onCreate })
+        };
+        pdfViewer.toolbarSettings = {
+            showTooltip: true,
+            toolbarItems: [toolItem1, toolItem2, 'OpenOption', 'PageNavigationTool', 'MagnificationTool', toolItem3, 'PanTool', 'SelectionTool', 'SearchOption', 'PrintOption', 'DownloadOption', 'UndoRedoTool', 'AnnotationEditTool', 'FormDesignerEditTool', toolItem4, 'CommentTool', 'SubmitForm']
+        };
+        function onCreate() {
+            this.addIcon('prepend', 'e-icons e-search');
+        }
+    }
+
+    // Define the toolbarClick event handler
+    function toolbarClick(args) {
+        var pdfViewer = document.getElementById('pdfviewer').ej2_instances[0];
+
+        if (args.item && args.item.id === 'print') {
+            pdfViewer.printModule.print();
+        } else if (args.item && args.item.id === 'download') {
+            pdfViewer.download();
+        }
+    }
+
+</script>
\ No newline at end of file
diff --git a/How to/Customize print Quality/Pages/Index.cshtml.cs b/How to/Customize print Quality/Pages/Index.cshtml.cs
new file mode 100644
index 0000000..1f24ca8
--- /dev/null
+++ b/How to/Customize print Quality/Pages/Index.cshtml.cs	
@@ -0,0 +1,266 @@
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.Extensions.Caching.Memory;
+using Syncfusion.EJ2.PdfViewer;
+using Newtonsoft.Json;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+using System.Reflection;
+using System.Net;
+
+namespace PDFViewerSample.Pages
+{
+    [IgnoreAntiforgeryToken(Order = 1001)]
+    public class IndexModel : PageModel
+    {
+
+        private readonly Microsoft.AspNetCore.Hosting.IHostingEnvironment _hostingEnvironment;
+        private IMemoryCache _cache;
+
+        public IndexModel(Microsoft.AspNetCore.Hosting.IHostingEnvironment hostingEnvironment, IMemoryCache cache)
+        {
+            _hostingEnvironment = hostingEnvironment;
+            _cache = cache;
+        }
+
+        public IActionResult OnPostLoad([FromBody] jsonObjects responseData)
+        {
+            PdfRenderer pdfviewer = new PdfRenderer(_cache);
+            MemoryStream stream = new MemoryStream();
+            var jsonObject = JsonConverterstring(responseData);
+            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));
+        }
+
+        public Dictionary<string, string> JsonConverterstring(jsonObjects results)
+        {
+            Dictionary<string, object> resultObjects = new Dictionary<string, object>();
+            resultObjects = results.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)
+                .ToDictionary(prop => prop.Name, prop => prop.GetValue(results, null));
+            var emptyObjects = (from kv in resultObjects
+                                where kv.Value != null
+                                select kv).ToDictionary(kv => kv.Key, kv => kv.Value);
+            Dictionary<string, string> jsonResult = emptyObjects.ToDictionary(k => k.Key, k => k.Value.ToString());
+            return jsonResult;
+        }
+
+        //Post action for processing the PDF documents.
+        public IActionResult OnPostRenderPdfPages([FromBody] jsonObjects responseData)
+        {
+            PdfRenderer pdfviewer = new PdfRenderer(_cache);
+            var jsonObject = JsonConverterstring(responseData);
+            object jsonResult = pdfviewer.GetPage(jsonObject);
+            return Content(JsonConvert.SerializeObject(jsonResult));
+        }
+
+        //Post action for unloading and disposing the PDF document resources
+        public IActionResult OnPostUnload([FromBody] jsonObjects responseData)
+        {
+            PdfRenderer pdfviewer = new PdfRenderer(_cache);
+            var jsonObject = JsonConverterstring(responseData);
+            pdfviewer.ClearCache(jsonObject);
+            return this.Content("Document cache is cleared");
+        }
+
+        //Post action for rendering the ThumbnailImages
+        public IActionResult OnPostRenderThumbnailImages([FromBody] jsonObjects responseData)
+        {
+            PdfRenderer pdfviewer = new PdfRenderer(_cache);
+            var jsonObject = JsonConverterstring(responseData);
+            object result = pdfviewer.GetThumbnailImages(jsonObject);
+            return Content(JsonConvert.SerializeObject(result));
+        }
+
+        //Post action for processing the bookmarks from the PDF documents
+        public IActionResult OnPostBookmarks([FromBody] jsonObjects responseData)
+        {
+            PdfRenderer pdfviewer = new PdfRenderer(_cache);
+            var jsonObject = JsonConverterstring(responseData);
+            object jsonResult = pdfviewer.GetBookmarks(jsonObject);
+            return Content(JsonConvert.SerializeObject(jsonResult));
+        }
+
+        //Post action for rendering the annotation comments
+        public IActionResult OnPostRenderAnnotationComments([FromBody] jsonObjects responseData)
+        {
+            PdfRenderer pdfviewer = new PdfRenderer(_cache);
+            var jsonObject = JsonConverterstring(responseData);
+            object jsonResult = pdfviewer.GetAnnotationComments(jsonObject);
+            return Content(JsonConvert.SerializeObject(jsonResult));
+        }
+
+        //Post action for exporting the annotations
+        public IActionResult OnPostExportAnnotations([FromBody] jsonObjects responseData)
+        {
+            PdfRenderer pdfviewer = new PdfRenderer(_cache);
+            var jsonObject = JsonConverterstring(responseData);
+            string jsonResult = pdfviewer.ExportAnnotation(jsonObject);
+            return Content(jsonResult);
+        }
+
+        //Post action for importing the annotations
+        public IActionResult OnPostImportAnnotations([FromBody] jsonObjects responseData)
+        {
+            PdfRenderer pdfviewer = new PdfRenderer(_cache);
+            var jsonObject = JsonConverterstring(responseData);
+            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);
+                }
+                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);
+        }
+
+        //Post action for downloading the PDF documents
+        public IActionResult OnPostDownload([FromBody] jsonObjects responseData)
+        {
+            PdfRenderer pdfviewer = new PdfRenderer(_cache);
+            var jsonObject = JsonConverterstring(responseData);
+            string documentBase = pdfviewer.GetDocumentAsBase64(jsonObject);
+            return Content(documentBase);
+        }
+
+        //Post action for printing the PDF documents
+        public IActionResult OnPostPrintImages([FromBody] jsonObjects responseData)
+        {
+            PdfRenderer pdfviewer = new PdfRenderer(_cache);
+            var jsonObject = JsonConverterstring(responseData);
+            object pageImage = pdfviewer.GetPrintImage(jsonObject);
+            return Content(JsonConvert.SerializeObject(pageImage));
+        }
+
+        //Gets the path of the PDF document
+        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 + "/";
+                if (System.IO.File.Exists(dataPath + (document)))
+                    documentPath = dataPath + document;
+            }
+            else
+            {
+                documentPath = document;
+            }
+            return documentPath;
+        }
+    }
+
+    public class jsonObjects
+    {
+        public string document { get; set; }
+        public string password { get; set; }
+        public string zoomFactor { get; set; }
+        public string isFileName { get; set; }
+        public string xCoordinate { get; set; }
+        public string yCoordinate { get; set; }
+        public string pageNumber { get; set; }
+        public string documentId { get; set; }
+        public string hashId { get; set; }
+        public string sizeX { get; set; }
+        public string sizeY { get; set; }
+        public string startPage { get; set; }
+        public string endPage { get; set; }
+        public string stampAnnotations { get; set; }
+        public string textMarkupAnnotations { get; set; }
+        public string stickyNotesAnnotation { get; set; }
+        public string shapeAnnotations { get; set; }
+        public string measureShapeAnnotations { get; set; }
+        public string action { get; set; }
+        public string pageStartIndex { get; set; }
+        public string pageEndIndex { get; set; }
+        public string fileName { get; set; }
+        public string elementId { get; set; }
+        public string pdfAnnotation { get; set; }
+        public string importPageList { get; set; }
+        public string uniqueId { get; set; }
+        public string data { get; set; }
+        public string viewPortWidth { get; set; }
+        public string viewPortHeight { get; set; }
+        public string tilecount { get; set; }
+        public bool isCompletePageSizeNotReceived { get; set; }
+        public string freeTextAnnotation { get; set; }
+        public string signatureData { get; set; }
+        public string fieldsData { get; set; }
+        public string FormDesigner { get; set; }
+        public string inkSignatureData { get; set; }
+        public bool hideEmptyDigitalSignatureFields { get; set; }
+        public bool showDigitalSignatureAppearance { get; set; }
+        public bool digitalSignaturePresent { get; set; }
+        public string tileXCount { get; set; }
+        public string tileYCount { get; set; }
+        public string digitalSignaturePageList { get; set; }
+        public string annotationCollection { get; set; }
+        public string annotationsPageList { get; set; }
+        public string formFieldsPageList { get; set; }
+        public bool isAnnotationsExist { get; set; }
+        public bool isFormFieldAnnotationsExist { get; set; }
+        public string documentLiveCount { get; set; }
+        public string annotationDataFormat { get; set; }
+        public string importedData { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/How to/Customize print Quality/Pages/Privacy.cshtml b/How to/Customize print Quality/Pages/Privacy.cshtml
new file mode 100644
index 0000000..46ba966
--- /dev/null
+++ b/How to/Customize print Quality/Pages/Privacy.cshtml	
@@ -0,0 +1,8 @@
+@page
+@model PrivacyModel
+@{
+    ViewData["Title"] = "Privacy Policy";
+}
+<h1>@ViewData["Title"]</h1>
+
+<p>Use this page to detail your site's privacy policy.</p>
diff --git a/How to/Customize print Quality/Pages/Privacy.cshtml.cs b/How to/Customize print Quality/Pages/Privacy.cshtml.cs
new file mode 100644
index 0000000..f9a85a1
--- /dev/null
+++ b/How to/Customize print Quality/Pages/Privacy.cshtml.cs	
@@ -0,0 +1,19 @@
+using Microsoft.AspNetCore.Mvc;
+using Microsoft.AspNetCore.Mvc.RazorPages;
+
+namespace PDFViewerSample.Pages
+{
+    public class PrivacyModel : PageModel
+    {
+        private readonly ILogger<PrivacyModel> _logger;
+
+        public PrivacyModel(ILogger<PrivacyModel> logger)
+        {
+            _logger = logger;
+        }
+
+        public void OnGet()
+        {
+        }
+    }
+}
\ No newline at end of file
diff --git a/How to/Customize print Quality/Pages/Shared/_Layout.cshtml b/How to/Customize print Quality/Pages/Shared/_Layout.cshtml
new file mode 100644
index 0000000..b1019e5
--- /dev/null
+++ b/How to/Customize print Quality/Pages/Shared/_Layout.cshtml	
@@ -0,0 +1,51 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>@ViewData["Title"] - PDFViewerSample</title>
+    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
+    <!-- Syncfusion ASP.NET Core controls styles -->
+    <link rel="stylesheet" href="https://cdn.syncfusion.com/ej2/24.1.41/fluent.css" />
+    <!-- Syncfusion ASP.NET Core controls scripts -->
+    <script src="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2.min.js"></script>
+</head>
+<body>
+    <header>
+        <nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
+            <div class="container">
+                <a class="navbar-brand" asp-area="" asp-page="/Index">PDFViewerSample</a>
+                <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
+                        aria-expanded="false" aria-label="Toggle navigation">
+                    <span class="navbar-toggler-icon"></span>
+                </button>
+                <div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
+                    <ul class="navbar-nav flex-grow-1">
+                        <li class="nav-item">
+                            <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
+                        </li>
+                        <li class="nav-item">
+                            <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
+                        </li>
+                    </ul>
+                </div>
+            </div>
+        </nav>
+    </header>
+    <div class="container">
+        <main role="main" class="pb-3">
+            @RenderBody()
+        </main>
+    </div>
+
+    <footer class="border-top footer text-muted">
+        <div class="container">
+            &copy; 2022 - PDFViewerSample - <a asp-area="" asp-page="/Privacy">Privacy</a>
+        </div>
+    </footer>
+
+    @await RenderSectionAsync("Scripts", required: false)
+    <!-- Syncfusion ASP.NET Core Script Manager -->
+    <ejs-scripts></ejs-scripts>
+</body>
+</html>
\ No newline at end of file
diff --git a/How to/Customize print Quality/Pages/Shared/_Layout.cshtml.css b/How to/Customize print Quality/Pages/Shared/_Layout.cshtml.css
new file mode 100644
index 0000000..a72cbea
--- /dev/null
+++ b/How to/Customize print Quality/Pages/Shared/_Layout.cshtml.css	
@@ -0,0 +1,48 @@
+/* Please see documentation at https://docs.microsoft.com/aspnet/core/client-side/bundling-and-minification
+for details on configuring this project to bundle and minify static web assets. */
+
+a.navbar-brand {
+  white-space: normal;
+  text-align: center;
+  word-break: break-all;
+}
+
+a {
+  color: #0077cc;
+}
+
+.btn-primary {
+  color: #fff;
+  background-color: #1b6ec2;
+  border-color: #1861ac;
+}
+
+.nav-pills .nav-link.active, .nav-pills .show > .nav-link {
+  color: #fff;
+  background-color: #1b6ec2;
+  border-color: #1861ac;
+}
+
+.border-top {
+  border-top: 1px solid #e5e5e5;
+}
+.border-bottom {
+  border-bottom: 1px solid #e5e5e5;
+}
+
+.box-shadow {
+  box-shadow: 0 .25rem .75rem rgba(0, 0, 0, .05);
+}
+
+button.accept-policy {
+  font-size: 1rem;
+  line-height: inherit;
+}
+
+.footer {
+  position: absolute;
+  bottom: 0;
+  width: 100%;
+  white-space: nowrap;
+  line-height: 60px;
+}
diff --git a/How to/Customize print Quality/Pages/Shared/_ValidationScriptsPartial.cshtml b/How to/Customize print Quality/Pages/Shared/_ValidationScriptsPartial.cshtml
new file mode 100644
index 0000000..5a16d80
--- /dev/null
+++ b/How to/Customize print Quality/Pages/Shared/_ValidationScriptsPartial.cshtml	
@@ -0,0 +1,2 @@
+<script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
+<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
diff --git a/How to/Customize print Quality/Pages/_ViewImports.cshtml b/How to/Customize print Quality/Pages/_ViewImports.cshtml
new file mode 100644
index 0000000..51b8015
--- /dev/null
+++ b/How to/Customize print Quality/Pages/_ViewImports.cshtml	
@@ -0,0 +1,4 @@
+@using PDFViewerSample
+@namespace PDFViewerSample.Pages
+@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
+@addTagHelper *, Syncfusion.EJ2
\ No newline at end of file
diff --git a/How to/Customize print Quality/Pages/_ViewStart.cshtml b/How to/Customize print Quality/Pages/_ViewStart.cshtml
new file mode 100644
index 0000000..a5f1004
--- /dev/null
+++ b/How to/Customize print Quality/Pages/_ViewStart.cshtml	
@@ -0,0 +1,3 @@
+@{
+    Layout = "_Layout";
+}
diff --git a/How to/Customize print Quality/Program.cs b/How to/Customize print Quality/Program.cs
new file mode 100644
index 0000000..bc275e4
--- /dev/null
+++ b/How to/Customize print Quality/Program.cs	
@@ -0,0 +1,25 @@
+var builder = WebApplication.CreateBuilder(args);
+
+// Add services to the container.
+builder.Services.AddRazorPages();
+
+var app = builder.Build();
+
+// Configure the HTTP request pipeline.
+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.UseHttpsRedirection();
+app.UseStaticFiles();
+
+app.UseRouting();
+
+app.UseAuthorization();
+
+app.MapRazorPages();
+
+app.Run();
diff --git a/How to/Customize print Quality/Properties/launchSettings.json b/How to/Customize print Quality/Properties/launchSettings.json
new file mode 100644
index 0000000..d52972e
--- /dev/null
+++ b/How to/Customize print Quality/Properties/launchSettings.json	
@@ -0,0 +1,28 @@
+{
+  "iisSettings": {
+    "windowsAuthentication": false,
+    "anonymousAuthentication": true,
+    "iisExpress": {
+      "applicationUrl": "http://localhost:38233",
+      "sslPort": 44357
+    }
+  },
+  "profiles": {
+    "PDFViewerSample": {
+      "commandName": "Project",
+      "dotnetRunMessages": true,
+      "launchBrowser": true,
+      "applicationUrl": "https://localhost:7173;http://localhost:5173",
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      }
+    },
+    "IIS Express": {
+      "commandName": "IISExpress",
+      "launchBrowser": true,
+      "environmentVariables": {
+        "ASPNETCORE_ENVIRONMENT": "Development"
+      }
+    }
+  }
+}
diff --git a/How to/Customize print Quality/README.md b/How to/Customize print Quality/README.md
new file mode 100644
index 0000000..25ccdee
--- /dev/null
+++ b/How to/Customize print Quality/README.md	
@@ -0,0 +1,26 @@
+# Create a simple PDF Viewer
+This example shows how to create a simple PDF Viewer application.
+
+## Project pre-requisites
+One of the the following .NET SDK is required to develop and run the Syncfusion UI controls for ASP.NET Core application.
+
+* NET 6.0 SDK
+* NET 5.0 SDK
+* NET Core SDK 3.1
+* NET Core SDK 2.0
+* NET 4.5 Framework
+
+If you are planning to use Visual Studio to develop ASP.NET Core Applications.
+
+.NET 6.0 requires Visual Studio 2022 17.0 or later.
+.NET 5.0 requires Visual Studio 2019 16.8 or later.
+.NET Core SDK 3.1 requires Visual Studio 2019 16.4 or later.
+.NET Core SDK 2.0 requires Visual Studio 2017 15.7 or later.
+.NET 4.5 Framework requires Visual Studio 2015 20.1 or later
+
+## Running the sample
+Execute the following commands to run the sample via command prompt window.
+
+* dotnet restore
+* dotnet run
+
diff --git a/How to/Customize print Quality/appsettings.Development.json b/How to/Customize print Quality/appsettings.Development.json
new file mode 100644
index 0000000..770d3e9
--- /dev/null
+++ b/How to/Customize print Quality/appsettings.Development.json	
@@ -0,0 +1,9 @@
+{
+  "DetailedErrors": true,
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft.AspNetCore": "Warning"
+    }
+  }
+}
diff --git a/How to/Customize print Quality/appsettings.json b/How to/Customize print Quality/appsettings.json
new file mode 100644
index 0000000..10f68b8
--- /dev/null
+++ b/How to/Customize print Quality/appsettings.json	
@@ -0,0 +1,9 @@
+{
+  "Logging": {
+    "LogLevel": {
+      "Default": "Information",
+      "Microsoft.AspNetCore": "Warning"
+    }
+  },
+  "AllowedHosts": "*"
+}
diff --git a/How to/Customize print Quality/wwwroot/favicon.ico b/How to/Customize print Quality/wwwroot/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..63e859b476eff5055e0e557aaa151ca8223fbeef
GIT binary patch
literal 5430
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
Y_O6}xTrQ{Lm(%HNn!7U|JnrZJ0OMGa@Bjb+

literal 0
HcmV?d00001


From 92c288f3ea4653aac0cc17969e886dea9a8b7a20 Mon Sep 17 00:00:00 2001
From: Vincentsf4657 <vincentkumar.l@syncfusion.com>
Date: Fri, 20 Sep 2024 16:46:08 +0530
Subject: [PATCH 2/4] 906190: UGDocumentation

---
 .../Pages/Index.cshtml                        | 49 ++-----------------
 .../Pages/Shared/_Layout.cshtml               |  4 +-
 2 files changed, 7 insertions(+), 46 deletions(-)

diff --git a/How to/Customize print Quality/Pages/Index.cshtml b/How to/Customize print Quality/Pages/Index.cshtml
index 9820d79..01f7c4b 100644
--- a/How to/Customize print Quality/Pages/Index.cshtml	
+++ b/How to/Customize print Quality/Pages/Index.cshtml	
@@ -6,59 +6,20 @@
 
 <div>
     <ejs-pdfviewer id="pdfviewer"
-                   style="width:1350px;height:100%"
+                   style="width:100%;height:100%"
                    documentPath="https://cdn.syncfusion.com/content/pdf/pdf-succinctly.pdf"
-                   resourceUrl='https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2-pdfviewer-lib'
-                   toolbarClick="toolbarClick">
+                   resourceUrl='https://cdn.syncfusion.com/ej2/27.1.48/dist/ej2-pdfviewer-lib'
+                   toolbarClick="toolbarClick"
+                   printScaleFactor=0.5>
     </ejs-pdfviewer>
 </div>
 
 <script type="text/javascript">
-    window.onload = function () {
-        var pdfViewer = document.getElementById('pdfviewer').ej2_instances[0];
-        var toolItem1 = {
-            prefixIcon: 'e-icons e-paste',
-            id: 'print',
-            tooltipText: 'Custom toolbar item',
-            align: 'left'
-        };
-        var toolItem2 = {
-            id: 'download',
-            text: 'Save',
-            tooltipText: 'Custom toolbar item',
-            align: 'right'
-        };
-        var LanguageList = ['Typescript', 'Javascript', 'Angular', 'C#', 'C', 'Python'];
-        var toolItem3 = {
-            type: 'Input',
-            tooltipText: 'Language List',
-            cssClass: 'percentage',
-            align: 'Left',
-            id: 'dropdown',
-            template: new ej.dropdowns.ComboBox({ width: 100, value: 'TypeScript', dataSource: LanguageList, popupWidth: 85, showClearButton: false, readonly: false })
-        };
-        var toolItem4 = {
-            type: 'Input',
-            tooltipText: 'Text',
-            align: 'Right',
-            cssClass: 'find',
-            id: 'textbox',
-            template: new ej.inputs.TextBox({ width: 125, placeholder: 'Type Here', created: onCreate })
-        };
-        pdfViewer.toolbarSettings = {
-            showTooltip: true,
-            toolbarItems: [toolItem1, toolItem2, 'OpenOption', 'PageNavigationTool', 'MagnificationTool', toolItem3, 'PanTool', 'SelectionTool', 'SearchOption', 'PrintOption', 'DownloadOption', 'UndoRedoTool', 'AnnotationEditTool', 'FormDesignerEditTool', toolItem4, 'CommentTool', 'SubmitForm']
-        };
-        function onCreate() {
-            this.addIcon('prepend', 'e-icons e-search');
-        }
-    }
-
     // Define the toolbarClick event handler
     function toolbarClick(args) {
         var pdfViewer = document.getElementById('pdfviewer').ej2_instances[0];
-
         if (args.item && args.item.id === 'print') {
+            pdfViewer.printScaleFactor=0.5;
             pdfViewer.printModule.print();
         } else if (args.item && args.item.id === 'download') {
             pdfViewer.download();
diff --git a/How to/Customize print Quality/Pages/Shared/_Layout.cshtml b/How to/Customize print Quality/Pages/Shared/_Layout.cshtml
index b1019e5..bb39335 100644
--- a/How to/Customize print Quality/Pages/Shared/_Layout.cshtml	
+++ b/How to/Customize print Quality/Pages/Shared/_Layout.cshtml	
@@ -6,9 +6,9 @@
     <title>@ViewData["Title"] - PDFViewerSample</title>
     <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
     <!-- Syncfusion ASP.NET Core controls styles -->
-    <link rel="stylesheet" href="https://cdn.syncfusion.com/ej2/24.1.41/fluent.css" />
+    <link rel="stylesheet" href="https://cdn.syncfusion.com/ej2/27.1.48/fluent.css" />
     <!-- Syncfusion ASP.NET Core controls scripts -->
-    <script src="https://cdn.syncfusion.com/ej2/24.1.41/dist/ej2.min.js"></script>
+    <script src="https://cdn.syncfusion.com/ej2/27.1.48/dist/ej2.min.js"></script>
 </head>
 <body>
     <header>

From 9ab6364a24ebeeae8d5397250db6f4568ac10970 Mon Sep 17 00:00:00 2001
From: Vincentsf4657 <vincentkumar.l@syncfusion.com>
Date: Fri, 27 Sep 2024 16:00:53 +0530
Subject: [PATCH 3/4] 906190: UGDocumentation

---
 .../Pages/Index.cshtml.cs                     | 57 +++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/How to/Customize print Quality/Pages/Index.cshtml.cs b/How to/Customize print Quality/Pages/Index.cshtml.cs
index 1f24ca8..78b19a3 100644
--- a/How to/Customize print Quality/Pages/Index.cshtml.cs	
+++ b/How to/Customize print Quality/Pages/Index.cshtml.cs	
@@ -81,6 +81,63 @@ public IActionResult OnPostRenderPdfPages([FromBody] jsonObjects responseData)
             return Content(JsonConvert.SerializeObject(jsonResult));
         }
 
+         public IActionResult RenderPdfTexts([FromBody] Dictionary<string, string> jsonObject)
+        {
+            //Initialize the PDF Viewer object with memory cache object
+            PdfRenderer pdfviewer = new PdfRenderer(_cache);
+            object jsonResult = pdfviewer.GetDocumentText(jsonObject);
+            return Content(JsonConvert.SerializeObject(jsonResult));
+        }
+
+         public IActionResult ValidatePassword([FromBody] Dictionary<string, string> jsonObject)
+        {
+            PdfRenderer pdfviewer = new PdfRenderer(_cache);
+            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));
+        }
+
+
         //Post action for unloading and disposing the PDF document resources
         public IActionResult OnPostUnload([FromBody] jsonObjects responseData)
         {

From eef4e087a3bb187f38fdd73fb9a14637184f919e Mon Sep 17 00:00:00 2001
From: Vincentsf4657 <vincentkumar.l@syncfusion.com>
Date: Fri, 27 Sep 2024 18:57:41 +0530
Subject: [PATCH 4/4] 906190: UGDocumentation

---
 .../Pages/Index.cshtml.cs                     | 132 ++++++------------
 1 file changed, 46 insertions(+), 86 deletions(-)

diff --git a/How to/Customize print Quality/Pages/Index.cshtml.cs b/How to/Customize print Quality/Pages/Index.cshtml.cs
index 78b19a3..c10de45 100644
--- a/How to/Customize print Quality/Pages/Index.cshtml.cs	
+++ b/How to/Customize print Quality/Pages/Index.cshtml.cs	
@@ -21,11 +21,14 @@ public IndexModel(Microsoft.AspNetCore.Hosting.IHostingEnvironment hostingEnviro
             _cache = cache;
         }
 
-        public IActionResult OnPostLoad([FromBody] jsonObjects responseData)
+        [HttpPost("Load")]
+        [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")]
+        [Route("[controller]/Load")]
+        //Post action for Loading the PDF documents   
+        public IActionResult Load([FromBody] Dictionary<string, string> jsonObject)
         {
             PdfRenderer pdfviewer = new PdfRenderer(_cache);
             MemoryStream stream = new MemoryStream();
-            var jsonObject = JsonConverterstring(responseData);
             object jsonResult = new object();
             if (jsonObject != null && jsonObject.ContainsKey("document"))
             {
@@ -60,23 +63,14 @@ public IActionResult OnPostLoad([FromBody] jsonObjects responseData)
             return Content(JsonConvert.SerializeObject(jsonResult));
         }
 
-        public Dictionary<string, string> JsonConverterstring(jsonObjects results)
-        {
-            Dictionary<string, object> resultObjects = new Dictionary<string, object>();
-            resultObjects = results.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public)
-                .ToDictionary(prop => prop.Name, prop => prop.GetValue(results, null));
-            var emptyObjects = (from kv in resultObjects
-                                where kv.Value != null
-                                select kv).ToDictionary(kv => kv.Key, kv => kv.Value);
-            Dictionary<string, string> jsonResult = emptyObjects.ToDictionary(k => k.Key, k => k.Value.ToString());
-            return jsonResult;
-        }
-
+        [AcceptVerbs("Post")]
+        [HttpPost("RenderPdfPages")]
+        [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")]
+        [Route("[controller]/RenderPdfPages")]
         //Post action for processing the PDF documents.
-        public IActionResult OnPostRenderPdfPages([FromBody] jsonObjects responseData)
+        public IActionResult OnPostRenderPdfPages([FromBody] Dictionary<string, string> jsonObject)
         {
             PdfRenderer pdfviewer = new PdfRenderer(_cache);
-            var jsonObject = JsonConverterstring(responseData);
             object jsonResult = pdfviewer.GetPage(jsonObject);
             return Content(JsonConvert.SerializeObject(jsonResult));
         }
@@ -137,57 +131,74 @@ public IActionResult ValidatePassword([FromBody] Dictionary<string, string> json
             return Content(JsonConvert.SerializeObject(result));
         }
 
-
+        [AcceptVerbs("Post")]
+        [HttpPost("Unload")]
+        [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")]
+        [Route("[controller]/Unload")]
         //Post action for unloading and disposing the PDF document resources
-        public IActionResult OnPostUnload([FromBody] jsonObjects responseData)
+        public IActionResult OnPostUnload([FromBody] Dictionary<string, string> jsonObject)
         {
             PdfRenderer pdfviewer = new PdfRenderer(_cache);
-            var jsonObject = JsonConverterstring(responseData);
             pdfviewer.ClearCache(jsonObject);
             return this.Content("Document cache is cleared");
         }
 
+        [AcceptVerbs("Post")]
+        [HttpPost("RenderThumbnailImages")]
+        [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")]
+        [Route("[controller]/RenderThumbnailImages")]
         //Post action for rendering the ThumbnailImages
-        public IActionResult OnPostRenderThumbnailImages([FromBody] jsonObjects responseData)
+        public IActionResult OnPostRenderThumbnailImages([FromBody] Dictionary<string, string> jsonObject)
         {
             PdfRenderer pdfviewer = new PdfRenderer(_cache);
-            var jsonObject = JsonConverterstring(responseData);
             object result = pdfviewer.GetThumbnailImages(jsonObject);
             return Content(JsonConvert.SerializeObject(result));
         }
 
+        [AcceptVerbs("Post")]
+        [HttpPost("Bookmarks")]
+        [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")]
+        [Route("[controller]/Bookmarks")]
         //Post action for processing the bookmarks from the PDF documents
-        public IActionResult OnPostBookmarks([FromBody] jsonObjects responseData)
+        public IActionResult OnPostBookmarks([FromBody] Dictionary<string, string> jsonObject)
         {
             PdfRenderer pdfviewer = new PdfRenderer(_cache);
-            var jsonObject = JsonConverterstring(responseData);
             object jsonResult = pdfviewer.GetBookmarks(jsonObject);
             return Content(JsonConvert.SerializeObject(jsonResult));
         }
 
+        [AcceptVerbs("Post")]
+        [HttpPost("RenderAnnotationComments")]
+        [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")]
+        [Route("[controller]/RenderAnnotationComments")]
         //Post action for rendering the annotation comments
-        public IActionResult OnPostRenderAnnotationComments([FromBody] jsonObjects responseData)
+        public IActionResult OnPostRenderAnnotationComments([FromBody] Dictionary<string, string> jsonObject)
         {
             PdfRenderer pdfviewer = new PdfRenderer(_cache);
-            var jsonObject = JsonConverterstring(responseData);
             object jsonResult = pdfviewer.GetAnnotationComments(jsonObject);
             return Content(JsonConvert.SerializeObject(jsonResult));
         }
 
+        [AcceptVerbs("Post")]
+        [HttpPost("ExportAnnotations")]
+        [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")]
+        [Route("[controller]/ExportAnnotations")]
         //Post action for exporting the annotations
-        public IActionResult OnPostExportAnnotations([FromBody] jsonObjects responseData)
+        public IActionResult OnPostExportAnnotations([FromBody] Dictionary<string, string> jsonObject)
         {
             PdfRenderer pdfviewer = new PdfRenderer(_cache);
-            var jsonObject = JsonConverterstring(responseData);
             string jsonResult = pdfviewer.ExportAnnotation(jsonObject);
             return Content(jsonResult);
         }
 
+        [AcceptVerbs("Post")]
+        [HttpPost("ImportAnnotations")]
+        [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")]
+        [Route("[controller]/ImportAnnotations")]
         //Post action for importing the annotations
-        public IActionResult OnPostImportAnnotations([FromBody] jsonObjects responseData)
+        public IActionResult OnPostImportAnnotations([FromBody] Dictionary<string, string> jsonObject)
         {
             PdfRenderer pdfviewer = new PdfRenderer(_cache);
-            var jsonObject = JsonConverterstring(responseData);
             string jsonResult = string.Empty;
             object JsonResult;
             if (jsonObject != null && jsonObject.ContainsKey("fileName"))
@@ -229,20 +240,22 @@ public IActionResult OnPostImportAnnotations([FromBody] jsonObjects responseData
             return Content(jsonResult);
         }
 
+        
+        [HttpPost("Download")]
+        [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")]
+        [Route("[controller]/Download")]
         //Post action for downloading the PDF documents
-        public IActionResult OnPostDownload([FromBody] jsonObjects responseData)
+        public IActionResult OnPostDownload([FromBody] Dictionary<string, string> jsonObject)
         {
             PdfRenderer pdfviewer = new PdfRenderer(_cache);
-            var jsonObject = JsonConverterstring(responseData);
             string documentBase = pdfviewer.GetDocumentAsBase64(jsonObject);
             return Content(documentBase);
         }
 
         //Post action for printing the PDF documents
-        public IActionResult OnPostPrintImages([FromBody] jsonObjects responseData)
+        public IActionResult OnPostPrintImages([FromBody] Dictionary<string, string> jsonObject)
         {
             PdfRenderer pdfviewer = new PdfRenderer(_cache);
-            var jsonObject = JsonConverterstring(responseData);
             object pageImage = pdfviewer.GetPrintImage(jsonObject);
             return Content(JsonConvert.SerializeObject(pageImage));
         }
@@ -267,57 +280,4 @@ private string GetDocumentPath(string document)
         }
     }
 
-    public class jsonObjects
-    {
-        public string document { get; set; }
-        public string password { get; set; }
-        public string zoomFactor { get; set; }
-        public string isFileName { get; set; }
-        public string xCoordinate { get; set; }
-        public string yCoordinate { get; set; }
-        public string pageNumber { get; set; }
-        public string documentId { get; set; }
-        public string hashId { get; set; }
-        public string sizeX { get; set; }
-        public string sizeY { get; set; }
-        public string startPage { get; set; }
-        public string endPage { get; set; }
-        public string stampAnnotations { get; set; }
-        public string textMarkupAnnotations { get; set; }
-        public string stickyNotesAnnotation { get; set; }
-        public string shapeAnnotations { get; set; }
-        public string measureShapeAnnotations { get; set; }
-        public string action { get; set; }
-        public string pageStartIndex { get; set; }
-        public string pageEndIndex { get; set; }
-        public string fileName { get; set; }
-        public string elementId { get; set; }
-        public string pdfAnnotation { get; set; }
-        public string importPageList { get; set; }
-        public string uniqueId { get; set; }
-        public string data { get; set; }
-        public string viewPortWidth { get; set; }
-        public string viewPortHeight { get; set; }
-        public string tilecount { get; set; }
-        public bool isCompletePageSizeNotReceived { get; set; }
-        public string freeTextAnnotation { get; set; }
-        public string signatureData { get; set; }
-        public string fieldsData { get; set; }
-        public string FormDesigner { get; set; }
-        public string inkSignatureData { get; set; }
-        public bool hideEmptyDigitalSignatureFields { get; set; }
-        public bool showDigitalSignatureAppearance { get; set; }
-        public bool digitalSignaturePresent { get; set; }
-        public string tileXCount { get; set; }
-        public string tileYCount { get; set; }
-        public string digitalSignaturePageList { get; set; }
-        public string annotationCollection { get; set; }
-        public string annotationsPageList { get; set; }
-        public string formFieldsPageList { get; set; }
-        public bool isAnnotationsExist { get; set; }
-        public bool isFormFieldAnnotationsExist { get; set; }
-        public string documentLiveCount { get; set; }
-        public string annotationDataFormat { get; set; }
-        public string importedData { get; set; }
-    }
 }
\ No newline at end of file