#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
команде, чтобы она повторялась на каждой странице.
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. Спасибо за указание «должно быть размещено в шаблоне верхнего или нижнего колонтитулов»! Мне этого не хватало несколько дней.