как TCPDF предотвращает дополнительную пустую страницу

У меня есть класс для создания страницы с помощью 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 создаст разрыв страницы после него.

как предотвратить эту дополнительную пустую страницу?

Related of "как TCPDF предотвращает дополнительную пустую страницу"

У меня была та же проблема: я исправил ее с помощью:

 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.