如何使用dompdf生成混合横竖页面尺寸的多页PDF?
解决dompdf实现多页面横竖方向切换的问题
步骤1:修正HTML结构并添加方向控制属性
先修正HTML中page-break标签的语法错误(缺失闭合引号),再给不同页面的容器添加page属性,关联后续定义的CSS页面规则:
<!--First Page--> <div class="container" style="page: landscape;"> Page 1 </div> <div class="page-break"></div> <!--Second Page--> <div class="container" style="page: landscape;"> Page 2 </div> <div class="page-break"></div> <!--Third Page--> <div class="container" style="page: landscape;"> Page 3 </div> <div class="page-break"></div> <!--Fourth Page--> <div class="container" style="page: portrait;"> Page 4 </div> <div class="page-break"></div> <!--Fifth Page--> <div class="container" style="page: portrait;"> Page 5 </div> <div class="page-break"></div> <!--Sixth Page--> <div class="container" style="page: portrait;"> Page 6 </div>
步骤2:添加CSS规则定义页面方向和分页行为
在HTML的<head>中插入以下CSS,定义横向、纵向两种页面规格,同时确保分页符生效:
<style> .page-break { /* 强制在该元素后触发分页 */ page-break-after: always; } /* 定义横向页面规则 */ @page landscape { size: landscape; /* 可选:设置页面边距,按需调整 */ margin: 2cm; } /* 定义纵向页面规则 */ @page portrait { size: portrait; margin: 2cm; } </style>
步骤3:调整PHP端dompdf代码
确保使用支持@page命名规则的dompdf版本(建议0.8.0及以上),常规PDF生成代码无需全局设置纸张方向,CSS规则会自动覆盖全局配置:
require_once 'dompdf/autoload.inc.php'; use Dompdf\Dompdf; use Dompdf\Options; // 初始化dompdf配置 $options = new Options(); $options->set('isHtml5ParserEnabled', true); $options->set('isCssEnabled', true); $dompdf = new Dompdf($options); // 加载HTML内容(可从文件读取或直接传入字符串) $html = file_get_contents('your-html-file.php'); $dompdf->loadHtml($html); $dompdf->render(); // 输出PDF文件 $dompdf->stream('multi-orientation-document.pdf');
关键注意事项
- dompdf版本:旧版本可能不支持
@page命名和page属性,建议使用最新稳定版。 - 优先级:CSS中定义的
@page规则优先级高于PHP端setPaper()设置的全局纸张方向,无需在PHP中全局指定横竖。 - 内容适配:横向页面的内容需要适配宽度,避免溢出,可调整容器的宽度样式。
内容的提问来源于stack exchange,提问作者Cihan Yıldız
相关产品推荐
相关产品推荐

