2014-04-22 1 views
0

이것은 내 코드입니다. itextsharp에 익숙하지 않아이 반복을 만드는 데 약간의 도움이 필요합니다.단일 절차를 사용하여 C에서 다중 gridviews 인쇄

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 문서 내가이 작업을 수행하려면 어떻게

?

답변

1

Yok는 PDF 내보내기를위한 공개 기능을 만들 수 있습니다. 나는 그것을 어떻게 사용 하는지를 쓸 것이다.

public 클래스 (예 : 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 파일을 필요로 할 때 단지 내가 하나의 PDF는 5 개 개의 다른 테이블을 포함 할이 기능

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

에게 문의하십시오. 'print to pdf'기능을 어떻게 재사용합니까? – divinediu

+0

두 개의 데이터 테이블에 대한 코드를 편집했습니다. 더 많은 테이블을 추가하고 Stringreader를 추가 할 수 있습니다. – aydnahmet

+0

Beautiful. 감사! – divinediu