没有内置的方法可以做到这一点,但这并不意味着不可能。你碰巧是第二个问这个问题的人,而我第一次确实想出了一个可以做到的方法。
以下内容来自dompdf support group上的原帖。
首先,您需要对文档的样式表进行少量修改。您想将顶部和底部页边距设置为零,这样它们就不会添加到高度计算中。因此,在您的第一遍 HTML 中添加以下附加样式声明:
@page { margin-top: 0px; margin-bottom: 0px; }
接下来,您必须确定最佳的首次通过文档大小。我使用的是一个简单的文档,所以我选择了一个简单的 8cm x 8cm 页面大小。您可能希望使用更大的高度来避免与分页相关的任何错误。 8cm 大约是 226.77pt。所以我设置了第一遍以使用定义了适当尺寸的文档:
$dompdf = new DOMPDF( );
$dompdf->set_paper( array( 0 , 0 , 226.77 , 226.77 ) );
$dompdf->load_html( $first_pass_html );
$dompdf->render( );
然后我们获取此遍产生的页数并取消设置 $dompdf 变量,以便我们可以进行第二遍:
$page_count = $dompdf->get_canvas( )->get_page_number( );
unset( $dompdf );
最后,使用由第一次传递中使用的页面高度乘以生成的页面数(加上一点额外的填充以适应边距)计算出的页面高度来第二次呈现文档。
$dompdf = new DOMPDF( );
$dompdf->set_paper( array( 0 , 0 , 226.77 , 226.77 * $page_count + 20 ) );
$dompdf->load_html( $original_html );
$dompdf->render( );
$dompdf->stream( 'sample.pdf' , array( 'Attachment' => 0 ) );