使用tcpdf AcceptPageBreak()更改第二页的上边距

时间:2011-10-14 08:34:13

标签: php fpdf tcpdf

我正在使用TCPDF生成PDF。 PDF通过fpdi-class使用PDF模板。一些生成的PDF是一个分页。但有时我会有第二页。我使用$ pdf-> MultiCell来输出我的内容。分页符可以通过$ pdf-> SetAutoPageBreak(true)。

正常工作

现在我的问题:我需要在第二页上有不同的上边距。我到目前为止尝试的是使用AcceptPageBreak() - 函数 - 不幸的是没有成功。

使用以下代码剪切我设法更改第二页上的边距。但它在PDF的末尾添加了一个空页面。

public function AcceptPageBreak() {

    $this->SetMargins(24, 65, 24, true);
    $this->AddPage();        
    return false;

}

我尝试使用$ pdf-> deletePage删除最后一页,但它不起作用。 我试图在函数中插入一些条件:

public function AcceptPageBreak() {
    if (1 == $this->PageNo()) {
        $this->SetMargins(24, 65, 24, true);
        $this->AddPage();        
        return false;
    } else {
        return false;
    }

}

这适用于包含2页文本的PDF。但现在我总是得到两页分页PDF - 即使我只有一个小文本。似乎每次生成PDF时都会调用函数“AcceptPageBreak()”。

如何阻止PDF末尾的空白页?

3 个答案:

答案 0 :(得分:6)

使用你的一些代码和原始函数,我找到了一种方法,它不会在文件的末尾添加一个不必要的空白页。

public function AcceptPageBreak() {
         if (1 == $this->PageNo()) {
                $this->SetMargins($left_margin, $top_margin, $right_margin, true);
         }
        if ($this->num_columns > 1) {
            // multi column mode
            if ($this->current_column < ($this->num_columns - 1)) {
                // go to next column
                $this->selectColumn($this->current_column + 1);
            } elseif ($this->AutoPageBreak) {
                // add a new page
                $this->AddPage();
                // set first column
                $this->selectColumn(0);
            }
            // avoid page breaking from checkPageBreak()
            return false;
        }
        return $this->AutoPageBreak;
    }

答案 1 :(得分:1)

我终于找到了解决自己问题的方法。 也许对于遇到同样问题的其他人来说这很有趣。

我接受上面发布的函数AcceptPageBreak()(版本1)。保存PDF后,我将PDF导入到没有最后一页的新PDF中,并保存新的PDF。

这里是代码:

 $pdf = new MYPDF();  

 $pdf->SetMargins(24, 54);        

 $pdf->AddPage();

 ...

 $pdf->MultiCell('0', '', $text, '', 'L');

 $pdf->lastPage();

 $lastPage = $pdf->PageNo() + 1;

 $pdf->Output($filePath, 'F');

 // remove last page

 $finalPdf = new FPDI();
 $finalPdf->setSourceFile($filePath);

 for ($i=1; $i < $lastPage; $i++) {
     $finalPdf->AddPage();
     $tplIdx = $finalPdf->importPage($i);
     $finalPdf->useTemplate($tplIdx);            
 }
 $finalPdf->Output($filePath, 'F');

希望它有所帮助。

答案 2 :(得分:0)

TCPDF自动分页会导致内容呈现方面的一些不一致。可能无意中延伸出页面边界的元素可能导致生成其他页面。在使用以下内容添加内容时,最好只使用autopage break:

$pdf->SetAutoPageBreak(true, $margin_bottom);

然后在不需要时禁用它。

$pdf->SetAutoPageBreak(false);