如果元素超过页面高度,dompdf 分页符?

Posted

技术标签:

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

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

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

table page-break-before:auto;

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

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

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

【问题讨论】:

【参考方案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/653 和 github.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并解释你的代码 您可以通过编辑您的答案将您的评论添加到您的代码中

以上是关于如果元素超过页面高度,dompdf 分页符?的主要内容,如果未能解决你的问题,请参考以下文章

页面设置中“分页符”和“下一页”的区别是啥?

js 分页问题。根据页面高度进行分页

分页符在哪?

Word如何插入分页符

分页符怎么设置

如何在Word中插入分页符