【问题标题】:Generating pdf report in C# but don't get Data在 C# 中生成 pdf 报告但没有获取数据
【发布时间】:2015-10-28 13:28:48
【问题描述】:

我有以下代码,但没有得到 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(); 
}

【问题讨论】:

    标签: c#


    【解决方案1】:

    您为什么不尝试直接将 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);  
         }  
       }  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多