【问题标题】:Adding page numbers to PDFs using PdfGenerator使用 PdfGenerator 向 PDF 添加页码
【发布时间】:2015-03-15 08:16:50
【问题描述】:

此问题与NReco's PdfGenerator 组件有关。

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

在寻找将页码(例如,5 个中的 1 个)添加到 Pdf 的页脚的方法时,我在 SO 上遇到了 thisthis。毫不奇怪,这两种选择似乎都提供了类似的方法来实现相同的目标。

虽然代码本身很有意义,但我很难理解的是——我的文档内容(或 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();
}

【问题讨论】:

    标签: javascript c# pdf-generation page-numbering


    【解决方案1】:

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

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

    就是这样。

    【讨论】:

      【解决方案2】:

      如果您还想显示总页数(首页类),您可以使用此代码:

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

      【讨论】:

      • 非常感谢..它节省了我几个小时。
      【解决方案3】:

      就在代码下面,就是这样

      var htmlToPdf = new NReco.PdfGenerator.HtmlToPdfConverter();
      htmlToPdf.PageFooterHtml = "<div style='padding:5px !important; font-size:12px;text-align:right;'>page <span class='page'></span> of <span class='topage'></span></div>";
      

      【讨论】:

        猜你喜欢
        • 2018-04-10
        • 2017-04-07
        • 1970-01-01
        • 1970-01-01
        • 2014-02-17
        • 2016-04-25
        • 1970-01-01
        • 2014-05-09
        • 2018-05-27
        相关资源
        最近更新 更多