0

我想将页面打印为 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 格式呈现后,我想让页面正常加载。Response.End 停止加载,页面为空白。

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

4

1 回答 1

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();
于 2014-10-15T18:20:24.240 回答