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

Laravel中使用DOMPDF生成PDF时如何在每一页显示页码

问题分析
  • 你将DOMPDF的PHP操作代码写在了前端的<script>标签内,该标签为JavaScript脚本标签,内部的PHP代码不会被服务器解析执行,属于逻辑位置错误
  • CSS规则中你声明了header、footer对应page-header、page-footer,但没有编写对应类名的HTML结构,样式无法生效
  • 重复定义了两次@page规则,后定义的会覆盖前序规则,且margin-top单位写错为105t,正确单位应为105pt
解决方法

可以任选以下任意一种方案实现页码功能:

方案1:Controller端回调插入页码(兼容性最高)

直接修改控制器代码,在PDF生成后通过回调遍历所有页面插入页码,不需要修改原有View文件:

public function generatePDF()
{
    try
    {
        $id = hexdec($_GET['id']);
        $data = DB::table('table_name')
        ->where('id','=',$id)
        ->get();       
        $pdf = PDF::loadView('pages.myPDF', compact('data'));
        
        // 新增页码插入逻辑
        $pdf->output(function ($pdf) {
            $font = $pdf->getFontMetrics()->get_font("helvetica", "bold");
            $totalPage = $pdf->get_page_count();
            for ($page = 1; $page <= $totalPage; $page++) {
                $pdf->set_page($page);
                // 坐标可根据排版自行调整,此处为右下角位置
                $pdf->text(520, 820, "{$page} / {$totalPage}", $font, 10, [0,0,0]);
            }
        });

        return $pdf->download($caseName.'.pdf');
    }
    catch(\Exception $ex)
    {
        return $ex->getMessage();
    }   
}

方案2:CSS定义固定页脚实现页码

修改你的View文件,删除无效的<script>标签内PHP代码,补全页脚结构和样式即可,不需要修改原有控制器代码:

<html>
<head>
<style type="text/css" media="all">
@page {
    margin-top: 105pt;
    margin-bottom: 50pt; /* 预留页脚显示空间 */
}
/* 定义固定页脚样式 */
.page-footer {
    position: fixed;
    bottom: 20pt;
    width: 100%;
    text-align: right;
    font-size: 10px;
    font-family: helvetica, sans-serif;
}
.w3-Times-New-Roman {
  font-family: "Lobster", serif;
}
</style>
</head>
<body>
    <!-- 新增页脚结构,DOMPDF会自动替换{PAGE_NUM}和{PAGE_COUNT}为实际值 -->
    <div class="page-footer">
        第 {PAGE_NUM} 页 / 共 {PAGE_COUNT} 页
    </div>

    <div style="font-family: Times New Roman; font-size: 12px;word-spacing: 3px; text-align: justify; color:#000;"> 
        <?php
        $array1 = array("<blockquote>\r\n<p>","</p>\r\n</blockquote>");
        $array2 = array("<blockquote>","</blockquote>");
        $array3 = array("<i><u>","</u></i>"); 
        $value = str_replace($array1, $array3, $data[0]->columnName);
        $value = str_replace($array2, $array3, $value);
        ?>
        {!!$value!!}
    </div><br>
</body>
</html>
注意事项
  • 两种方案二选一即可,不要同时使用避免出现冲突
  • 页码的位置、字体、大小可根据自身排版需求调整对应参数
  • 若使用中文字体作为页码字体,需要提前将字体导入DOMPDF配置,避免出现乱码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 05:45:02