How can I help you?
Open PDF from OneDrive
11 Feb 20267 minutes to read
Follow these steps to load a PDF from OneDrive using the server-backed PDF Viewer.
Step 1: Create a Microsoft Graph API application
Create a Microsoft Graph API application and obtain the application ID and tenant ID. Follow this guide
Step 2: Create a Simple PDF Viewer Sample in JavaScript
Start by following the steps provided in this link to create a simple PDF viewer sample in JavaScript. This will give you a basic setup of the PDF viewer component.
Step 3: Modify the PdfViewerController.cs file in the web service project
-
Create a web service project in .NET Core 3.0 or above (NET 6 LTS or later recommended). You can refer to this link for instructions on how to create a web service project.
-
Open the
PdfViewerController.csfile in your web service project. -
Import the required namespaces at the top of the file:
using System.IO;
using Microsoft.Graph;
using Microsoft.Identity.Client;
using Helpers;- Add the following private fields and constructor parameters to
PdfViewerController. In the constructor, assign values from configuration to the corresponding fields.
private IConfiguration _configuration;
public readonly string folderName;
public readonly string applicationId;
public readonly string tenantId;
public PdfViewerController(IWebHostEnvironment hostingEnvironment, IMemoryCache cache, IConfiguration configuration)
{
_hostingEnvironment = hostingEnvironment;
_cache = cache;
_configuration = configuration;
folderName = _configuration.GetValue<string>("FolderName");
tenantId = _configuration.GetValue<string>("TenantId");
applicationId = _configuration.GetValue<string>("ApplicationId");
}- Modify the Load() method to load the PDF files from One Drive.
[HttpPost("Load")]
[Microsoft.AspNetCore.Cors.EnableCors("MyPolicy")]
[Route("[controller]/Load")]
//Post action for Loading the PDF documents
public async Task<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 objectName = jsonObject["document"];
var config = LoadAppSettings();
var client = GetAuthenticatedGraphClient(config);
var request = client.Me.Drive.Root.Children.Request();
string folderIdToSearch = string.Empty;
var results = await request.GetAsync();
var folder = results.FirstOrDefault(f => f.Name == folderName && f.Folder != null);
if (folder != null)
{
// Save the matching folderId
folderIdToSearch = folder.Id;
}
var folderRequest = client.Me.Drive.Items[folderIdToSearch].Children.Request();
var folderContents = await folderRequest.GetAsync();
string fileIdToDownload = string.Empty;
var file = folderContents.FirstOrDefault(f => f.File != null && f.Name == objectName);
if (file != null)
{
// Save the matching fileId
fileIdToDownload = file.Id;
}
string fileIds = fileIdToDownload;
var fileRequest = client.Me.Drive.Items[fileIdToDownload].Content.Request();
using (var streamResponse = await fileRequest.GetAsync())
{
if (streamResponse != null)
{
streamResponse.Seek(0, SeekOrigin.Begin);
await streamResponse.CopyToAsync(stream);
}
}
}
else
{
byte[] bytes = Convert.FromBase64String(jsonObject["document"]);
stream = new MemoryStream(bytes);
}
}
jsonResult = pdfviewer.Load(stream, jsonObject);
return Content(JsonConvert.SerializeObject(jsonResult));
}- Open
appsettings.jsonin the web service project and add the following keys below the existingAllowedHostsconfiguration
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"TenantId": "Your_Tenant_ID",
"applApplicationIdicationId": "Your_Application_ID",
"FolderName": "Your_Folder_Name_To_Access_The_Files_In_Onedrive"
}NOTE
Replace the placeholders with your actual values: Tenant ID, Application ID, and OneDrive folder name. Store these values and any credentials securely (for example, using environment variables or a secrets manager).
Step 4: Configure the PDF Viewer component
Set the serviceUrl to your web service endpoint (replace the localhost URL with your server URL). Set documentPath to the PDF file name to load from OneDrive. Ensure the document name exists in your OneDrive folder.
// Inject required modules
ej.pdfviewer.PdfViewer.Inject(
ej.pdfviewer.Toolbar,
ej.pdfviewer.Magnification,
ej.pdfviewer.Navigation,
ej.pdfviewer.LinkAnnotation,
ej.pdfviewer.ThumbnailView,
ej.pdfviewer.BookmarkView,
ej.pdfviewer.TextSelection,
ej.pdfviewer.Annotation,
ej.pdfviewer.FormFields,
ej.pdfviewer.FormDesigner
);
var viewer = new ej.pdfviewer.PdfViewer();
// Replace the "localhost:44396" with the actual URL of your server
viewer.serviceUrl = 'https://localhost:44396/pdfviewer';
viewer.appendTo('#pdfViewer');
viewer.load('PDF_Succinctly.pdf', null);NOTE
Install the following NuGet packages in the server project to use the previous code example:
- Microsoft.Identity.Client
- Microsoft.Graph
- Microsoft.Extensions.Configuration
- Microsoft.Extensions.Configuration.FileExtensions
- Microsoft.Extensions.Configuration.Json
You can install these packages using the NuGet Package Manager in Visual Studio or via the dotnet CLI.