how TCPDF prevent the extra blank page

孤者浪人 提交于 2019-11-26 21:55:35

问题


I have create class to make page by using TCPDF.

I need to convert HTML to pdf, so I using writeHTML and AcceptPageBreak().

The $html is Dynamically changed, could be very long.

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;
    }
}

The problem is I genenrate PDF, but alway has a extra blank page in the end of the PDF.

I tried use $this->delete($this->getPage()) ,but it only remove last page which has content and the extra blank page remain. this seems writeHTML will create a page break after it.

how to prevent this extra blank page?


回答1:


I had the same Problem: I fixed it with:

class TCPDFextended extends \TCPDF {

    public function Output($name = 'doc.pdf', $dest = 'I')
    {
        $this->tcpdflink = false;
        return parent::Output($name, $dest);
    }

}



回答2:


My answer is similar to @kanti. I think we can set the default to false even before the Output generation.

Background. The extra page we see is basically

"If true print TCPDF meta link".

so by default the TCPDF::$tcpdflink = true , is set true. All we need is

 class My_PDF extends TCPDF {
     public function changeTheDefault($tcpdflink) {
            $this->tcpdflink = $tcpdflink;
          }
}

call your public function later when you need it. ...

$get_pdf = new My_PDF (your_parameters);
$get_pdf->changeTheDefault(false); # changes the default to false

Good Luck.




回答3:


You should check your $html variable.

1) If it could contains any <html />, <head />, <title />, <body /> tag then please remove them and just take html contents after and before <body />.

2) You should avoid any css, js link file within $html content.

3) Finally you should use $html=utf8_encode($html); just before $this->writeHTML($html, true, false, true, false, '');.

4) You may need to adjust your MARGIN_LEFT, MARGIN_TOP, MARGIN_RIGHT and MARGIN_BOTTOM to solve such problems. Please check $this->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); and $this->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);.

Hopefully it can solve your problem.




回答4:


Try this deletePage function

$lastPage = $this->getPage();
$this->deletePage($lastPage);

Instead Delete use deletePage




回答5:


Check also the height of your enclosing div. It should not be 100%. Try to remove any height property from the CSS style of the enclosing div ( I mean the div which encloses all the content).




回答6:


The problem is the 4th parameter (unicode = true) in your create_pdf.php file. This parameter is passed into tcpdf.php on line 1838

$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'ISO-8859-1', false);

change it to false.



来源:https://stackoverflow.com/questions/22600329/how-tcpdf-prevent-the-extra-blank-page

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!