Распечатать страницу asp.net в формате PDF
Я хотел бы распечатать страницу в формате PDF. Но дело в том, что перед печатью я хочу развернуть все элементы управления (GridView, Treeview...).
Я нашел некоторые решения, использующие Page.RenderControl (или Control.RenderControl), но у меня возникла ошибка: "Страница может иметь только один тег формы на стороне сервера". Я понимаю ошибку (необходимо добавить только одну форму). но я бы подумал, что RenderControl будет писать в новом Writer (а не в текущем).
Dim stringWriter As New StringWriter()
Dim htmlWriter As New HtmlTextWriter(stringWriter)
Me.Page.RenderControl(htmlWriter)
Чтобы расширить элементы управления, я должен изменить свойства и затем отобразить страницу. После рендеринга в PDF я бы хотел, чтобы страница загружалась как обычно. Ответ. Завершите загрузку, и страница станет пустой.
Есть ли (хорошая) альтернатива для взятия содержимого страницы, изменения содержимого (например: grid.AllowPaging = False) и отправки его в поток?
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();