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
相关产品推荐
相关产品推荐

