我正在尝试将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>
页面上没有其他表格,也没有涉及母版页......
任何想法??
答案 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的方式)。