在asp.net中将gridview导出为pdf格式

在asp.net中将gridview导出为pdf格式

问题描述:

嗨专家,



我试图将Gridview数据导出为pdf格式我收到此错误无法转换类型'iTextSharp.text的对象。 html.simpleparser.CellWrapper'输入'iTextSharp.text.Paragraph'如何解决这个问题。



这是我正在使用的代码。



Hi Experts,

I am trying to export the Gridview data into pdf format I am getting this error "Unable to cast object of type 'iTextSharp.text.html.simpleparser.CellWrapper' to type 'iTextSharp.text.Paragraph'" how to solve this issue.

Here is the code I am using.

Response.ContentType = "application/pdf";
                Response.AddHeader("content-disposition",
                                        "attachment;filename=EmpDetails.pdf");
                Response.Cache.SetCacheability(HttpCacheability.NoCache);
                StringWriter sw = new StringWriter();
                HtmlTextWriter hw = new HtmlTextWriter(sw);
                griddetails.AllowPaging = false;
                griddetails.DataBind();
                griddetails.RenderControl(hw);
                griddetails.HeaderRow.Style.Add("width", "15%");
                griddetails.HeaderRow.Style.Add("font-size", "10px");
                griddetails.Style.Add("text-decoration", "none");
                griddetails.Style.Add("font-family", "Arial, Helvetica, sans-serif;");
                griddetails.Style.Add("font-size", "8px");
                StringReader sr = new StringReader(sw.ToString());
                iTextSharp.text.Document pdfDoc =
              new iTextSharp.text.Document(PageSize.A4, 7f, 7f, 7f, 0f);
                iTextSharp.text.html.simpleparser.HTMLWorker htmlparser = new
              iTextSharp.text.html.simpleparser.HTMLWorker(pdfDoc);
                PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
                pdfDoc.Open();
                htmlparser.Parse(sr);// Here I am getting the error
                pdfDoc.Close();
                Response.Write(pdfDoc);
                Response.End();



请分享您的想法。


Kindly Share your thoughts.

有两个方法1)将结果导入水晶报告并导出为PDF方法2)使用任何第三方控件导出。没有直接的方法
There are two ways 1) get the result in to crystal report and export to PDF method 2) Use any third party control to export. there is no direct way


你必须在代码中进行一些更改..使用以下代码

u have to make some changes in code..use following code
Response.ContentType = "application/pdf";
     Response.AddHeader("content-disposition", "attachment;filename=UserDetails.pdf");
     Response.Cache.SetCacheability(HttpCacheability.NoCache);
     StringWriter sw = new StringWriter();
     HtmlTextWriter hw = new HtmlTextWriter(sw);

     gvdetails.AllowPaging = false;
     gvdetails.DataBind();
     gvdetails.RenderBeginTag(hw);
     gvdetails.HeaderRow.RenderControl(hw);
     foreach (GridViewRow row in gvdetails.Rows)
     {
         row.RenderControl(hw);
     }
     gvdetails.FooterRow.RenderControl(hw);
     gvdetails.RenderEndTag(hw);
     gvdetails.Caption = "Your caption";
     gvdetails.HeaderRow.Style.Add("width", "15%");
     gvdetails.HeaderRow.Style.Add("font-size", "10px");
     gvdetails.Style.Add("text-decoration", "none");
     gvdetails.Style.Add("font-family", "Arial, Helvetica, sans-serif;");
     gvdetails.Style.Add("font-size", "8px");
     StringReader sr = new StringReader(sw.ToString());
     Document pdfDoc = new Document(PageSize.A2, 7f, 7f, 7f, 0f);
     HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
     PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
     pdfDoc.Open();
     htmlparser.Parse(sr);
     pdfDoc.Close();
     Response.Write(pdfDoc);
     Response.End();



i参考以下链接中的答案5.

http://stackoverflow.com/questions/6343630/gridview-must-be -plaed-a-form-tag-with-runat-server-even-after-the-gri [ ^ ]



或在你的代码页中添加以下代码块并使用你的代码,因为它是


i have refer answer 5 from following link.
http://stackoverflow.com/questions/6343630/gridview-must-be-placed-inside-a-form-tag-with-runat-server-even-after-the-gri[^]

or in ur code page add following code block and use ur code as it is

public override void VerifyRenderingInServerForm(Control control)
   {
       /* Verifies that the control is rendered */
   }


试试这样:



protected void imgExcel_Click(object sender,ImageClickEventArgs e)

{

gvEmp.AllowPaging = false;

gvEmp.DataBind();

Response.ClearContent();

Response.AddHeader(Content-disposition,string.Format(attachment; filename = { 0},Emp));

Response.Charset =;

Response.ContentType =application / pdf;

StringWriter sw = new StringWriter();

HtmlTextWriter htw = new HtmlTextWriter(sw);

gvEmp.RenderControl(htw);

回复.Write(sw.ToString());

Response.End();

}



public override void VerifyRenderingInServerForm(Control control)

{

// base.VerifyRenderingInServerForm(control);

}
Try like this :

protected void imgExcel_Click(object sender, ImageClickEventArgs e)
{
gvEmp.AllowPaging = false;
gvEmp.DataBind();
Response.ClearContent();
Response.AddHeader("Content-disposition", string.Format("attachment;filename={0}", "Emp"));
Response.Charset = "";
Response.ContentType = "application/pdf";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
gvEmp.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
}

public override void VerifyRenderingInServerForm(Control control)
{
// base.VerifyRenderingInServerForm(control);
}