【问题标题】:dompdf Page break if element is exceeding page height?如果元素超过页面高度,dompdf 分页符?
【发布时间】:2012-02-02 03:43:12
【问题描述】:

在 dompdf 中进行分页的最佳方法是什么?

我已经查看了 here 的 page-break-before css 属性,但是当我这样做时它不起作用:

table {page-break-before:auto;}

页面仍然在我的桌子中间中断。

是否可以设置我的 html/css 以便在元素超出页面高度时页面将在元素之前中断?

理想情况下,我想将我的 html 划分为 div 部分,以便每个部分在超出当前页面高度时从新页面开始。

【问题讨论】:

    标签: php pdf-generation dompdf


    【解决方案1】:

    使用page-break-inside: auto; 基本上是对 dompdf 说“做你通常在分页时会做的事情。”

    要在表格之前/之后强制分页,您可以使用 page-break-before: always; / page-break-after: always;

    要让 dompdf 避免破坏元素,您可以使用 page-break-inside: avoid;

    【讨论】:

    • page-break-inside:avoid; 使表格中的图像消失,并且在我的情况下使用 colspan=2 时出现问题
    • 提醒一下:我尝试在<tbody/><table/> 标签上使用page-break-inside: avoid,以及在<tr/> 上使用page-break-after: avoid——两者都给了我一些额外的空白页。我的解决方案是使用page-break-inside: avoid 将表格包装在<div/> 中。
    • 请注意,这不适用于 tds 中的 rowspan,我最终切换到 mpdf,因为它是一个非常简单(但很长)的表
    • page-break-inside: auto; 不适用于大于页面的元素不幸的是......请参阅:github.com/dompdf/dompdf/issues/653github.com/dompdf/dompdf/issues/809
    • 这仍然是一个有效的修复。如果不切断第一页之后的内容,我无法将我的大表格转换为 PDF。 css 规则 page-break-after: always;救了我的但是。每次内容接近页面高度时,我都会内联添加该规则。非常感谢这个小技巧!
    【解决方案2】:

    这里有个技巧:将您不想跨多个页面打印的<table> 放在另一个<table> 中。

    【讨论】:

    • 或放入
    【解决方案3】:

    您可以使用this online debugger 进行快速测试 - 经过几天的测试,我终于发现了分页符和边距问题。

    附记:是否有人在开发/生产环境中安装了调试环境,并可以向我指出任何文档或教程?

    【讨论】:

    • 检查此调试器上可能存在的问题是有意义的。例如,CSS 的一个小变化可能会影响很大。特别是 dompdflog 标签非常方便。
    • 感谢调试器链接,它非常很有用。
    【解决方案4】:

    就我而言,这是因为我在另一张桌子中使用了一张桌子。 喜欢,

    <table>
       <tr>
          <td>
             <table></table>
          </td>
       </tr>
     </table>
    

    所以我所做的就是把桌子拿出来。解决了我的问题。

    【讨论】:

      【解决方案5】:

      //在开始for循环之前先赋值一个变量,并在for循环内部设置后自增运算符。其次,在单页数据显示项条件下使用。

        <?php $n=1 ?>
                @foreach ($purchases as $key=> $purchase)
                     <tr >
                         <td> {{ $key + 1 }}  </td>
                         <td> {{ $purchase->supplier->company_name ? 
                         $purchase->supplier->company_name : "" }}  </td>
                         <td> {{ "S-".$purchase->id  }}   </td>
                         <td> {{  salte_items($purchase->purchaseItems) }}        </td>
                         <td> {{ $purchase->created_at->format('d-m-Y') }}  </td>
                         <td> {{ intval($purchase->total) }}    </td>
                          </tr>
                        
                          @if ( $n % 25 == 0 )
                              <div style="page-break-before:always;"> </div>
                          @endif
                          <?php $n++ ?>
      
                 @endforeach
      

      【讨论】:

      • 请添加cmets并解释你的代码
      • 您可以通过编辑您的答案将您的评论添加到您的代码中
      猜你喜欢
      • 1970-01-01
      • 2019-07-26
      • 2021-09-09
      • 2016-04-10
      • 1970-01-01
      • 2021-11-02
      • 2018-06-12
      • 2016-02-01
      • 1970-01-01
      相关资源
      最近更新 更多