In this article I will explain with an example, how to export Panel control to PDF document using iTextSharp PDF library in ASP.Net using C# and VB.Net.
 
 

Download iTextSharp and XmlWorkerHelper Libraries

You can download the iTextSharp and XmlWorkerHelper libraries from the following links.
Note: You will need to add the reference of iTextSharp and XmlWorkerHelper libraries in your project.
 
 

HTML Markup

The following HTML Markup consists of:
Panel – For holding the controls.
Labels – For displaying details.
 
Button – For exporting Panel data to PDF.
The Button has been assigned with an OnClick event handler.
<asp:Panel ID="pnlDetails" runat="server">
    <table border="1" style="font-family: Arial; font-size: 10pt; width: 200px">
        <tr>
            <td colspan="2" style="background-color: #18B5F0; height: 18px; color: White; border: 1px solid white">
                <b>Personal Details</b>
            </td>
        </tr>
        <tr>
            <td><b>Name:</b></td>
            <td><asp:Label ID="lblName" runat="server"></asp:Label></td>
        </tr>
        <tr>
            <td><b>Age:</b></td>
            <td><asp:Label ID="lblAge" runat="server"></asp:Label></td>
        </tr>
        <tr>
            <td><b>City:</b></td>
            <td><asp:Label ID="lblCity" runat="server"></asp:Label></td>
        </tr>
        <tr>
            <td><b>Country:</b></td>
            <td><asp:Label ID="lblCountry" runat="server"></asp:Label></td>
        </tr>
    </table>
</asp:Panel>
<br/>
<asp:Button ID="btnExport" runat="server" Text="Export To PDF" OnClick="ExportToPDF" />
 
 

Namespaces

You need to import the following namespaces.
C#
using System.IO;
using System.Data;
using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.tool.xml;
 
VB.Net
Imports System.IO
Imports System.Data
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports iTextSharp.tool.xml
 
 

Populating Data for Export

Inside the Page_Load event handler, the dynamic DataTable is created and the labels are populated with dynamic DataTable.
Note: For more details on how to use dynamic DataTable, please refer my article Dynamically create DataTable and bind to GridView in ASP.Net.
 
C#
protected void Page_Load(object sender, EventArgs e)
{
    if (!this.IsPostBack)
    {
        //Populate DataTable
        DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[4] {
                            new DataColumn("Name"),
                            new DataColumn("Age") ,
                            new DataColumn("City"),
                            new DataColumn("Country") });
        dt.Rows.Add("Mudassar Khan","27","Mumbai","India");
 
        //Bind Datatable to Labels
        lblName.Text = dt.Rows[0]["Name"].ToString();
        lblAge.Text = dt.Rows[0]["Age"].ToString();
        lblCity.Text = dt.Rows[0]["City"].ToString();
        lblCountry.Text = dt.Rows[0]["Country"].ToString();
    }
}
 
VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    If Not Me.IsPostBack Then
        'Populate DataTable
        Dim dt As DataTable = New DataTable()
        dt.Columns.AddRange(New DataColumn(3) {
                            New DataColumn("Name"),
                            New DataColumn("Age"),
                            New DataColumn("City"),
                            New DataColumn("Country")})
        dt.Rows.Add("Mudassar Khan", "27", "Mumbai", "India")
 
        'Bind Datatable to Labels
        lblName.Text = dt.Rows(0)("Name").ToString()
        lblAge.Text = dt.Rows(0)("Age").ToString()
        lblCity.Text = dt.Rows(0)("City").ToString()
       lblCountry.Text = dt.Rows(0)("Country").ToString()
    End If
End Sub
 
 

Exporting ASP.Net Panel to PDF

When the ExportToPDF button is clicked, the StringWriter and HtmlTextWriter class objects are created.
Then, the RenderControl method is called where we pass HtmlTextWriter class object as parameter.
The StringReader and Document class object is created where the PageSize is set.
Then, PdfWriter class object is created, it is used to write the information inside the PDF document.
After that, the PDF document is opened and the data is written using ParseXHtml method of XmlWorkerHelper class.
Then, the Response class properties are set.
1. ContentType – It informs the Browser about the file type. In this case it is PDF file.
2. Content-Disposition – It is a response header indicating, the download file is an attachment and allows setting the file name.
Note: For more details on Content Disposition Header, please refer my article What is Content Disposition Header in ASP.Net.
 
Finally, Document object is written to the Response which initiates the File download operation.
C#
protected void ExportToPDF(object sender, EventArgs e)
{
    using (StringWriter sw = new StringWriter())
    {
        using (HtmlTextWriter hw = new HtmlTextWriter(sw))
        {
            pnlDetails.RenderControl(hw);
            using (StringReader sr = new StringReader(sw.ToString()))
            {
                using (Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f))
                {
                    using (PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.OutputStream))
                    {
                        pdfDoc.Open();
                        XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, sr);
                        pdfDoc.Close();
 
                        Response.ContentType = "application/pdf";
                        Response.AddHeader("content-disposition", "attachment;filename=Panel.pdf");
                        Response.Cache.SetCacheability(HttpCacheability.NoCache);
                        Response.Write(pdfDoc);
                        Response.End();
                    }
                }
            }
        }
    }
}
 
VB.Net
Protected Sub ExportToPDF(ByVal sender As Object, ByVal e As EventArgs)
    Using sw As StringWriter = New StringWriter()
        Using hw As HtmlTextWriter = New HtmlTextWriter(sw)
            pnlDetails.RenderControl(hw)
            Using sr As StringReader = New StringReader(sw.ToString())
                Using pdfDoc As Document = New Document(PageSize.A4, 10.0F, 10.0F, 10.0F, 0F)
                    Using writer As PdfWriter = PdfWriter.GetInstance(pdfDoc, Response.OutputStream)
                        pdfDoc.Open()
                        XMLWorkerHelper.GetInstance().ParseXHtml(writer, pdfDoc, sr)
                        pdfDoc.Close()
 
                        Response.ContentType = "application/pdf"
                        Response.AddHeader("content-disposition", "attachment;filename=Panel.pdf")
                        Response.Cache.SetCacheability(HttpCacheability.NoCache)
                        Response.Write(pdfDoc)
                        Response.[End]()
                    End Using
                End Using
            End Using
        End Using
    End Using
End Sub
 
 

Screenshots

Panel Control

Export ASP.Net Panel contents to PDF using iTextSharp
 

Exported PDF file

Export ASP.Net Panel contents to PDF using iTextSharp
 
 

Demo

 
 

Downloads