如何为具有Rotativa

问题描述

我正在生成一个pdf文件,我的老板要求我在pdf文件的每个页面添加页脚。 pdf是通过Rotativa生成的,并且html页面变成了pdf。

我唯一的问题是,我该怎么做。我想到了一些想法,即简单的CSS代码,尽管有足够多的选择,但没有一个对我真正有用。尤其是因为我可以拥有一页,或者我可以拥有十页,取决于要放置在其上的信息量。

因此,页脚必须对将要生成页面数量有所响应。

有人对我有什么想法吗?我想解决这个问题确实很糟糕,但是我不知道该怎么做。

问候 洛伦佐·奥托(Lorenzo otto)

解决方法

如果我没有误解您的问题,则可以简单地将HTML页面用作页脚,以显示页面页脚,其中包含一些JavaScript以显示当前页面和总页面数。我实际上是在使用Rotativa的多个Web应用程序中使用这种方法,这些应用程序基于具有动态内容的MVC视图生成PDF文件。

假设我们创建了一个 Footer.html (在此处使用您喜欢的名称),则该文件可能是PDF页脚的HTML文件,包括用于生成页码信息的javascript代码:

<!DOCTYPE html>

<html>
<head>
    <script>
        function subst() {
            var vars = {};
            var x = window.location.search.substring(1).split('&');
            for (var i in x) { var z = x[i].split('=',2); vars[z[0]] = unescape(z[1]); }
            var x = ['frompage','topage','page','webpage','section','subsection','subsubsection'];
            for (var i in x) {
                var y = document.getElementsByClassName(x[i]);
                for (var j = 0; j < y.length; ++j) y[j].textContent = vars[x[i]];
            }
        }
    </script>
</head>

<body onload="subst()">
    <div style="font-family: Helvetica; font-size:0.75rem; text-align: right; width:100%;">
        <span class="page"></span> / <span class="topage"></span>
    </div>
</body>

</html>

*当然,您可以根据需要更改页脚div样式。

另一方面,猜测页脚HTML页面(以前称为 Footer.html )位于 Views 中的名为 Shared 的文件夹中em>文件夹,您可以在调用Rotativa之前准备所需的自定义开关:

string customSwitches = "--footer-html " + Server.MapPath("~/Views/Shared/Footer.html");

因此,如果您使用MVC操作基于名为MyPdfView.cshtml的视图生成PDF,则可以使用ViewAsPdf,并通过以下方式将其传递给您的自定义开关:

return new ViewAsPdf("MyPdfView")
{
    FileName = "MyPdfView.pdf",CustomSwitches = customSwitches
};

仅此而已。请让我知道这是否对您有用。