如何使用使用 Rotativa 生成的动态内容为 PDF 生成页脚

How to generate page footer for a PDF with dynamic content generated using Rotativa

我正在生成 pdf,我的雇主要求我在 pdf 的每一页上添加一个页脚。 pdf 是用 Rotativa 生成的,html 页面会变成 pdf。

我唯一的问题是,我该怎么做。我考虑了一些想法,简单的 css 代码,尽管有足够多的选择,但其中 none 确实对我有用。特别是因为我可以有 1 页,也可以有 10 页,这取决于必须放在上面的信息量。

因此页脚必须响应将要生成的页面数量。

有人对我有什么想法吗?我真的很想解决这个问题,但我不知道该怎么做。

问候 洛伦佐·奥托

如果我没有误解你的问题,你可以简单地使用一个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)位于名为 的文件夹中Shared,在 Views 文件夹中,您可以在调用 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
};

仅此而已。如果这对您有用,请告诉我。