This question pertains to NReco's PdfGenerator component.
I use this product to convert dynamically generated HTML string to a Pdf document within the .NET MVC framework using C#.
While looking for ways to add page numbers (e.g., 1 of 5) to the footer of the Pdf, I came across this and this on SO. And not surprisingly, both options seem to offer a similar approach to accomplishing the same goal.
While the code itself makes sense, what I'm having a hard time understanding is this - My document content (or the HTML string) is generated inside a View. The HTML string is then passed to a Controller (.cs) for the actual conversion process. With my very limited knowledge on MVC framework, I think there's no way you can add JavaScript code to the Controller (or is there?).
So, I don't quite understand how the above two JavaScript based methods can be incorporated inside my C# function that handles the document conversion. Or is this something that should be done inside the View?
Controller:
[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();
}