使用PdfGenerator将页码添加到PDF

Bin*_*Cat 7 javascript c# pdf-generation page-numbering

这个问题与NReco的PdfGenerator组件有关.

我使用此产品使用C#将动态生成的HTML字符串转换为.NET MVC框架内的Pdf文档.

虽然寻找各种方法来添加页码(例如,5 1)到PDF的页脚,我碰上了对SO.毫不奇怪,两种选择似乎都提供了类似的方法来实现相同的目标.

虽然代码本身有意义,但我很难理解的是 - 我的文档内容(或HTML字符串)是在View中生成的.然后将HTML字符串传递给Controller(.cs)以进行实际的转换过程.由于我对MVC框架的知识非常有限,我认为你无法向Controller添加JavaScript代码(或者在那里?).

所以,我不太明白上面两个基于JavaScript的方法如何被整合到处理文档转换的C#函数中.或者这是应该在View中完成的吗?

控制器:

[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();
}
Run Code Online (Sandbox Code Playgroud)

Vit*_*nko 11

您不需要附加javascript代码(来自wkhtmltopdf帮助)来呈现页码,因为如果您设置PageHeaderHtml或PageFooterHtml属性,PdfGenerator将为您执行此操作.您只需要在"page"类元素中标记要呈现的页码:

htmlToPdf.PageHeaderHtml = "<div>Page: <span class="page"></span></div>";
Run Code Online (Sandbox Code Playgroud)

就这样.


Ada*_*avo 9

如果要显示总页数(topage类),也可以使用此代码:

 var generator = new NReco.PdfGenerator.HtmlToPdfConverter();
 generator.PageFooterHtml = $@"page <span class=""page""></span> of <span class=""topage""></span>";
Run Code Online (Sandbox Code Playgroud)