В настоящее время мы используем wkhtmltopdf для создания PDF-файла на основе заданного HTML-шаблона.
Некоторая справочная информация:
Мы используем Sulu CMF для создания нашей серверной части, основанной на Symfony2.
KnpSnappy Bundle используется в качестве оболочки Symfony для wkhtmltopdf.
Как мы создаем PDF-файлы:
Поскольку многие PDF-файлы имеют один и тот же верхний и нижний колонтитул, мы создали BasePDFBundle, который предлагает PDFManager для создания PDF-файла на лету по заданному шаблону TWIG. По умолчанию включается общий верхний и нижний колонтитулы (обычно с именем и логотипом клиента).
Проблема нижнего колонтитула / номера страниц в нижнем колонтитуле (или заголовке):
Очень полезно добавлять номера страниц в PDF-файлы, например. для заказов, однако большая часть нашего контента добавляется динамически (например, список продуктов). Поскольку стиль PDF-файла может меняться, а сам контент добавляется динамически, должен был быть быстрый и простой способ добавить текущую и всю страницу в сгенерированный PDF-файл. Вот что мы сделали:
Код: Выделить всё
FooBar Company Name[/b]
/
(function() {
// get all url parameters and transform it to a list
// pdf generator adds a param for current and the total page sum
// add the value to the html elements
var urlParams = document.location.search.substring(1).split('&');
var urlParamsList = {};
var pagingElements = ['topage', 'page'];
for (var i in urlParams) {
var param = urlParams[i].split('=', 2);
urlParamsList[param[0]] = unescape(param[1]);
}
for (var i in pagingElements) {
var elem = document.getElementsByClassName(pagingElements[i]);
for (var j = 0; j < elem.length; ++j) {
elem[j].textContent = urlParamsList[pagingElements[i]];
}
}
})();
Да, имена переменных page и toppage могли бы быть лучше, однако они такие же, как и оболочка KnpSnappy, которую использует при объединении шаблонов веток с окончательным шаблоном PDF. Это самый простой способ получить текущий и общий номер страницы, поскольку вы можете позволить оболочке выполнить все вычисления.
В конце концов вам просто нужно заменить текст html-тегов и все!
Различия между вашим локальным компьютером и сервером:
Поскольку wkhtmltopdf открывает виртуальный браузер для «рендеринга» шаблонов веток, это может привести к ошибкам при создании PDF-файла на вашем сервере. Мы обнаружили, что использовать теги событий, такие как , не рекомендуется. Вместо этого вам следует активировать код JavaScript, как мы это сделали в примере выше.
Подробнее здесь: https://stackoverflow.com/questions/309 ... khtmltopdf
Мобильная версия