2012-03-12 2 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 루프를 사용하여 코드 그리고 내 생각에 내 문제를 해결할 것입니다.

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

이 방법의 단점은 추가적인 HTTP 요청을 전송한다는 것입니다 :

답변

3

하나의 가능성은 주어진 페이지에 HTTP 요청을 보내도록 웹 클라이언트를 사용하여 결과 HTML을 얻을 수 있습니다.

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와 executionTimeout을 지정하십시오.

관련 문제