2015-01-16 6 views
4

이 질문은 NReco's PdfGenerator 구성 요소와 관련이 있습니다.PdfGenerator를 사용하여 PDF에 페이지 번호 추가

이 제품을 사용하면 동적으로 생성 된 HTML 문자열을 .NET MVC 프레임 워크 내에서 C#을 사용하여 Pdf 문서로 변환 할 수 있습니다.

페이지 번호 (예 : 1 of 5)를 Pdf의 바닥 글에 추가하는 방법을 찾고있는 중에 thisthis이 나타났습니다. 그리고 두 가지 옵션 모두 동일한 목표를 달성하는 데 유사한 접근법을 제공하는 것 같습니다.

코드 자체가 의미가 있지만, 이해하기 힘든 부분은 내 문서 내용 (또는 HTML 문자열)이보기 내부에서 생성된다는 것입니다. HTML 문자열은 실제 변환 프로세스를 위해 컨트롤러 (.cs)로 전달됩니다. MVC 프레임 워크에 관한 매우 제한된 지식으로 인해 컨트롤러에 JavaScript 코드를 추가 할 수있는 방법이 없다고 생각합니다 (또는 거기에 있습니까?).

위의 두 JavaScript 기반 메서드가 문서 변환을 처리하는 C# 함수 내에 어떻게 통합 될 수 있는지 잘 모르겠습니다. 또는 View 내부에서 수행해야하는 작업입니까?

컨트롤러 : 당신은 당신이 PageHeaderHtml 또는 PageFooterHtml 속성을 설정하면 PdfGenerator 당신을 위해 그렇게 할 것이기 때문에 페이지 번호를 렌더링 (wkhtmltopdf 도움말)에서 자바 스크립트 코드를 추가 할 필요가 없습니다

[HttpPost] 
public ActionResult Html2Pdf(FormCollection form) { 

    var docTitle = form["doctitle"].ToString(); 

    var headerHtml = 
     "<div style='width:100%; margin-top:1em; display:block;'>" + 
      "<img src='" + System.Web.HttpContext.Current.Server.MapPath("~") + "/media/images/document_banner.png' />" + 
     "</div>" + 
     "<div style='width:100%; bottom:110px; left:0; position:relative; display:block;'>" + 
      "<span style='color:#fff; font-size:2.5em; font-family:georgia; margin-left:1em;'>" + docTitle + "</span>" + 
     "</div>"; 

    var footerHtml = 
     "<div style='width:100%; text-align:center; border-top:1px solid #abc; margin-top:2em;'>Page 0 of 0</div>; 

    var htmlToPdf = new HtmlToPdfConverter(); 

    // various parameters get set here 
    htmlToPdf.PageHeaderHtml = headerHtml; 
    htmlToPdf.PageFooterHtml = footerHtml; 
    .... 

    Response.ContentType = "application/pdf"; 
    Response.AddHeader("content-disposition", "attachment;filename=MyTestDocument.pdf"); 
    htmlToPdf.GeneratedPdf(form["htmlcontent"].ToString(), null, Response.OutputStream); // form["htmlcontent"] holds the document body 
    Response.End(); 

    Return new EmptyResult(); 
} 

답변

7

. 페이지 번호를 렌더링 할 "페이지"클래스 요소 만 있으면됩니다.

htmlToPdf.PageHeaderHtml = "<div>Page: <span class="page"></span></div>"; 

그게 전부입니다.

당신이 (topage 클래스)도 총 페이지를 표시 할 경우이 코드를 사용할 수 있습니다
3

:

var generator = new NReco.PdfGenerator.HtmlToPdfConverter(); 
generator.PageFooterHtml = [email protected]"page <span class=""page""></span> of <span class=""topage""></span>";