2014-10-15 2 views
0

Я хотел бы напечатать страницу как PDF. Но дело в том, что перед печатью я хочу расширить все элементы управления (GridView, Treeview ...).Печать страницы asp.net как PDF

Я нашел somes решения, используя Page.RenderControl (или Control.RenderControl), но у меня есть некоторая ошибка: «Страница может иметь только один тег формы на стороне сервера». Я понимаю ошибку (нужно добавить только одну форму). но я бы подумал, что RenderControl будет писать в новом Writer (а не в текущем).

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

Чтобы расширить элементы управления, мне нужно изменить свойства, а затем отобразить страницу. После рендеринга в PDF, я хотел бы, чтобы страница загружалась как обычно. Response.End прекратить загрузку, и страница пуста.

Есть ли (хорошая) альтернатива для получения содержимого страницы, изменения содержимого (например: grid.AllowPaging = False) и отправить его в поток?

+0

Не могли бы вы выскочит окно и генерировать PDF там? – Tim

ответ

1

Попробуйте с HTMLForm вместо Me.Page.RenderControl

 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

 Смежные вопросы

  • Нет связанных вопросов^_^