2014-10-15 2 views
0

PDF로 페이지를 인쇄하고 싶습니다. 하지만 인쇄하기 전에 모든 컨트롤 (GridView, Treeview ...)을 확장하고 싶습니다.asp.net 페이지를 PDF로 인쇄

Page.RenderControl (또는 Control.RenderControl)을 사용하여 somes 솔루션을 찾았지만 "페이지에 하나의 서버 쪽 양식 태그 만있을 수 있습니다."라는 오류가 있습니다. 오류 (하나의 양식 만 추가해야 함)를 이해합니다. 하지만 RenderControl이 새로운 Writer (현재의 Writer가 아닌)에 쓸 것이라고 생각했을 것입니다.

Dim stringWriter As New StringWriter() 
    Dim htmlWriter As New HtmlTextWriter(stringWriter) 
    Me.Page.RenderControl(htmlWriter) 

확장에 컨트롤, 내가 속성을 변경해야하고, 페이지를 렌더링합니다. 일단 PDF로 렌더링, 나는 정상적으로 페이지를로드하게하고 싶습니다. Response.End로드가 중지되고 페이지가 비어 있습니다.

페이지 콘텐츠를 가져오고 (예 : grid.AllowPaging = False) 콘텐츠를 변경하고 스트림으로 전송하는 좋은 대안이 있습니까?

+0

당신이 창을 팝업 거기에 PDF를 생성 할 수 HtmlForm 대신 Me.Page.RenderControl으로 시도? – Tim

답변

1

 Response.ContentType = "application/pdf"; 
     Response.AddHeader("content-disposition", "attachment;filename=this.pdf"); 
     Response.Cache.SetCacheability(HttpCacheability.NoCache); 
     StringWriter sw = new StringWriter(); 
     HtmlTextWriter hw = new HtmlTextWriter(sw); 
     HtmlForm frm = new HtmlForm(); 
     GridView1.AllowPaging = false; 
     GridView1.Parent.Controls.Add(frm); 
     frm.Controls.Add(GridView1); 
     frm.RenderControl(hw); 
     StringReader sr = new StringReader(sw.ToString()); 
     Document PDFdoc = new Document(PageSize.A4, 10.0F, 10.0F, 10.0F, 0.0F); 
     iTextSharp.text.html.simpleparser.HTMLWorker htmlparser = new iTextSharp.text.html.simpleparser.HTMLWorker(PDFdoc); 
     PdfWriter.GetInstance(PDFdoc, Response.OutputStream); 
     PDFdoc.Open(); 
     htmlparser.Parse(sr); 
     PDFdoc.Close(); 
     Response.Write(PDFdoc); 
     Response.End(); 
+0

이 코드를 이미 발견했습니다. 그러나 우리는 브라우저에있는 내용과 다른 내용의 페이지를 인쇄하려고합니다 (그리드와 트 리뷰가 확장되었습니다). 그래서 우리는 pdf 파일을 렌더링하고 싶지 않습니다. 이 용도로 다른 페이지 (복사 붙여 넣기)를 만들고 Excecute()와 같은 것을 호출 할 것입니다. – BonOeil