Syncfusion EJ2 PdfViewer

The PDF Viewer component enables you to view and print the PDF files.

This sample demonstrate the following key features of PDF Viewer:

  • View the PDF document

  • Core interactions - Scrolling, Zooming, panning and page navigation

  • Built-in toolbar

  • Select and copy text from PDF file

  • Search a text easily across the PDF document

  • Easy navigation with the help of Bookmarks, thumbnails, hyperlinks and table of contents

  • View modes - fit to page and fit to width

  • Print the entire document or a specific page directly from the browser.

More information on the PDF Viewer instantiation can be found in this documentation section.

Source Code

You can download the source code for this project here.

Design-Time

The EJ2 PdfViewer control can be added to a Form or Page from the Visual Studio Toolbox. It should look like this when dropped onto the designer.

The design-time appearance of the EJ2 PdfViewer control will not show a PDF document. The logic for this should be implemented in your code (see below).

Sample Implementation

PdfViewer.cs
/// <summary>
/// PDF Viewer Server Side Configuration Example.
/// https://github.com/SyncfusionExamples/PdfViewer-Server/blob/master/src/ej2-pdfviewer-server/Controllers/PdfViewerController.cs.
/// </summary>
public partial class PDFViewer : TestBase
{
public PDFViewer()
{
	InitializeComponent();
}

private void pdfViewer1_Appear(object sender, EventArgs e)
{
	this.pdfViewer1.Instance.load("Wisej.pdf", null);
}

private void pdfViewer1_WebRequest(object sender, WebRequestEventArgs e)
{
	// decode payload.
	dynamic payload = null;
	using (StreamReader reader = new StreamReader(e.Request.InputStream))
	{
		var text = reader.ReadToEnd();
		payload = JsonConvert.DeserializeObject<Dictionary<string, string>>(text);
	}

	switch(payload["action"])
	{
		case "Load":
			e.Response.Write(LoadPdf(payload));
			break;

		case "RenderPdfPages":
			e.Response.Write(RenderPdfPages(payload));
			break;

		case "RenderPdfTexts":
			e.Response.Write(RenderPdfTexts(payload));
			break;

		case "RenderThumbnailImages":
			e.Response.Write(RenderThumbnailImages(payload));
			break;

		case "Download":
			e.Response.Write(Download(payload));
			break;

		case "PrintImages":
			e.Response.Write(PrintImages(payload));
			break;

		case "RenderAnnotationComments":
			e.Response.Write(RenderAnnotationComments(payload));
			break;

		case "Unload":
			e.Response.Write(PrintImages(payload));
			break;

		default:
			break;

	}
}

private string RenderPdfTexts(dynamic payload)
{
;			var renderer = new PdfRenderer();
	var result = renderer.GetDocumentText(payload);
	return JsonConvert.SerializeObject(result);
}

private string LoadPdf(Dictionary<string, string> payload)
{
	MemoryStream ms;
	PdfRenderer renderer = new PdfRenderer();
	bool isFileName = bool.Parse(payload["isFileName"]);
	if (isFileName)
	{
		var path = Application.MapPath($"Data/PdfViewer/{payload["document"]}");
		var bytes = File.ReadAllBytes(path);
		ms = new MemoryStream(bytes);
	}
	else
	{
		var bytes = Convert.FromBase64String(payload["document"]);
		ms = new MemoryStream(bytes);
	}

	var result = renderer.Load(ms, payload);
	return JsonConvert.SerializeObject(result, Formatting.None);
}

private string RenderPdfPages(Dictionary<string, string> payload)
{
	var renderer = new PdfRenderer();
	var page = renderer.GetPage(payload);
	return JsonConvert.SerializeObject(page);
}

private string RenderThumbnailImages(Dictionary<string, string> payload)
{
	var renderer = new PdfRenderer();
	var result = renderer.GetThumbnailImages(payload);
	return JsonConvert.SerializeObject(result);
}

private string Download(Dictionary<string, string> payload)
{
	var renderer = new PdfRenderer();
	return renderer.GetDocumentAsBase64(payload);
}

private string PrintImages(Dictionary<string, string> payload)
{
	var renderer = new PdfRenderer();
	var result = renderer.GetPrintImage(payload);
	return JsonConvert.SerializeObject(result);
}

private string Unload(Dictionary<string, string> payload)
{
	var renderer = new PdfRenderer();
	renderer.ClearCache(payload);
	return "Cleared Cache.";
}

private string RenderAnnotationComments(Dictionary<string, string> payload)
{
	var renderer = new PdfRenderer();
	var result = renderer.GetAnnotationComments(payload);
	return JsonConvert.SerializeObject(result);
}

private void button1_Click(object sender, EventArgs e)
{
	this.pdfViewer1.Instance.load("Annotations.pdf", null);
}

Runtime

The resulting EJ2 PdfViewer control will look something like this:

Last updated