我正在使用 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 非常干净并且可以检查。
结果是结尾
</body>
和 </html>
标签导致了额外的页面。我删除了它们,结果符合预期。
我想这是 dompdf 的问题,但我花了很长时间试图解决这个问题,并认为这可能对其他人有帮助。
更新:
正如 Joe 在评论中提到的,将
</body>
和 </html>
标签移动到与结束 </div>
相同的行,并且保持有效的 html。
对我来说,修复方法是删除标签之间的任何空格。
$html = preg_replace('/>\s+</', "><", $html);
发生这种情况是因为您为
page-break-after: always;
类编写了 page
的 css。
上面的样式也会在最后一页之后进行分页,并且 dompdf 在最后创建一个空白页面。
另一个解决方案是为最后一页编写单独的CSS样式,不包括
page-break-after: always;
<!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;
}
.last-page{
width: 612px;
height: 792px;
overflow: hidden;
font-family: Arial, Helvetica;
position: relative;
color: #545554;
}
</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="last-page" style="background-image: url(page3.jpg); color: white;">
...
</div>
</body>
</html>
编码快乐!
就我而言,发生这种情况是因为内容大于 paperSet()。如果内容通过至少 1px,dompdf 会自动创建另一个工作表。所以你总是需要根据你设置的 paperSet() 比例来设置尺寸。
例如: A4纸尺寸为210mmx297mm。为了方便起见,我建议使用“mm”而不是“px”。然后您可以创建您的 div 并添加它们的高度,将它们全部相加并确保其在 297 毫米以内。
要了解您可以在此网站中看到的纸张尺寸:
如果你有数组变量,则在
youtpdfhtml.blade.php
中设置此条件:
@if($key<($total-1))
<div class="page-break"></div>
@endif
只需删除, body 和 html 结束标记页面末尾,带有额外的行空间。我希望你能从 pdf 中删除多余的空白页。
如果您使用数组来存储和输出 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>';
}
}
Filip Molcik 提出了解决方案。这就是我实现的方法。
$view = view('layouts.qr-pdf');
$html = $view->render();
$html = preg_replace('/>\s+</', "><", $html);
$pdf = PDF::loadHTML($html);
return $pdf->download('asd.pdf');
通过添加
margin-bottom: -20px;
到 main
或 div
标签解决了我的问题。
我遇到了同样的问题,并通过将页面高度从 -
更改来解决最小高度:297 毫米到最小高度:290 毫米
对我来说,这是因为我有一个“最小高度:100%;”在 CSS 文件中。删除它,就没有多余的空白页。
我确实在文件末尾连接了 css 链接,这导致了新页面。
喜欢:
[...] //html with </html>
$html .= "<link>[...]</link>";
这当然会导致一个新页面,但你必须考虑一下,也许这对某人有帮助。
P.S.:我还没有足够的声誉来写这篇评论