2015-01-16 4 views
4

Этот вопрос относится к компоненту NReco's PdfGenerator.Добавление номеров страниц в PDF-файлы с использованием PdfGenerator

Я использую этот продукт для преобразования динамически сгенерированной строки HTML в документ Pdf в рамках .NET MVC с использованием C#.

При поиске способов добавления номеров страниц (например, 1 из 5) в нижний колонтитул Pdf я наткнулся на this и this на SO. И неудивительно, что оба варианта, похоже, предлагают аналогичный подход для достижения той же цели.

Хотя сам код имеет смысл, то, что я с трудом понимаю, - это - содержимое моего документа (или строка HTML) создается внутри представления. Строка HTML затем передается контроллеру (.cs) для фактического процесса преобразования. Имея очень ограниченные знания в области MVC, я думаю, что вы не можете добавить код JavaScript в контроллер (или есть?).

Итак, я не совсем понимаю, как эти два метода JavaScript могут быть включены в мою функцию C#, которая обрабатывает преобразование документа. Или это то, что должно быть сделано внутри представления?

Контроллер:

[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

Вам не нужно добавлять яваскрипт кода (от wkhtmltopdf помощи) для оказания номера страницы, потому что PdfGenerator будет делать это для вас, если вы установите PageHeaderHtml или PageFooterHtml свойство. Все, что вам нужно, это просто отметить элемент класса «страница», в котором вы хотите отобразить номер страницы:

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

вот и все.

3

Вы можете использовать этот код, если вы хотите отобразить также общую страницу номер (topage класс):

var generator = new NReco.PdfGenerator.HtmlToPdfConverter(); 
generator.PageFooterHtml = [email protected]"page <span class=""page""></span> of <span class=""topage""></span>"; 
Смежные вопросы