dompdf在文档末尾插入空白页

时间:2014-01-10 07:57:26

标签: php dompdf

我正在使用dompdf 0.6.0生成pdf文档,并且有一个奇怪的问题,即最后会创建一个空白页面。我的(简体)html:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>PDF</title>
<style type="text/css">
@page{ margin: 0;}

.page{
    width: 612px; 
    height: 792px; 
    overflow: hidden; 
    font-family: Arial, Helvetica; 
    position: relative; 
    color: #545554;
    page-break-after: always;
}
</style>
</head>
<body>
<div class="page" style="background-image: url(page1.jpg);">
...
</div>

<div class="page" style="background-image: url(page2.jpg);"></div>

<div class="page" style="background-image: url(page3.jpg); color: white;">
...
</div>
</body>
</html>

前三页看起来很神奇,但最后有一页空白。我读过dompdf对于嵌套和合规等方面很挑剔,但是html非常干净并且可以检查出来。

8 个答案:

答案 0 :(得分:22)

结束</body></html>标记导致额外页面。我删除了它们,结果如预期。

我认为这是dompdf的一个问题,但我花了很长时间试图解决这个问题,并认为这可能对其他人有所帮助。

<强>更新

正如Joe在评论中提到的那样,将</body></html>标记移动到与结束</div>相同的行,并保持有效的html。

答案 1 :(得分:3)

对我来说,解决方法是删除标签之间的任何空格。

 $html = preg_replace('/>\s+</', "><", $html);

答案 2 :(得分:1)

发生这种情况是因为您为i == 'Angular: 2'类编写了<option *ngFor="let i of collection; let j = idx" value="{{i}}" [selected]="j === 2">{{ i }}</option>的CSS。 上面的样式还将在您的最后一页之后进行分页,并且dompdf在末尾创建一个空白页。

另一种解决方案是为您的最后一页写一个单独的CSS样式,不包括page-break-after: always;

page

编码愉快!

答案 3 :(得分:1)

就我而言,这是因为内容比 paperSet() 大。如果内容通过至少 1px,dompdf 会自动创建另一个工作表。所以你总是需要根据你设置的 paperSet() 比例来设置大小。

例如: A4纸为210mmx297mm。为方便起见,我建议使用“mm”而不是“px”。然后您可以创建您的 div 并将它们的高度相加,并确保其在 297 毫米之内。

要了解您可以在本网站上看到的纸张尺寸:

https://papersizes.io/

答案 4 :(得分:0)

如果使用数组存储和输出HTML代码,但仍然出现错误,则可以使用count()函数删除最后一页,包括除最后一页以外的所有页面中的分页符。

$html='';
$i = 0; //counter
$len = count($output_array);// lenght of the array
foreach($output_array as $output)
{   //store the html in a variable to use it in dompdf

    $html.= $output;

    if ($i < $len - 1) 
    { //if the counter is less than the lenght of the array, add a page break.
      $i++; 
      $html.=' <div class="page_break"></div>';
    }
}

答案 5 :(得分:0)

如果您有数组变量,请在youtpdfhtml.blade.php中设置此条件:

@if($key<($total-1))
  <div class="page-break"></div>
@endif 

答案 6 :(得分:0)

正如 Filip Molcik 提出的解决方案。我就是这样实现的。

$view = view('layouts.qr-pdf');
$html = $view->render();
$html = preg_replace('/>\s+</', "><", $html);
$pdf = PDF::loadHTML($html);

return $pdf->download('asd.pdf');

答案 7 :(得分:-1)

只需删除, body 和 html 结束标签页的结尾有额外的行空间。我希望你能从 pdf 中删除多余的空白页。