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

发布于 2024-12-10 03:51:29 字数 877 浏览 0 评论 0原文

我正在使用 TCPDF 生成 PDF。 PDF 通过 fpdi 类使用 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 末尾出现空白页?

I am using TCPDF to generate PDFs. The PDF uses a PDF-template via the fpdi-class. Some of the generated PDFs are onepaged. But sometimes I have a second page. I use $pdf->MultiCell to output my content. The page-break works fine via $pdf->SetAutoPageBreak(true).

Now my problem: I need a different top-margin on the second page. What I tried so far is the use of the AcceptPageBreak()-function - unfortunaly with no success.

With the following code-snipped I managed to change the margin on the second page. But it adds one empty page at the end of the PDF.

public function AcceptPageBreak() {

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

}

I tried to remove the last page with $pdf->deletePage but it does not work.
I tried to insert some conditions into the function:

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

}

This works fine for PDFs with text for 2 pages. But now I get allways two paged PDFs - even if I have just a small text. It seems that the function "AcceptPageBreak()" is called every time the PDF is generated.

How can I prevent the empty page at the end of my PDF?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

蝶舞 2024-12-17 03:51:30

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

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

Using some of your code and the original function, I found out a way where it doesn't add an unneccessary blank page at the end of the file.

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;
    }
星軌x 2024-12-17 03:51:30

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

我采用了上面发布的 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');

希望有帮助。

I finally found a solution to my own question.
Maybe it's interesting for someone else with the same problem.

I took the function AcceptPageBreak() like posted above (Version 1). After saving the PDF I import the PDF into a new PDF without the last page and save the new PDF.

Here the code:

 $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');

Hope it helps.

埖埖迣鎅 2024-12-17 03:51:30

TCPDF 自动分页符会导致内容呈现出现一些不一致。可能无意中超出页面边界的元素可能会导致生成额外的页面。最好仅在添加内容时使用自动分页符:

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

然后在不需要时禁用它。

$pdf->SetAutoPageBreak(false);

TCPDF Automatic Page Breaks cause some inconsistency in rendering of content. Elements that may inadvertantly extend out of the boundaries of the page can cause additional pages to be generated. It is better to only autopage break when you are adding your content using:

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

Then disable it when there it is not needed.

$pdf->SetAutoPageBreak(false);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文