У меня есть класс для создания страницы с помощью TCPDF.
Мне нужно преобразовать HTML в PDF, поэтому я использую writeHTML
и AcceptPageBreak()
.
$html
динамически изменен, может быть очень длинным.
class MY_TCPDF extends TCPDF{ public function makePage($html){ $head_image="header.jpg"; $this->SetMargins(PDF_MARGIN_LEFT, 70, PDF_MARGIN_RIGHT); $this->setPrintHeader(false); $this->AddPage(); // get the current page break margin $bMargin = $this->getBreakMargin(); // get current auto-page-break mode $auto_page_break = $this->getAutoPageBreak(); // disable auto-page-break $this->SetAutoPageBreak(false, 0); // set bacground image $img_file = $head_image; $this->Image($img_file, 0, 0, 210, 68, '', '', '', false, 300, '', false, false, 0); // restore auto-page-break status //$this->SetAutoPageBreak($auto_page_break, PDF_MARGIN_BOTTOM); // set the starting point for the page content $this->setPageMark(); $this->writeHTML($html, true, false, true, false, ''); $this->lastPage(); ob_start(); //Close and output PDF document $this->Output('my.pdf', 'I'); ob_end_flush(); } public function AcceptPageBreak() { $this->SetMargins(PDF_MARGIN_LEFT, 10, PDF_MARGIN_RIGHT); $this->AddPage(); return false; } }
Проблема в том, что я genenrate PDF, но всегда имеет дополнительную пустую страницу в конце PDF.
Я попытался использовать $this->delete($this->getPage())
, но он удаляет только последнюю страницу с содержимым и лишнюю пустую страницу. похоже, writeHTML
создаст разрыв страницы после него.
как предотвратить эту дополнительную пустую страницу?
У меня была та же проблема: я исправил ее с помощью:
class TCPDFextended extends \TCPDF { public function Output($name = 'doc.pdf', $dest = 'I') { $this->tcpdflink = false; return parent::Output($name, $dest); } }
Вы должны проверить переменную $html
.
1) Если он может содержать любые теги <html />, <head />, <title />, <body />
то удалите их и просто возьмите содержимое html после и до <body />
.
2) Вы должны избегать любого файла css, js link в содержимом $html
.
3) Наконец, вы должны использовать $html=utf8_encode($html);
непосредственно перед $this->writeHTML($html, true, false, true, false, '');
,
4) Для решения таких проблем вам может потребоваться настроить MARGIN_LEFT, MARGIN_TOP, MARGIN_RIGHT и MARGIN_BOTTOM. Проверьте $this->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
и $this->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
,
Надеюсь, он сможет решить вашу проблему.
Попробуйте эту функцию deletePage
$lastPage = $this->getPage(); $this->deletePage($lastPage);
Вместо этого Delete use deletePage
Мой ответ похож на @kanti. Я думаю, мы можем установить значение по умолчанию false даже до генерации вывода.
Задний план. Дополнительная страница, которую мы видим, в основном
Msgstr "Если true print TCPDF meta link".
поэтому по умолчанию TCPDF :: $ tcpdflink = true устанавливается true. Все, что нам нужно это
class My_PDF extends TCPDF { public function changeTheDefault($tcpdflink) { $this->tcpdflink = $tcpdflink; } }
вызовите свою публичную функцию позже, когда вам это нужно. …
$get_pdf = new My_PDF (your_parameters); $get_pdf->changeTheDefault(false); # changes the default to false
Удачи.
Проверьте также высоту вашего закрывающего div. Это не должно быть 100%. Попробуйте удалить любое свойство высоты из стиля CSS охватывающего div (я имею в виду div, который охватывает весь контент).
Проблема заключается в 4-ом параметре (unicode = true) в файле create_pdf.php. Этот параметр передается в tcpdf.php в строке 1838
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'ISO-8859-1', false);
измените его на false.