Разрыв страницы в Html2Pdf
-
22-09-2019 - |
Вопрос
Я сейчас создаю динамический файл PDF, который содержит данные примерно о 10 000 пользователей. Обычно приложение разработано с использованием MySQL и PHP.Динамический контент настолько тяжелый, что мне было трудно его обрабатывать с помощью fpdf()
сорт.Поэтому я преобразовал свою выходную PHP-страницу в HTML-файл, используя ob_get_clean()
.Теперь html-файл успешно сгенерирован, а также файл pdf.Но я хочу оставить разрыв страницы после данных каждого пользователя, то есть данные каждого пользователя должны начинаться на новой странице.Я не мог использовать какие-либо HTML-теги, поскольку в динамически создаваемом HTML-файле все отсутствует. <html>
и </html>
теги.Пожалуйста, помогите мне, как сделать разрыв страницы в PDF-файле после данных каждого пользователя...Заранее спасибо :)
Решение
Я понял это только после того, как столкнулся с той же проблемой.анализатор, который они используют, ДЕЙСТВИТЕЛЬНО поддерживает тег разрыва страницы, но html2pdf не работает.
Я думаю, что у меня это работает, внеся следующие изменения в html2pdf.class:
вокруг строки 4174, первое, что внутри:
protected function _tag_close_P($param){
должно быть:
if($this->parsingCss->value['page-break-after'] == "always")
$this->_setNewPage();
около строки 2961, первое, что внутри:
protected function _tag_close_DIV($param, $other='div'){
должно быть:
if($this->parsingCss->value['page-break-after'] == "always")
$this->_setNewPage();
Другие советы
html2pdf поддерживает страница ярлык:
protected function _tag_open_PAGE($param) {}
в строке 2229.Там вы можете увидеть, какие атрибуты поддерживаются.Например, следующее создает одну страницу в альбомной ориентации и одну в портретном режиме:
<page orientation="l">
... some content ...
</page>
<page orientation="p">
... some content ...
</page>
На основе работы Макдабби (которая не работает).Но благодаря ему идея верная.
HTML2Pdf v4.03
Например, мы хотим проанализировать тег DIV:
html2pdf.class.php строка 2948:
protected function _tag_close_DIV($param, $other='div')
{
if ($this->parsingCss->value['page-break-after'] == "always")
$this->_setNewPage(null, '', null, $this->_defaultTop);
$this->parsingCss->setPosition();
...
}
parsingCss.class.php Строка 114:
//add a new style declaration
public function initStyle()
{
...
$this->value['page-break-after'] = null;
}
Строка 1024 добавляет новый обработчик в случае переключателя:
case 'page-break-after':
$this->value[$nom] = $val;
break;
И тогда, чтобы это работало, ваш html-контент должен содержать элемент разрыва.
<div style="page-break-after:always; clear:both"></div>
Следите за стилем, чувствительным к регистру, не уверен, что плагин справится с этим.
Возможно, вы захотите использовать CSS, например:
h1 {page-break-before:always}