2012-03-12 14 views
1

こんにちは、私はasp.netアプリケーションを使用して現在のページソースを取得しようとしています。私はhtmlをpdfに変換するコードを見つけましたが、私のページをpdfに変換するには、そのページのhtmlコードを取得する必要があります。これらを文字列としてどのように取得できますか?私の簡単なコードは次のようである:私は私のasp.netページオフHTMLコードを取得することができる場合、私は sbHtml.Append(「」)に私のページのすべての行を入れ 現在のページソースをasp.net aspxページから取得する方法

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

。 forループを使用してコードを とこれは私の意見で私の問題を解決します。

答えて

3

一つの可能​​性は、特定のページへのHTTPリクエストを送信し、結果のHTMLを取得するためにWebクライアントを使用することです:

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

これはmycurrentのページに有効ですか? WebClientを使用したい場合は、ウェブアドレスに完全なアドレスを指定する必要がある場合は、ローカルホスト – EmreAltun

+0

@EmreAltunを使用しています。 –

+0

私はこのコードを使用しますが、いつも私の現在のページをもう一度呼び出すと、ループが発生します。 – EmreAltun

0

あなたは、隠しフィールドを作成し、それに現在のHTMLを追加し、asycポストバックで内からそれを取得することができることができます。

もう一つの可能​​性は、文字列に直接Webフォームをレンダリングすることですイベント。ページをレンダリングしていると仮定して、編集やデータの変更を行い、ボタンをクリックして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があります。

関連する問題