Нумерация страниц в PDF-файле, созданном wkhtmltopdf в php

#html #pdf #wkhtmltopdf #page-numbering

#HTML #PDF #wkhtmltopdf #нумерация страниц

Вопрос:

Мне нужно создать PDF-файл из php, используя wkhtmltopdf с номерами страниц Я использую таблицу внутри php-файла, попробовал некоторые коды в javascript, которые отображаются только на последней странице, если задано в нижнем колонтитуле, или на первой странице, если задано в заголовке, не получая номер страницы, как я могу это использовать

мой пример кода :

 function substitutePdfVariables() {

            function getParameterByName(name) {
                var match = RegExp('[?amp;]'   name   '=([^amp;]*)').exec(window.location.search);
                return match amp;amp; decodeURIComponent(match[1].replace(/ /g, ' '));
            }

            function substitute(name) {
                var value = getParameterByName(name);
                var elements = document.getElementsByClassName(name);

                for (var i = 0; elements amp;amp; i < elements.length; i  ) {
                    elements[i].textContent = value;
                }
            }

            ['frompage', 'topage', 'page', 'webpage', 'section', 'subsection', 'subsubsection']
                .forEach(function(param) {
                    substitute(param);
                });
        }  
 <table border="1"><thead><tr><th>Head 1</th><th>Head 2</th><th>Head 3</th><th>Head 4</th><th>Head 5</th></tr></thead><tbody>
<tr><td>Data 1</td><td>Data 2</td><td>Data 3</td><td>Data 4</td><td>Data 5</td></tr>
<tr><td>Data 1</td><td>Data 2</td><td>Data 3</td><td>Data 4</td><td>Data 5</td></tr>
<tr><td>Data 1</td><td>Data 2</td><td>Data 3</td><td>Data 4</td><td>Data 5</td></tr>
<tr><td>Data 1</td><td>Data 2</td><td>Data 3</td><td>Data 4</td><td>Data 5</td></tr>
<tr><td>Data 1</td><td>Data 2</td><td>Data 3</td><td>Data 4</td><td>Data 5</td></tr>
<tr><td>Data 1</td><td>Data 2</td><td>Data 3</td><td>Data 4</td><td>Data 5</td></tr></tbody></table>
<body onload="substitutePdfVariables()">
    <p>Page <span class="page"></span> of <span class="topage"></span></p>
</body>  

Ответ №1:

Чтобы нумерация страниц JavaScript работала, ее следует поместить в шаблон верхнего или нижнего колонтитула, предоставленный wkhtmltopdf команде, чтобы она повторялась на каждой странице.

Из документации wkhtmltopdf:

 Headers and footers can also be supplied with HTML documents. As an example
one could specify `--header-html header.html`, and use the following content in
header.html:

<!DOCTYPE html>
<html><head><script>
function subst() {
    var vars = {};
    var query_strings_from_url = document.location.search.substring(1).split('amp;');
    for (var query_string in query_strings_from_url) {
        if (query_strings_from_url.hasOwnProperty(query_string)) {
            var temp_var = query_strings_from_url[query_string].split('=', 2);
            vars[temp_var[0]] = decodeURI(temp_var[1]);
        }
    }
    var css_selector_classes = ['page', 'frompage', 'topage', 'webpage', 'section', 'subsection', 'date', 'isodate', 'time', 'title', 'doctitle', 'sitepage', 'sitepages'];
    for (var css_class in css_selector_classes) {
        if (css_selector_classes.hasOwnProperty(css_class)) {
            var element = document.getElementsByClassName(css_selector_classes[css_class]);
            for (var j = 0; j < element.length;   j) {
                element[j].textContent = vars[css_selector_classes[css_class]];
            }
        }
    }
}
</script></head><body style="border:0; margin: 0;" onload="subst()">
<table style="border-bottom: 1px solid black; width: 100%">
    <tr>
    <td class="section"></td>
    <td style="text-align:right">
        Page <span class="page"></span> of <span class="topage"></span>
    </td>
    </tr>
</table>
</body></html>


As can be seen from the example, the arguments are sent to the header/footer
html documents in get fashion.
  

Комментарии:

1. Спасибо за указание «должно быть размещено в шаблоне верхнего или нижнего колонтитулов»! Мне этого не хватало несколько дней.