SharePoint Pals
 | Sign In
Generate PDF report using iTextSharp (.NET PDF library) in SharePoint Environment
by Ahamed Fazil Buhari 20 Aug 2016
SharePoint Developer
Today  :   14     Total  :    1182

Hello Everyone, In this article we are going to look into step by step approach to pull the content from SharePoint and put into a new PDF file using iTextSharp. Consider that we need to show the SharePoint List data in a PDF file.

iTextSharp is a .NET PDF library which is mainly used to Create, Inspect and Maintain document in PDF. To know more about this library. Please refer here.

Download the iTextSharp library from the link given above. In this article we are using iTextSharp-5.5.9 version. Add the dll into your solution to make use of the functionalities available in iTextSharp.

Step 1: Create Solution in SharePoint 2010:

Here, I’ve create a Console Application and added the SharePoint dll’s just for making execution simple. New Project -> Windows (side navigation) -> Console Application.


Here I’m creating simple Console Application – (.NET 3.5) and changed the Platform Target to x64 in Solution -> Properties -> Build to retrieve the List values from SharePoint site and the solution is in the server where the SharePoint resides. Ignore this if you are not using Console Application.

Please note: We can use this iTextSharp dll in Sandbox or Farm solutions or any other solution which uses .Net environment. It not really relies on SharePoint.

Step 2: Add iTextShap .NET library dll into the Solution

In the created Project, right click on the References folder -> Add Reference. In the Add Reference window chose the Browse tab and navigate to the folder where the iTextSharp dll is available. Select the itextsharp dll and click OK. As it is Console Application I need to add couple of SharePoint dll’s to access SharePoint resources.


You can see the itextsharp references in your project.


Step 3: Retrieving SharePoint List Items and Embed the Content in PDF


Let’s say we have a SharePoint List like shown below, and we need to put this List and its content into a PDF file.

The following code will generate a PDF file with the List Content,

 using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using Microsoft.SharePoint;
 using Microsoft.SharePoint.Security;
 using Microsoft.SharePoint.Utilities;
 using System.IO;
 using iTextSharp.text;
 using iTextSharp.text.pdf;
 using iTextSharp.text.html.simpleparser;
 namespace PDF_generation_console
     class Program
         static void Main(string[] args)
             Console.WriteLine("PDF Generating...");
                 Rectangle pageSize = PageSize.A4;
                 //Using the ItextSharp Document
                 //Document parameters -> pageSize, marginLeft, marginRight, marginTop, marginBottom
                 using (Document document = new Document(pageSize, 5f, 5f, 10f, 10f))
                     //Create PDF writer object to write content into the document                    
                     PdfWriter writer = PdfWriter.GetInstance(document, new FileStream(@"C:\SharePoint_PDF_List.pdf", FileMode.Create));
                     //Creating variable for Font size and style
                     Font BOLD_10 = FontFactory.GetFont("Arial", 10f, iTextSharp.text.Font.BOLD);
                     Font BOLD_9 = FontFactory.GetFont("Arial", 9f, iTextSharp.text.Font.BOLD);
                     Font NORMAL_9 = FontFactory.GetFont("Arial", 9f, iTextSharp.text.Font.NORMAL);
                     //Add the Page
                     //pdfpTable parameters -> Number of columns in the table
                     PdfPTable table = new PdfPTable(2);
                     // Applying styling
                     table.DefaultCell.BorderWidth = 0;
                     table.DefaultCell.PaddingBottom = 15;
                     table.DefaultCell.Border = Rectangle.NO_BORDER;
                     table.DefaultCell.BorderWidth = 0;
                     table.TotalWidth = 100;
                     table.SetTotalWidth(new float[] { 15f, 60f });
                     //Row 1 for table without border and colspan=2 
                     //Create cell to insert into the Table
                     PdfPCell col1 = new PdfPCell(new Phrase("PDF list", BOLD_10));
                     //Styling and Positioning the cell
                     col1.PaddingTop = 10;
                     col1.PaddingBottom = 10;
                     col1.Colspan = 2;
                     col1.Border = Rectangle.NO_BORDER;
                     col1.BorderWidth = 0;
                     //Adding the cell into the table
                     //Row 2 - 1st cell for the table with bold border
                     PdfPCell tableHeading = new PdfPCell(new Phrase("Title", BOLD_9));
                     tableHeading.Border = Rectangle.BOX;
                     tableHeading.BorderWidth = 1;
                     tableHeading.BackgroundColor = BaseColor.LIGHT_GRAY;
                     tableHeading.BorderColor = BaseColor.GRAY;
                     //Row 2 - 2nd cell for the table with bold border
                     PdfPCell tableHeading2 = new PdfPCell(new Phrase("Body", BOLD_9));
                     tableHeading2.Border = Rectangle.BOX;
                     tableHeading2.BorderWidth = 1;
                     tableHeading2.BackgroundColor = BaseColor.LIGHT_GRAY;
                     tableHeading2.BorderColor = BaseColor.GRAY;
                     //Access the list and iterate throught all the items using SPSite -> SPWeb -> SPList -> ItemCollection -> Item
                     using (SPSite oSiteCollection = new SPSite(@"http://sharepointpalsdemo/sites/dev/"))
                         using (SPWeb spWeb = oSiteCollection.OpenWeb())
                             SPList spList = spWeb.Lists["PDF list"];
                             SPListItemCollection spListItemCol = spList.GetItems();
                             SPField sharePointField = null;
                             string getFieldValue = string.Empty;
                             foreach (SPListItem spListItem in spListItemCol)
                                 sharePointField = spListItem.Fields.GetField("Title");
                                 string title = sharePointField.GetFieldValueAsText(spListItem["Title"]);
                                 sharePointField = spListItem.Fields.GetField("Body");
                                 string body = sharePointField.GetFieldValueAsText(spListItem["Body"]);
                                 //Create new PDFCell to add the title content
                                 PdfPCell tableValue = new PdfPCell(new Phrase(title, NORMAL_9));
                                 tableValue.Border = Rectangle.BOX;
                                 tableValue.BorderWidth = 1;
                                 //Inserting html tags and applying inline css
                                 string bodyColumnValue = "<table height='15' width='100'><tr><td align='center' valign='middle' bgcolor=\"#07AF56\"><font size='1' color=\"#FFF\">" + body + "</font></td></tr></table>";
                                 iTextSharp.text.html.simpleparser.StyleSheet styles = new iTextSharp.text.html.simpleparser.StyleSheet();
                                 List<IElement> htmlarraylist = HTMLWorker.ParseToList(new StringReader(bodyColumnValue), styles);
                                 //Create new PDFCell to add the body content                                
                                 PdfPCell tableValue2 = new PdfPCell();
                                 for (int k = 0; k < htmlarraylist.Count; k++)
                                 //Apply border style                                
                                 tableValue2.Border = Rectangle.BOX;
                                 tableValue2.BorderWidth = 1;
                                 //Add the cells into the table
                     //Add the table into the document
             catch (Exception ex)
                 Console.WriteLine("Error has occured " + ex.Message);

The code itself has all the required comments. I don’t have much to explain about the code.

And the output will be,



Happy Coding

Ahamed Buhari

blog comments powered by Disqus

SharePoint Pals

SharePoint Pals, a community portal for SharePoint developers, Administrators and End Users. Let's join hands and share the point together.
Read this on mobile


Angular Js Training In Chennai
Advanced Angular Js training with real world developer scenarios
Angular Js, Web Api and Ionic for .Net Developers
All in one client side application development for .Net developers
Angular Js For SharePoint Developers
Get ready for the future. Its no more just C#

Get Connected

SharePoint Resources

SharePoint 2013 and 2010 Web Parts
Free Web Parts with Source Code for SharePoint Community

SharePoint 2013 Books and Tutorials
Collection of free SharePoint 2013 books and tutorials (eBooks, pdfs)

Supported By

Contribute your article and be eligible for a one month Free Subscription for Plural Sight. The Author of the most popular New Article (published in the previous month) will be awarded with a Free One month Plural Sight Subscription. Article can be sent to in a word document.

Related Resources

Recent Tweets

Twitter October 23, 22:21
How to Add/Remove User Custom Actions (in Site Actions Menu) Programmatically using CSOM PNP in SharePoint -

Twitter October 21, 21:34
How to Add a JS Link Reference to the Display Form or Any other ASPX Programmatically using CSOM PNP in SharePoint -

Twitter October 20, 13:01
How to Add a JS Link Reference to the NewForm and EditForm Programmatically using CSOM PNP in SharePoint Office 365-

Twitter October 12, 12:15
How to Deploy Provider Hosted Apps (Add-Ins) by App Stapling in SharePoint Office 365 -

Twitter October 11, 13:39
How to Deploy Provider HostedApp programmatically using CSOM in SharePoint Office 365 Activating Developer Feature -

Follow us @SharePointPals
Note: For Customization and Configuration, CheckOutRecent Tweets Documentation