【问题标题】:Change top margin on second page with tcpdf AcceptPageBreak()使用 tcpdf AcceptPageBreak() 更改第二页的上边距
【发布时间】:2011-10-14 08:34:13
【问题描述】:

我正在使用 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 结尾出现空白页?

【问题讨论】:

    标签: php fpdf tcpdf


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      希望对您有所帮助。

      【讨论】:

        【解决方案3】:

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

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

        然后在不需要时将其禁用。

        $pdf->SetAutoPageBreak(false);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-14
          • 2017-07-11
          • 1970-01-01
          • 2019-11-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多