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

Posted

技术标签:

【中文标题】如何为使用 Rotativa 生成动态内容的 PDF 生成页脚【英文标题】:How to generate page footer for a PDF with dynamic content generated using Rotativa 【发布时间】:2021-01-24 08:11:54 【问题描述】:

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

我唯一的问题是,我该怎么做。我想到了一些想法,简单的 css 代码,虽然有更多的选择,但没有一个真正适合我。特别是因为我可以有 1 页,或者我可以有 10 页,这取决于必须放在上面的信息量。

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

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

问候 洛伦佐·奥托

【问题讨论】:

Does this answer your question? @John 很确定它已经过时了,不再起作用了。 注明。在这种情况下,我的 Google-Fu 不够强大。 :-( 【参考方案1】:

如果我没有误解您的问题,您可以简单地使用 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
;

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

【讨论】:

非常感谢,它看起来与我几天前找到的完全相同。

以上是关于如何为使用 Rotativa 生成动态内容的 PDF 生成页脚的主要内容,如果未能解决你的问题,请参考以下文章

如何为 JSF 自定义组件动态生成 CSS

Rotativa 生成的 PDF 无法正确呈现 - 分页符/元素中断

如何为动态生成的输入文件添加“多个”属性?

如何为所有动态生成的 div 添加常用的 Javascript 函数? [复制]

如何为动态生成 Select 语句的 30 列表创建索引

如何为动态字段Angular 4创建表单生成器?