我有一张工资单,它是通过PHP使用Bootstrap生成的。我需要每6张工资单换一页。
这是我生成工资单的代码。
foreach($results as $result){
foreach($result as $fetchall){
if($counter % 6 == 0){
$pgbreak = 'pgbreak';
}
else{
$pgbreak = '';
}
$payslip .= '<div class="col-sm-4 '. $pgbreak .'">';
$counter++;
$payslip .= '<div class="payslip-title"></div>';
$payslip .= '</div>';
}
}
这是我放置分页符的CSS代码:
@media print { div.pgbreak { page-break-after: always;} }
这是样本输出
点击此处
对于分页,您可以查看:
page-break-before
page-break-inside
page-break-after
当我想将数据导出到.pdf
中进行打印时,我通常使用html2pdf
模板化并不容易,并且不会解释所有css
属性,但完成后您可以确定结果。
编辑:
您需要为每4项添加一个page-break-after: always;
。
$payslip .= '<div class="col-sm-6">';
成为:
$payslip .= '<div class="col-sm-6 payslip-item">';
并添加以下CSS:
.payslip-item:nth-child(4n) {
page-break-after: always;
}
附言:我还没有测试这个
编辑2:
我忘了,page-break-inside
被break-inside
取代了
此外,在几次测试后,所选元素需要有display: block;
(在Chrome的display: inline-block
上没有单词(。。。
下面是一个工作示例:
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" />
<style>
.page {
page-break-inside: avoid;
page-break-after: always;
}
</style>
</head>
<body>
<div class="container-fluid">
<?php
$closed = true;
for ($i = 0; $i < 40; $i++) {
if ($i % 6 == 0) {
echo '<div class="row page">';
$closed = false;
}
?>
<div class="col-sm-4 item">
<h2>Lorem ipsum</h2>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</div>
<?php
if ($i % 6 == 5) {
echo '</div>';
$closed = true;
}
}
if (!$closed) {
echo '</div>';
}
?>
</div>
</body>
</html>