【问题标题】:Print multiple gridviews in c# using single procedure使用单个过程在 C# 中打印多个网格视图
【发布时间】:2014-04-22 10:47:01
【问题描述】:

这是我的工作代码。由于我不熟悉itextsharp,因此我需要一些帮助来进行迭代。

当我单击Print 按钮时,它会运行MySelectProcedure1,并且表格结果会以名为DataTable 的PDF 格式下载。

 protected void btnPrint_Click(object sender, EventArgs e)
        {
        Procedure("MySelectProcedure1");.
        Procedure("MySelectProcedure2");
        }
    protected void Procedure(string Proc)
    {
            Connection con = new Connection();
        SqlDataAdapter da;
        DataTable dt;
        con.con = new SqlConnection(con.str);
        con.cmd.CommandText = Proc;
        con.cmd.CommandType = CommandType.StoredProcedure;
        da = new SqlDataAdapter();
        da.SelectCommand = con.cmd;
        dt = new DataTable();
        try
            {
            con.con.Open();
            da.Fill(dt);
            print(dt);
            }
        catch (Exception ex)
            {

            }
        finally
            {
            con.con.Close();
            con.con.Dispose();

            }

    }

   protected void print (DataTable dt) 
      {
    GridView GridView1 = new GridView();
    GridView1.AllowPaging = false;
    GridView1.DataSource = dt;
    GridView1.DataBind();
   Response.ContentType = "application/pdf";
   Response.AddHeader("content-disposition", "attachment;filename=DataTable.pdf");
    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(); 
         }

     }

但是,它不会在同一个 PDF 中打印 MySelectProcedure1

这就是我想要的:

  • 打开 PDF 文档。
  • 打印几行
  • MySelectProcedure1 的打印结果
  • 再打印几行
  • MySelectProcedure2 的打印结果
  • 关闭并保存 PDF 文档

我该怎么做?

【问题讨论】:

    标签: c# asp.net sql pdf itextsharp


    【解决方案1】:

    Yok 可以创建导出 PDF 的公共功能。我会写我如何使用它。

    创建一个公共类,例如general.cs。并在其中添加此代码。

    public static void ExportPDF(DataTable dt1, DataTable dt2)
    {
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.ContentType = "application/pdf";
        HttpContext.Current.Response.AddHeader("content-disposition", string.Format("attachment;filename={0}.pdf", "PDFExport"));
        HttpContext.Current.Response.Charset = "utf-8";
        HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
        HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);
        //For First DataTable
        System.IO.StringWriter stringWrite1 = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter htmlWrite1 = new HtmlTextWriter(stringWrite1);
        DataGrid myDataGrid1 = new DataGrid();
        myDataGrid1.DataSource = dt1;
        myDataGrid1.DataBind();
        myDataGrid1.RenderControl(htmlWrite1);
        //For Second DataTable 
        System.IO.StringWriter stringWrite2 = new System.IO.StringWriter();
        System.Web.UI.HtmlTextWriter htmlWrite2 = new HtmlTextWriter(stringWrite2);
        DataGrid myDataGrid2 = new DataGrid();
        myDataGrid2.DataSource = dt2;
        myDataGrid2.DataBind();
        myDataGrid2.RenderControl(htmlWrite2);
        //You can add more DataTable
        StringReader sr = new StringReader(stringWrite1.ToString() + stringWrite2.ToString());
        Document pdfDoc = new Document(new Rectangle(288f, 144f), 10f, 10f, 10f, 0f);
        pdfDoc.SetPageSize(PageSize.A4.Rotate());
        HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
        PdfWriter.GetInstance(pdfDoc, HttpContext.Current.Response.OutputStream);
        pdfDoc.Open();
        htmlparser.Parse(sr);
        pdfDoc.Close();
        HttpContext.Current.Response.Write(pdfDoc);
        HttpContext.Current.Response.End();
    }
    

    当你需要PDF时只调用这个函数

        protected void lnkExportPDF_Click(object sender, EventArgs e)
        {
            General.ExportPDF(rptList);
        } 
    public override void VerifyRenderingInServerForm(Control control)
        { }
    

    【讨论】:

    • 我想要一个包含 5 个不同表格的 PDF。如何重用我的print to pdf 函数?
    • 我编辑了两个数据表的代码。您可以添加更多表格并附加 Stringreader
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多