你的循环工作正常。您向 PDF 添加页面的方式可能是错误的。显然,您一次又一次地覆盖一页,而不是附加新的一页。
编辑
我从来没有使用过dompdf。快速浏览一下文档让我觉得您创建了类似于 HTML 标记的内容,然后将其转换为 PDF,我说对了吗?
示例代码
$html = <<<HTML
<html>
<head>
<style type="text/css">
/* Your document styling goes here */
</style>
</head>
<body>
HTML;
while ( $row = $dbResult->fetch_assoc() ) {
$html .= '<div class="teacherPage">'
. $row['name'] // your teacher document goes here
'</div>';
}
$html .= '</body></html>';
$dompdf = new DOMPDF();
$dompdf->load_html($html);
$dompdf->render();
$dompdf->stream("sample.pdf");
如果您想知道不寻常的语法$var = <<<HTML \r\nHTML
,那就是heredoc。当你有很多外来的内联代码时,使用 heredocs 会更舒服,这可以有变量{$varname}
,你不需要担心引号。您需要确保的是,heredoc closeHTML
是在一个新行中并且没有缩进。
编辑2
仍然不太确定,您正在使用哪个库。我发现这个扩展看起来不错,它被称为 dompdf,就像你在问题中所说的那样。
您的最新评论表明您到目前为止还没有解决您的问题,因此我决定添加更多信息以使您达到目标。
免责声明:我不会编写函数式代码,也不会对此进行测试,但以下提示将推动您朝着正确的方向完成工作。
dompdf 能够读取您输入文档的 CSS2 和 CSS3 属性。
上面循环中的每个循环都while
代表一位老师,他们每个人在输出文档中都有自己的页面。
我将页面放入带有 class 的 div 容器中teacherPage
。您可以在此容器中填充您希望为教师显示的所有信息。
现在我们需要做的就是告诉 dompdf 每个teacherPage
都是一个新页面。这可以使用CSS3 附带的@page
标记来完成
我在上面的示例文档中添加了一个空的 css 容器<style type="text/css"></style>
,这就是页面样式应该去的地方。
示例 CSS
@page teacher {
size: A4 portrait;
margin: 2cm;
}
.teacherPage {
page: teacher;
page-break-after: always;
}
@page
您可以定义一个命名的 page ,它可以具有teacher
对整个页面容器有效的属性。
page-break-after: always
将在每个容器之后开始一个新页面
希望这会有所帮助,玩得开心:)