使用iTextSharp打印包含多个表的PDF

我有一份详细的打印账单,可以从各个部门提取账单明细。 我需要将它们打印在PDF上。 但是我使用了大量的选择程序,因为我必须显示很多表,所以我需要可以重用的代码。

我使用的命名空间:

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Data; using System.Data.SqlClient; using System.Configuration; using System.IO; using iTextSharp.text; using iTextSharp.text.pdf; using iTextSharp.text.html; using iTextSharp.text.html.simpleparser; 

生成PDF的“ Print按钮单击事件:

 protected void btnPrintToPDF_Click(object sender, EventArgs e) { //Default Settings for your PDF File 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); //Initialize a StringSwriter StringWriter stringWrite = new StringWriter(); DataTable dt = new DataTable(); //Info line in PDF stringWrite.WriteLine("Clothing department"); //Fetch DataTable dt = getDataTablebyProcedure("SelectFromClothingDepartment"); //Append it to String Writer stringWrite = getStringWriterbyDataTable(dt, stringWrite); //Info line in PDF stringWrite.WriteLine("Food Department"); //Fetch DataTable dt = getDataTablebyProcedure("SelectFromFoodDepartment"); //Append it to Stwing Writer stringWrite = (getStringWriterbyDataTable(dt, stringWrite)); //As many procedures as you want to go here //Finally Write the writer into a reader StringReader sr = new StringReader(stringWrite.ToString()); //Generate the pdf 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(); } 

返回Select过程的数据表的过程

  protected DataTable getDataTablebyProcedure(string ProcedureName) { SqlDataAdapter da= new SqlDataAdapter(); DataTable dt=new DataTable(); try {//open a connection to your DB da.Fill(dt); } catch (Exception ex) {//handle Exception } finally {//Close Connection } return dt; } 

将数据表附加到StringWriter函数

 protected static StringWriter getStringWriterbyDataTable(DataTable dt, StringWriter stringWrite1 ) { //System.IO.StringWriter stringWrite1 = new System.IO.StringWriter(); System.Web.UI.HtmlTextWriter htmlWrite1 = new HtmlTextWriter(stringWrite1); DataGrid myDataGrid1 = new DataGrid(); myDataGrid1.DataSource = dt; myDataGrid1.DataBind(); myDataGrid1.RenderControl(htmlWrite1); return stringWrite1; } 

嗯,这对我来说真的很好,所以我希望有一天能帮助别人。