我正在使用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末尾的空白页?
答案 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);