2012-03-12 2 views
1

Привет, Я пытаюсь получить текущий источник страницы с помощью приложения asp.net. Я нашел фрагмент кода, который преобразует html в pdf, но для того, чтобы преобразовать мою страницу в PDF, мне нужно получить html-код страницы. Как я могу получить их как строку? Мой простой код, как это:Как получить текущий источник страницы из asp.net aspx page

 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(); 

Если я могу получить HTML код с моей страницы asp.net Я положил всю линию моей страницы в sbHtml.Append («»); с помощью цикла for, и это решит мою проблему на мой взгляд.

ответ

3

Одна возможность состоит в том, чтобы использовать WebClient для отправки запроса HTTP на данной странице и получить результирующий HTML:

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

Недостатком этого подхода является то, что он посылает дополнительный запрос HTTP.

Другая возможность заключается в том, чтобы сделать веб-форму непосредственно в строку:

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

это может работать для моей текущей страницы? который работает localhost – EmreAltun

+0

@EmreAltun, если вы хотите использовать WebClient, вам нужно указать полный адрес на веб-странице. –

+0

Я использую этот код, но он всегда вызывает мою текущую страницу снова и вызывает цикл. – EmreAltun

0

Вы можете создать скрытое поле, добавить текущую 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 и executeTimeout.

Смежные вопросы