如何从asp.net aspx页面获取当前页面源代码

时间:2012-03-12 13:38:44

标签: c# asp.net html

嗨,我正在尝试使用asp.net应用程序获取当前页面源代码。我发现了一段将html转换为pdf的代码,但为了将我的页面转换为pdf,我需要获取页面的html代码。我怎样才能将它们作为字符串?我的简单代码是这样的:

        string sPathToWritePdfTo = Server.MapPath("") + "/pdf_dosya_adi.pdf";

        System.Text.StringBuilder sbHtml = new System.Text.StringBuilder();
        sbHtml.Append("<html>");
        sbHtml.Append("<body>");
        sbHtml.Append("<font size='14'>HTML den PDF çevirme Test</font>");
        sbHtml.Append("<br />");
        sbHtml.Append("Body kısmında yazacak yazı");
        sbHtml.Append("</body>");
        sbHtml.Append("</html>");

        using (System.IO.Stream stream = new System.IO.FileStream

        (sPathToWritePdfTo, System.IO.FileMode.OpenOrCreate))
        {
            Pdfizer.HtmlToPdfConverter htmlToPdf = new Pdfizer.HtmlToPdfConverter();
            htmlToPdf.Open(stream);
            htmlToPdf.Run(sbHtml.ToString());
            htmlToPdf.Close();
        }
        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "friendlypdfname.pdf"));
        HttpContext.Current.Response.ContentType = "application/pdf";

        HttpContext.Current.Response.WriteFile(sPathToWritePdfTo);
        HttpContext.Current.Response.End();

如果我可以从我的asp.net页面上获取html代码,我将页面的所有行放入  sbHtml.Append( “”); 使用for循环代码,这将解决我的问题。

2 个答案:

答案 0 :(得分:5)

一种可能性是使用WebClient将HTTP请求发送到给定页面并获取生成的HTML:

using (var client = new WebClient())
{
    string html = client.DownloadString("http://example.com/somepage.aspx");
}

这种方法的缺点是它发送了一个额外的HTTP请求。

另一种可能性是将WebForm直接呈现为字符串:

using (var writer = new StringWriter())
{
    Server.Execute("SomePage.aspx", writer);
    string html = writer.GetStringBuilder().ToString();
}

答案 1 :(得分:1)

您可以创建隐藏字段,将当前html添加到其中,并且asyc回发能够从事件中检索它。假设您正在渲染页面,可能是编辑或更改数据,然后单击按钮下载pdf。

//隐藏输入字段

<input type="hidden" runat="server" id="hdn_container" /> 

//带有客户端事件和服务器端事件的按钮。应该包装在UpdatePanel中。

<asp:Button ID="btnDownload" runat="server" OnClientClick="refreshHtml();" OnClick="btnDownloadButton_Click" Text="Download Pdf"></asp:Button>

//页面底部的脚本标记

<script language="javascript" type="text/javascript">
        function refreshHtml() {
           document.getElementById('<%= hdn_container.ClientID %>').value = document.head.innerHTML + document.body.innerHTML;
        }
</script>

//然后在c#中,您可以从隐藏字段中获取页面html。

hdn_container.Value

确保为脚本管理器设置适当的AsyncPostBackTimeout。在你的webconfig中,有一个合适的maxRequestLength和executionTimeout。