在尝试导出文件时,页面只能有一个服务器端表单标记

时间:2014-02-18 15:53:51

标签: c# asp.net forms

我正在尝试将HTML页面导出到pdf

这是我收到的错误消息:

  

页面只能有一个服务器端表单标记。

这是方法:

public void pdf_btn_clicked(object sender, EventArgs e)
    {
        Response.ContentType = "application/pdf";
        Response.AddHeader("content-disposition", "attachment;filename=TestPage.pdf");
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        StringWriter sw = new StringWriter();
        HtmlTextWriter hw = new HtmlTextWriter(sw);
        this.Page.RenderControl(hw);
        StringReader sr = new StringReader(sw.ToString());
        Document pdfDoc = new Document(PageSize.A4, 10f, 10f, 100f, 0f);
        HTMLWorker htmlparser = new HTMLWorker(pdfDoc);
        PdfWriter.GetInstance(pdfDoc, Response.OutputStream);
        pdfDoc.Open();
        htmlparser.Parse(sr);
        pdfDoc.Close();
        Response.Write(pdfDoc);
    }

正如您所看到的那样,单击按钮时会触发

这是HTML:

   <form id="export_form" runat="server">
        <div id="buttons_conteiner">
            <asp:Button runat="server" id='export_pdf' OnClick='pdf_btn_clicked' Text="Pdf" />
        </div>
    </form>

页面上没有其他表格,也没有涉及母版页......

任何想法??

2 个答案:

答案 0 :(得分:1)

您需要调用Response.End()以阻止ASP.Net呈现您网页的其余部分。

答案 1 :(得分:1)

您正在渲染整个页面,然后将PDF写入输出。当然,这将使用runat =“server”添加另一种形式。

解决方案是不渲染整个页面,在表单中渲染子控件。

另外,仔细检查您如何将PDF发送到客户端。请参阅iTextSharp Generate PDF in ASP.NET

另外,我建议不要为其HTML呈现控件,然后将结果发送到PDF。如果您需要更新页面的标记,可能会弄乱PDF的结果,反之亦然。通常最好自定义为PDF编写一些HTML(或使用传统的使用iTextSharp生成PDF的方式)。