Hi iamjer76,
Refer below sample.
HTML
<asp:Panel runat="server" ID="pnlImage">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Customer Id" ItemStyle-Width="90" />
<asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="120" />
<asp:BoundField DataField="Country" HeaderText="Country" ItemStyle-Width="120" />
</Columns>
</asp:GridView>
<br />
<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="Id" HeaderText="Customer Id" ItemStyle-Width="90" />
<asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="120" />
<asp:BoundField DataField="Country" HeaderText="Country" ItemStyle-Width="120" />
</Columns>
</asp:GridView>
</asp:Panel>
<asp:HiddenField ID="hfImageData" runat="server" />
<br />
<asp:Button ID="btnExport" Text="Export To Pdf" runat="server" UseSubmitBehavior="false"
OnClick="ExportToPdf" OnClientClick="return ConvertToImage(this)" />
<br />
<asp:Button Text="Export To Excel" runat="server" runat="server" OnClick="ExportToExcel"
UseSubmitBehavior="false" OnClientClick="return ConvertToImage(this)" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.min.js"></script>
<script type="text/javascript">
function ConvertToImage(btnExport) {
html2canvas($("[id*=pnlImage]")[0], {
onrendered: function (canvas) {
var base64 = canvas.toDataURL();
$("[id*=hfImageData]").val(base64);
__doPostBack(btnExport.name, "");
}
});
return false;
}
</script>
Namespaces
C#
using System.Data;
using iTextSharp.text.pdf;
using iTextSharp.text;
using System.IO;
VB.Net
Imports System.Data
Imports System.IO
Imports iTextSharp.text
Imports iTextSharp.text.pdf
Code
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3] { new DataColumn("Id", typeof(int)),
new DataColumn("Name", typeof(string)),
new DataColumn("Country",typeof(string)) });
dt.Rows.Add(1, "John Hammond", "United States");
dt.Rows.Add(2, "Mudassar Khan", "India");
dt.Rows.Add(3, "Suzanne Mathews", "France");
dt.Rows.Add(4, "Robert Schidner", "Russia");
GridView1.DataSource = dt;
GridView1.DataBind();
GridView2.DataSource = dt;
GridView2.DataBind();
}
}
protected void ExportToPdf(object sender, EventArgs e)
{
string base64 = Request.Form[hfImageData.UniqueID].Split(',')[1];
byte[] bytes = Convert.FromBase64String(base64);
Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 10f);
PdfWriter writer = PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
pdfDoc.Open();
iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(bytes);
pdfDoc.Add(img);
pdfDoc.Close();
Response.ContentType = "application/pdf";
Response.AddHeader("content-disposition", "attachment;filename=GridView.pdf");
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Write(pdfDoc);
Response.End();
}
protected void ExportToExcel(object sender, EventArgs e)
{
string base64 = Request.Form[hfImageData.UniqueID].Split(',')[1];
byte[] bytes = Convert.FromBase64String(base64);
string filepath = string.Format("~/Files/GridView.jpg");
File.WriteAllBytes(Server.MapPath(filepath), bytes);
System.Web.UI.WebControls.Image imgCapture = new System.Web.UI.WebControls.Image();
imgCapture.ImageUrl = this.GetAbsoluteUrl(filepath);
using (StringWriter sw = new StringWriter())
{
using (HtmlTextWriter hw = new HtmlTextWriter(sw))
{
System.Web.UI.WebControls.Table table = new System.Web.UI.WebControls.Table();
TableRow row = new TableRow();
row.Cells.Add(new TableCell());
row.Cells[0].Controls.Add(imgCapture);
table.Rows.Add(row);
table.RenderControl(hw);
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=Images.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
Response.Write(sw.ToString());
Response.Flush();
Response.End();
}
}
}
private string GetAbsoluteUrl(string relativeUrl)
{
relativeUrl = relativeUrl.Replace("~/", string.Empty);
string[] splits = Request.Url.AbsoluteUri.Split('/');
if (splits.Length >= 2)
{
string url = splits[0] + "//";
for (int i = 2; i < splits.Length - 1; i++)
{
url += splits[i];
url += "/";
}
return url + relativeUrl;
}
return relativeUrl;
}
VB.Net
Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
If Not Me.IsPostBack Then
Dim dt As DataTable = New DataTable()
dt.Columns.AddRange(New DataColumn(2) {New DataColumn("Id", GetType(Integer)), New DataColumn("Name", GetType(String)), New DataColumn("Country", GetType(String))})
dt.Rows.Add(1, "John Hammond", "United States")
dt.Rows.Add(2, "Mudassar Khan", "India")
dt.Rows.Add(3, "Suzanne Mathews", "France")
dt.Rows.Add(4, "Robert Schidner", "Russia")
GridView1.DataSource = dt
GridView1.DataBind()
GridView2.DataSource = dt
GridView2.DataBind()
End If
End Sub
Protected Sub ExportToPdf(ByVal sender As Object, ByVal e As EventArgs)
Dim base64 As String = Request.Form(hfImageData.UniqueID).Split(","c)(1)
Dim bytes As Byte() = Convert.FromBase64String(base64)
Dim pdfDoc As Document = New Document(PageSize.A4, 10.0F, 10.0F, 10.0F, 10.0F)
Dim writer As PdfWriter = PdfWriter.GetInstance(pdfDoc, Response.OutputStream)
pdfDoc.Open()
Dim img As iTextSharp.text.Image = iTextSharp.text.Image.GetInstance(bytes)
pdfDoc.Add(img)
pdfDoc.Close()
Response.ContentType = "application/pdf"
Response.AddHeader("content-disposition", "attachment;filename=GridView.pdf")
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Response.Write(pdfDoc)
Response.[End]()
End Sub
Protected Sub ExportToExcel(ByVal sender As Object, ByVal e As EventArgs)
Dim base64 As String = Request.Form(hfImageData.UniqueID).Split(","c)(1)
Dim bytes As Byte() = Convert.FromBase64String(base64)
Dim filepath As String = String.Format("~/Files/GridView.jpg")
File.WriteAllBytes(Server.MapPath(filepath), bytes)
Dim imgCapture As System.Web.UI.WebControls.Image = New System.Web.UI.WebControls.Image()
imgCapture.ImageUrl = Me.GetAbsoluteUrl(filepath)
Using sw As StringWriter = New StringWriter()
Using hw As HtmlTextWriter = New HtmlTextWriter(sw)
Dim table As System.Web.UI.WebControls.Table = New System.Web.UI.WebControls.Table()
Dim row As TableRow = New TableRow()
row.Cells.Add(New TableCell())
row.Cells(0).Controls.Add(imgCapture)
table.Rows.Add(row)
table.RenderControl(hw)
Response.Clear()
Response.Buffer = True
Response.AddHeader("content-disposition", "attachment;filename=Images.xls")
Response.Charset = ""
Response.ContentType = "application/vnd.ms-excel"
Response.Write(sw.ToString())
Response.Flush()
Response.[End]()
End Using
End Using
End Sub
Private Function GetAbsoluteUrl(ByVal relativeUrl As String) As String
relativeUrl = relativeUrl.Replace("~/", String.Empty)
Dim splits As String() = Request.Url.AbsoluteUri.Split("/"c)
If splits.Length >= 2 Then
Dim url As String = splits(0) & "//"
For i As Integer = 2 To splits.Length - 1 - 1
url += splits(i)
url += "/"
Next
Return url & relativeUrl
End If
Return relativeUrl
End Function