You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel开发:dompdf内容超页时如何实现自动分页?

在Laravel中使用dompdf实现自动分页的问题

我在Laravel项目里用dompdf生成PDF时,遇到了内容超出页面长度无法自动分页的问题(内容被截断在页面底部)。目前手动添加带page-break-after: always的div可以强制分页,但需要实现文本超出页面时自动触发分页。


待处理的Blade代码片段

<table class="table-no-border">
    <tr>
        <td>
            <p style="text-align: center; font-size: 14px;"><b>IMÓVEL OU DIREITO REAL OUTORGADO</b></p>
            @if($endereco)
                <p>LOTE {{$endereco->lote}} - QUADRA {{$endereco->quadra}}, MATRÍCULA @if(isset($matricula)) {{$matricula}} @endif, situado no município de {{$config->cidade}}, localizado na {{$endereco->tipo_logradouro}} {{$endereco->logradouro}}, nº {{$endereco->numero}} - {{$endereco->bairro}}, {{$endereco->cidade}} - {{$endereco->estado}}, {{$endereco->cep}}, com as seguintes medidas e confrontações: Área: {{$lote->lote_area}}m². Perímetro: {{$lote->lote_perimetro}}m. <br> {{trim(strip_tags($lote->memorial_descritivo))}}.
                    <!-- <div class="page-break"></div> -->
                    Atribui-se ao imóvel o valor de R$ {{$lote->lote_valor}} <b>({{$valor_extenso}})</b>.</p>
            @endif
        </td>
    </tr>
</table>

当前CSS配置

.page-break {
    page-break-after: always;
}

当前dompdf初始化代码

$pdf_merge = new PDFMerger;

$html = view('versa.titulo-legitimacao.visualizar-titulo-individual', $dados)->render();

$dompdf = new Dompdf();
$dompdf->set_option('enable_html5_parser', TRUE);
$dompdf->getOptions()->getChroot();
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$output = $dompdf->output();
$filePath = storage_path() . "/" .getInstancia()."/titulo-legitimacao-".$user->id."/titulo-legitimacao-individual-".$lote->lote_codigo.".pdf";
file_put_contents($filePath, $output);

解决方案

dompdf默认支持自动分页,但表格单元格内的长文本可能因块级元素限制无法自动拆分,可尝试以下方法:

1. 允许表格单元格内分页

给表格相关元素添加CSS,允许分页中断:

table {
    page-break-inside: auto;
}
td {
    page-break-inside: auto;
}

注意:若给tr设置page-break-inside: avoid,过长行可能被截断,需根据实际情况调整。

2. 拆分长文本段落

将单个<p>内的长内容拆分为多个小段落,dompdf更容易对小块级元素处理分页:

@if($endereco)
    <p>LOTE {{$endereco->lote}} - QUADRA {{$endereco->quadra}}, MATRÍCULA @if(isset($matricula)) {{$matricula}} @endif, situado no município de {{$config->cidade}}, localizado na {{$endereco->tipo_logradouro}} {{$endereco->logradouro}}, nº {{$endereco->numero}} - {{$endereco->bairro}}, {{$endereco->cidade}} - {{$endereco->estado}}, {{$endereco->cep}}, com as seguintes medidas e confrontações: Área: {{$lote->lote_area}}m². Perímetro: {{$lote->lote_perimetro}}m. <br> {{trim(strip_tags($lote->memorial_descritivo))}}.</p>
    <p>Atribui-se ao imóvel o valor de R$ {{$lote->lote_valor}} <b>({{$valor_extenso}})</b>.</p>
@endif

3. 优化dompdf配置

启用字体子集化等选项,避免因字体渲染问题导致分页异常:

$options = new \Dompdf\Options();
$options->set('enable_html5_parser', true);
$options->set('enable_font_subsetting', true);
// 若需加载外部CSS/图片,开启以下选项
// $options->set('enableRemote', true);

$dompdf = new Dompdf($options);

4. 移除固定高度限制

检查页面中是否有设置固定高度的容器,固定高度会阻止dompdf自动计算分页位置,确保容器高度自适应(避免height: 100%或固定像素值)。


内容的提问来源于stack exchange,提问作者Rodrigo Franco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:13:27