我正在使用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非常干净并且可以检查出来。
答案 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 毫米之内。
要了解您可以在本网站上看到的纸张尺寸:
答案 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 中删除多余的空白页。