11

我在多维数组及其值方面遇到了一些麻烦。

我正在寻找的是,从我的查询中,我在数组中搜索教师姓名。之后我想使用 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 页面。目前它根据我的查询搜索的最后一个值只制作一页。

请帮忙。有点急

4

2 回答 2

26

你的循环工作正常。您向 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将在每个容器之后开始一个新页面

希望这会有所帮助,玩得开心:)

于 2012-12-30T10:27:46.050 回答
13

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

<div style="page-break-before: always;"></div>
于 2014-07-11T18:12:46.923 回答