This article explains how to export ASP.Net grid data to a PDF with custom width using iTextSharp.
What ITextSharp is: iTextSharp is a free and open source assembly that helps to convert page output or HTML content in PDF file.
You can download it from here:
http://sourceforge.net/projects/itextsharp/
Now add that DLL to the application.
Getting Started
Start Visual Studio and create a new website in ASP.Net and add these 2 DLLs to the solution:
- Itextsharp.dll
- itextsharp.pdfa.dll
Now add these namespaces:
- using iTextSharp.text;
- using iTextSharp.text.pdf;
- using iTextSharp.text.html;
- using iTextSharp.text.html.simpleparser;
This is my GridView HTML:
<div>
<asp:gridview id="gvEmployees" runat="server" emptydatatext="No data found" autogeneratecolumns="False"
datakeynames="EmployeeID" datasourceid="SqlDataSource1" allowpaging="False" backcolor="White"
bordercolor="#DEDFDE" borderstyle="None" borderwidth="1px" cellpadding="4" forecolor="Black"
gridlines="Vertical" height="165px" width="678px">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:BoundField DataField="EmployeeID" HeaderText="EmployeeID" InsertVisible="False" ReadOnly="True" SortExpression="EmployeeID" />
<asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
<asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
<asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
<asp:BoundField DataField="Region" HeaderText="Region" SortExpression="Region" />
<asp:BoundField DataField="PostalCode" HeaderText="PostalCode" SortExpression="PostalCode" />
<asp:BoundField DataField="Country" HeaderText="Country" SortExpression="Country" />
</Columns>
<FooterStyle BackColor="#CCCC99" />
<HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
<RowStyle BackColor="#F7F7DE" />
<SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
<SortedAscendingCellStyle BackColor="#FBFBF2" />
<SortedAscendingHeaderStyle BackColor="#848384" />
<SortedDescendingCellStyle BackColor="#EAEAD3" />
<SortedDescendingHeaderStyle BackColor="#575357" />
</asp:gridview>
</div>
<asp:sqldatasource id="SqlDataSource1" runat="server" connectionstring="<%$ ConnectionStrings:NorthwindConnectionString %>"
selectcommand="SELECT [EmployeeID], [LastName], [FirstName], [Title], [BirthDate], [City], [Region], [PostalCode], [Country] FROM [Employees]"></asp:sqldatasource>
<asp:button id="btnExport" runat="server" text="Export To PDF" onclick="btnExport_Click" />
Now let's work on the code behind part.
protected void btnExport_Click(object sender, EventArgs e)
{
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=EmployeeList.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
StringWriter stringWriter = new StringWriter();
HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter);
gvEmployees.DataBind();
gvEmployees.RenderControl(htmlTextWriter);
gvEmployees.HeaderRow.Style.Add("width", "10%");
gvEmployees.HeaderRow.Style.Add("font-size", "15px");
gvEmployees.Style.Add("text-decoration", "none");
gvEmployees.Style.Add("font-family", "Arial, Helvetica, sans-serif;");
gvEmployees.Style.Add("font-size", "8px");
StringReader sr = new StringReader(stringWriter.ToString());
Document doc = new Document(PageSize.A2, 7f, 7f, 7f, 0f);
HTMLWorker htmlparser = new HTMLWorker(doc);
PdfWriter.GetInstance(doc, Response.OutputStream);
doc.Open();
htmlparser.Parse(sr);
doc.Close();
Response.Write(doc);
Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
}
Now run the application. When the button is clicked the PDF will show in the grid view data like this:
Image 1.
Image 2.
For more help, download the attached sample application.