如何使用dompdf创建多个页面

时间:2012-12-30 10:16:15

标签: php mysql arrays dompdf

我在使用多维数组及其值时遇到了一些麻烦。

我正在寻找的是,从我的查询中我正在搜索数组中的教师名称。之后我想用dompdf创建一个pdf。问题在于循环。我无法创建一个适合我想要它工作的循环。我的示例查询是

    $q11 = "select id from teachers order by teacher ";
    $r11 = mysql_query($q11) or die(mysql_error());
    while($rows11 = mysql_fetch_array($r11)){
        $teacher = $rows11['id'];
        $dompdf->"It will start working";
    }

现在我知道,这段代码令人困惑,但我想要的是,它应该为每个教师在一个单独的pdf文件中创建dompdf。就像查询一样,它应该获取教师,并且对于每个教师,它应该创建一个dompdf页面。目前,它根据我的查询搜索的最后一个值只生成一个页面。

请帮忙。这有点紧急。

2 个答案:

答案 0 :(得分:24)

你的循环工作正常。将页面添加到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 close HTML是否在新行中而不是缩进。

<强> EDIT2

仍然不太确定,您正在使用哪个库。我发现this extension看起来很不错,它被称为dompdf,就像你在问题中所说的那样。

您的最新评论表明您目前尚未解决问题,因此我决定添加更多信息以帮助您实现目标。

  

免责声明:我不打算编写功能代码,我不会对此进行测试,但以下提示将帮助您找到正确的方向来完成您的工作。

dompdf能够读取输入文档的CSS2和CSS3属性。

上面while循环中的每个循环代表一位教师,每位教师在输出文档中都有自己的页面。

我将页面放入具有类teacherPage的div容器中。您可以使用要为教师显示的所有信息填充此容器。

现在我们需要做的就是告诉dompdf每个teacherPage都是一个新页面。这可以使用@page标记shipped with CSS3

来完成

我在上面的示例文档中添加了一个空的css容器<style type="text/css"></style>,这就是页面样式应该去的地方。

示例CSS

@page teacher {
  size: A4 portrait;
  margin: 2cm;
}

.teacherPage {
   page: teacher;
   page-break-after: always;
}

使用@page,您可以定义命名页面teacher,该页面可以具有对整个页面容器有效的属性。

page-break-after: always将在每个容器

之后开始一个新页面

希望这有帮助,尝试尝试:)

答案 1 :(得分:11)

显然没有溢出问题且结果超出了工作表的允许范围,您可以做的是将数据与另一个表中的父项分开并放在它们之间:

<div style="page-break-before: always;"></div>