使用C#生成pdf报告但不获取数据

时间:2015-10-28 13:28:49

标签: c#

我有以下代码但是没有获取PDF文件的数据。 pdf文件只有行但没有数据请帮我生成报告。我该怎么做才能从表中获取数据表名是tbl_User_Master,在该ID中,FirstName,LastName和ContactNo是字段,我需要在pdf文件上打印

private DataTable GetData()
{
    try
    {
        conn.Open();
        String query = "Select ID,FirstName,LastName,ContactNo from tbl_User_Master";
        command = new SqlCommand(query, conn);
        SqlDataAdapter da = new SqlDataAdapter(command);
        DataTable dt = new DataTable();
        da.Fill(dt);
        return dt;
    }
    catch (Exception ex)
    {

    }
    finally {
        conn.Close();
    }
    return null;
}
protected void GenerateReport(object sender, EventArgs e)
{
    //Get the data from database into datatable
    DataTable dt = GetData();

    //Create a dummy GridView
    GridView GridView1 = new GridView();
    GridView1.AllowPaging = false;
    GridView1.DataSource = dt;
    GridView1.DataBind();
    String file = DateTime.Now.ToString() + "Report.pdf";
    Response.ContentType = "application/pdf";
    Response.AddHeader("content-disposition","attachment;filename="+file);
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    StringWriter sw = new StringWriter();
    HtmlTextWriter hw = new HtmlTextWriter(sw);
    GridView1.RenderControl(hw);
    StringReader sr = new StringReader(sw.ToString());
    Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
    HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
    PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
    pdfDoc.Open();
    htmlparser.Parse(sr);
    pdfDoc.Close();
    Response.Write(pdfDoc);
    Response.End(); 
}

1 个答案:

答案 0 :(得分:0)

为什么不尝试直接将DataTable导出为PDF而不使用GridView?您可以尝试以下代码,如Santosh Singh的article中所述

 public void ExportToPdf(DataTable myDataTable)  
   {      
     Document pdfDoc = new Document(PageSize.A4, 10, 10, 10, 10);  
     try  
     {  
       PdfWriter.GetInstance(pdfDoc, System.Web.HttpContext.Current.Response.OutputStream);  
       pdfDoc.Open();  
       Chunk c = new Chunk("" + System.Web.HttpContext.Current.Session["CompanyName"] + "", FontFactory.GetFont("Verdana", 11));  
       Paragraph p = new Paragraph();  
       p.Alignment = Element.ALIGN_CENTER;  
       p.Add(c);  
       pdfDoc.Add(p);  
       string clientLogo = System.Web.HttpContext.Current.Session["CompanyName"].ToString();  
       clientLogo = clientLogo.Replace(" ", "");  
       string clogo = clientLogo + ".jpg";  
       string imageFilePath = System.Web.HttpContext.Current.Server.MapPath("../ClientLogo/" + clogo + "");  
       iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(imageFilePath);  
       //Resize image depend upon your need   
       jpg.ScaleToFit(80f, 60f);  
       //Give space before image   
       jpg.SpacingBefore = 0f;  
       //Give some space after the image   
       jpg.SpacingAfter = 1f;  
       jpg.Alignment = Element.HEADER;  
       pdfDoc.Add(jpg);  
       Font font8 = FontFactory.GetFont("ARIAL", 7);  
       DataTable dt = myDataTable;  
       if (dt != null)  
       {  
         //Craete instance of the pdf table and set the number of column in that table  
         PdfPTable PdfTable = new PdfPTable(dt.Columns.Count);  
         PdfPCell PdfPCell = null;  
         for (int rows = 0; rows < dt.Rows.Count; rows++)  
         {  
           for (int column = 0; column < dt.Columns.Count; column++)  
           {  
             PdfPCell = new PdfPCell(new Phrase(new Chunk(dt.Rows[rows][column].ToString(), font8)));  
             PdfTable.AddCell(PdfPCell);  
           }  
         }  
         //PdfTable.SpacingBefore = 15f; // Give some space after the text or it may overlap the table            
         pdfDoc.Add(PdfTable); // add pdf table to the document   
       }  
       pdfDoc.Close();  
       Response.ContentType = "application/pdf";  
       Response.AddHeader("content-disposition", "attachment; filename= SampleExport.pdf");  
       System.Web.HttpContext.Current.Response.Write(pdfDoc);  
       Response.Flush();  
       Response.End();  
       //HttpContext.Current.ApplicationInstance.CompleteRequest();  
     }  
     catch (DocumentException de)  
     {  
       System.Web.HttpContext.Current.Response.Write(de.Message);  
     }  
     catch (IOException ioEx)  
     {  
       System.Web.HttpContext.Current.Response.Write(ioEx.Message);  
     }  
     catch (Exception ex)  
     {  
       System.Web.HttpContext.Current.Response.Write(ex.Message);  
     }  
   }