Как создать нижний колонтитул для PDF с динамическим содержимым, созданным с помощью Rotativa

Я создаю PDF-файл, и мой работодатель попросил меня добавить нижний колонтитул на каждую страницу в PDF-файле. PDF-файл создается с помощью Rotativa, при этом HTML-страница превращается в PDF-файл.

Моя единственная проблема в том, как я собираюсь это сделать. Я думал над некоторыми идеями, простой код css, хотя вариантов более чем достаточно, ни один из них мне особо не подошел. Особенно потому, что у меня может быть 1 страница или 10, в зависимости от количества информации, которая должна быть на ней размещена.

Поэтому нижний колонтитул должен соответствовать количеству создаваемых страниц.

У кого-нибудь есть идеи для меня? Я хочу, чтобы это работало очень плохо, но я просто понятия не имею, как это сделать.

Привет Лоренцо Отто


person LorenzoOtto    schedule 09.10.2020    source источник
comment
Это ответ на ваш вопрос?   -  person Llama    schedule 09.10.2020
comment
@John Джон почти уверен, что он устарел, больше не работает.   -  person LorenzoOtto    schedule 09.10.2020
comment
Отмеченный. Мой Google-Fu не был достаточно силен в этом случае. :-(   -  person Llama    schedule 09.10.2020


Ответы (1)


Если я правильно понял ваш вопрос, вы можете просто использовать HTML-страницу в качестве нижнего колонтитула, чтобы отобразить нижний колонтитул страницы, используя некоторый javascript для отображения текущей страницы и общего количества страниц. На самом деле я использую этот подход для нескольких веб-приложений, использующих Rotativa, которые генерируют PDF-файлы на основе представлений MVC с динамическим содержимым.

Предположим, мы создали файл Footer.html (используйте имя, которое вы предпочитаете здесь), это может быть файл HTML для нижнего колонтитула PDF, включая код 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 для создания PDF-файла на основе представления с именем MyPdfView.cshtml, вы можете использовать ViewAsPdf, передав ему свои пользовательские переключатели следующим образом:

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

И это все. Пожалуйста, дайте мне знать, если это сработало для вас.

person Dave Miller    schedule 19.10.2020
comment
Большое спасибо, похоже, это тот же самый ответ, который я нашел пару дней назад. - person LorenzoOtto; 26.10.2020