2X faster development
The ultimate ASP.NET Core UI toolkit to boost your development speed.
IntroductionThe Essential JavaScript PDF Viewer has server-side dependency to get the details from PDF documents for rendering. This section explains how to create the service for PDF Viewer to perform server-side preprocessing of the PDF document to be rendered in client-side. PrerequisitesTo get started with ASP.NET Core Web API service, ensure that the following software is installed on the machine:
ASP.NET Core application setup with Web API for PDF Viewer serviceThe following steps are used to create PDF Viewer service:
Open the NuGet package manager. Install the Syncfusion.EJ2.PdfViewer.AspNet.Core.Windows package to the application. Note: For Linux and OSX operating systems, use the following corresponding libraries:
C# using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using Newtonsoft.Json; using Syncfusion.EJ2.PdfViewer; using System; using System.Collections.Generic; using System.IO; namespace ej2_pdfviewer_service.Controllers { public class PdfViewerController : Controller { private IHostingEnvironment _hostingEnvironment; //Initialize the memory cache object public IMemoryCache _cache; public PdfViewerController(IHostingEnvironment hostingEnvironment, IMemoryCache cache) { _hostingEnvironment = hostingEnvironment; _cache = cache; } [AcceptVerbs("Post")] [HttpPost] [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")] //Post action for Loading the PDF documents public IActionResult Load([FromBody] Dictionary<string, string> jsonObject) { //Initialize the PDF viewer object with memory cache object 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 { 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] [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")] //Post action for processing the bookmarks from the PDF documents public IActionResult Bookmarks([FromBody] Dictionary<string, string> jsonObject) { //Initialize the PDF Viewer object with memory cache object PdfRenderer pdfviewer = new PdfRenderer(_cache); var jsonResult = pdfviewer.GetBookmarks(jsonObject); return Content(JsonConvert.SerializeObject(jsonResult)); } [AcceptVerbs("Post")] [HttpPost] [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")] //Post action for processing the PDF documents public IActionResult RenderPdfPages([FromBody] Dictionary<string, string> jsonObject) { //Initialize the PDF Viewer object with memory cache object PdfRenderer pdfviewer = new PdfRenderer(_cache); object jsonResult = pdfviewer.GetPage(jsonObject); return Content(JsonConvert.SerializeObject(jsonResult)); } [AcceptVerbs("Post")] [HttpPost] [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")] //Post action for rendering the ThumbnailImages public IActionResult RenderThumbnailImages([FromBody] Dictionary<string, string> jsonObject) { //Initialize the PDF Viewer object with memory cache object PdfRenderer pdfviewer = new PdfRenderer(_cache); object result = pdfviewer.GetThumbnailImages(jsonObject); return Content(JsonConvert.SerializeObject(result)); } [AcceptVerbs("Post")] [HttpPost] [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")] //Post action for rendering the annotations public IActionResult RenderAnnotationComments([FromBody] Dictionary<string, string> jsonObject) { //Initialize the PDF Viewer object with memory cache object PdfRenderer pdfviewer = new PdfRenderer(_cache); object jsonResult = pdfviewer.GetAnnotationComments(jsonObject); return Content(JsonConvert.SerializeObject(jsonResult)); } [AcceptVerbs("Post")] [HttpPost] [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")] //Post action to export annotations public IActionResult ExportAnnotations([FromBody] Dictionary<string, string> jsonObject) { PdfRenderer pdfviewer = new PdfRenderer(_cache); string jsonResult = pdfviewer.GetAnnotations(jsonObject); return Content(jsonResult); } [AcceptVerbs("Post")] [HttpPost] [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")] //Post action to import annotations public IActionResult ImportAnnotations([FromBody] Dictionary<string, string> jsonObject) { PdfRenderer pdfviewer = new PdfRenderer(_cache); string jsonResult = string.Empty; 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"); } } return Content(jsonResult); } [AcceptVerbs("Post")] [HttpPost] [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")] //Post action for unloading and disposing the PDF document resources public IActionResult Unload([FromBody] Dictionary<string, string> jsonObject) { //Initialize the PDF Viewer object with memory cache object PdfRenderer pdfviewer = new PdfRenderer(_cache); pdfviewer.ClearCache(jsonObject); return this.Content("Document cache is cleared"); } [HttpPost] [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")] //Post action for downloading the PDF documents public IActionResult Download([FromBody] Dictionary<string, string> jsonObject) { //Initialize the PDF Viewer object with memory cache object PdfRenderer pdfviewer = new PdfRenderer(_cache); string documentBase = pdfviewer.GetDocumentAsBase64(jsonObject); return Content(documentBase); } [HttpPost] [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")] //Post action for printing the PDF documents public IActionResult PrintImages([FromBody] Dictionary<string, string> jsonObject) { //Initialize the PDF Viewer object with memory cache object PdfRenderer pdfviewer = new PdfRenderer(_cache); 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)) { var path = _hostingEnvironment.ContentRootPath; if (System.IO.File.Exists(path + "\\Data\\" + document)) documentPath = path + "\\Data\\" + document; } else { documentPath = document; } return documentPath; } } Change the launchUrl to pdfviewer (name of the controller) in the lauchSettings.json as follows. { "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:58767/", "sslPort": 0 } }, "profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "launchUrl": "pdfviewer", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "ej2_pdfviewer_service": { "commandName": "Project", "launchBrowser": true, "launchUrl": "pdfviewer", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, "applicationUrl": "http://localhost:62978/" } } } Configuring CORS policyBrowser security prevents a webpage from making requests to a different domain than the one that served the webpage. This restriction is called the same-origin policy. Cross Origin Resource Sharing (CORS) allows a server to relax the same-origin policy. Using CORS, a server can explicitly allow some cross-origin. Configure a CORS policy at application Startup.cs in the ConfigureServices method using the following code. Code snippet public void ConfigureServices(IServiceCollection services) { services.AddMemoryCache(); services.AddMvc(); services.AddCors(o => o.AddPolicy("MyPolicy", builder => { builder.AllowAnyOrigin() .AllowAnyMethod() .AllowAnyHeader(); })); services.Configure<GzipCompressionProviderOptions>(options => options.Level = System.IO.Compression.CompressionLevel.Optimal); services.AddResponseCompression(); } The CorsPolicyBuilder in builder allows you to configure the policy as required. You can now use this policy name to apply the policy to controllers and action. [Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")] Sample link: https://www.syncfusion.com/downloads/support/directtrac/general/ze/ej2-pdfviewer-web-service-1568002846 Note:
https://cdn.syncfusion.com/ej2/17.2.28/dist/ej2.min.js https://cdn.syncfusion.com/ej2/17.2.28/material.css
|
2X faster development
The ultimate ASP.NET Core UI toolkit to boost your development speed.
This page will automatically be redirected to the sign-in page in 10 seconds.
Needs to be updated to Blazor namespace
Yes also cannot find GetAnnotations on pdfViewer
Hello The Function RenderPdfTexts is missing. Please update the code.
I'll provide the code I'm using in ASP.net Core 5.0 since they don't have working code that I can find. Hopefully it helps someone.
` sing Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Caching.Memory; using Newtonsoft.Json; using Syncfusion.EJ2.PdfViewer; using System; using System.Collections.Generic; using System.IO;
namespace CompanyName.ProjectName.Controllers { [Route("[controller]")] [ApiController] public class PdfViewerController : ControllerBase { private IHostingEnvironment _hostingEnvironment; //Initialize the memory cache object
public IMemoryCache _cache;
}
`
I apologize for the poor formatting.. here is a link to a working Controller and Startup.cs
https://gist.github.com/sliceofbytes/877e08b52c0e50301d9879a1cf40c95e