如何为使用 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 生成页脚的主要内容,如果未能解决你的问题,请参考以下文章
Rotativa 生成的 PDF 无法正确呈现 - 分页符/元素中断