【问题标题】:tcpdf : prevent page break within a blocktcpdf : 防止块内分页
【发布时间】:2015-11-20 22:55:49
【问题描述】:

我正在使用 TCPDF 打印一些数据表:一个大表(虽然通常不超过一页),然后是第二个较小的表。
在某些情况下,两个表加起来超过一页,因此 TCPDF 在第二个表的中间插入一个分页符。我的客户希望避免这种行为:他们宁愿将第二个表格完全放在一个新页面上,即如果两个表格都不能放在一个页面上,则在表格之前插入分页符

当然,如果两个表格都适合一页,则不应使用分页符。

那么有人知道是否有办法指示 TCPDF 在给定的表格中插入分页符?

【问题讨论】:

    标签: tcpdf


    【解决方案1】:

    启动事务,插入表,检查是否在新页面,如果是,回滚并在插入表之前添加页面。

    非常重要:不要忘记 TRUE 调用回滚:

    $this->startTransaction(); 
    $start_page = $this->getPage();                       
    $this->writeHTMLCell( 0, 0, '', '', $html, 0, 1, false, true, 'C'  );
    $end_page = $this->getPage();
    if  ($end_page != $start_page) {
        $this->rollbackTransaction(true); // don't forget the true
        $this->AddPage();
        $this->writeHTMLCell( 0, 0, '', '', $html, 0, 1, false, true, 'C'  );
    }else{
        $this->commitTransaction();     
    } 
    

    希望对你有帮助 米歇尔

    【讨论】:

    • 这是一个老问题,与我无关,所以我现在无法测试你的答案。不过还是谢谢!
    • 谨慎使用这种方法,以确保您的 $html 内容永远不会超过一页。在这种情况下,结束页面将始终不等于起始页面,脚本将继续添加空白页面。 IF 语句中的标志将允许您跟踪是否已添加空白,并允许您强制停止或警告。
    • getPage() 可以返回相同的值,即使内容溢出页面边界。我必须计算可打印区域并确定 Y 是否离开了当前页面:if ($this->getY() >= ($this->getPageHeight() - $this->getMargins()['top'] - $this->getMargins()['bottom']))
    【解决方案2】:

    根据文档,可以选择将 nobr="true" 作为属性添加到 table 标记。

     $tbl = <<<EOD
    <table border="1" cellpadding="2" cellspacing="2" nobr="true">
     <tr>
      <th colspan="3" align="center">NON-BREAKING TABLE</th>
     </tr>
     <tr>
      <td>1-1</td>
      <td>1-2</td>
      <td>1-3</td>
     </tr>
    </table>
    EOD;
    
    $pdf->writeHTML($tbl, true, false, false, false, '');
    

    http://www.tcpdf.org/examples/example_048.phps

    【讨论】:

      【解决方案3】:

      提前计算第二张桌子的高度。如果需要,使用 checkPageBreak 方法添加分页符。

      【讨论】:

        猜你喜欢
        • 2018-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-18
        相关资源
        最近更新 更多