簡體   English   中英

使用iTextSharp打印帶有多個表的PDF

[英]Using iTextSharp to print a PDF with multiple tables

我要打印一份詳細的帳單,以匯總各個部門的帳單詳細信息。 我需要將它們打印在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;
    }

好吧,這對我來說真的很好,所以我希望有一天能對某人有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM