以PDF格式打印asp.net页面

时间:2014-10-15 18:05:45

标签: asp.net itextsharp rendercontrol

我想以PDF格式打印一页。但问题是在打印之前,我想扩展所有控件(GridView,Treeview ......)。

我使用Page.RenderControl(或Control.RenderControl)找到了一些解决方案,但我有一些错误说"一个页面只能有一个服务器端的Form标签。"。我理解错误(只需要添加一个表单)。但我原本以为RenderControl会写入新的Writer(而不是当前的)。

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

要扩展控件,我必须更改属性然后渲染页面。一旦在PDF中呈现,我想让页面正常加载。 Response.End停止加载,页面为空白。

是否有(好的)替代方法来获取页面内容,更改内容(例如:grid.AllowPaging = False)并将其发送给流?

1 个答案:

答案 0 :(得分: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();