【问题标题】:DOMPDF - PHP Page to PDFDOMPDF - PHP 页面到 PDF
【发布时间】:2021-10-30 03:17:37
【问题描述】:

我有一个 PHP 页面,它在表格中显示一堆 MongoDB 文档信息。 我想要做的是制作一个按钮,将当前 PHP 页面(基本上所有带有 CSS 样式和数据库变量的表)打印成 PDF。 但是在尝试了很多代码之后,我似乎仍然无法使其工作。

这是我现在的代码

<?php
require 'vendor/autoload.php';
use Dompdf\Dompdf;

>>Here I have my code related to the MongoDB query

ob_start();
?>



<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Registre</title>
  </head>
<body>
<form method="post" action="">
   <input type="submit" name="pdf" id="pdf" value="PRINT">
</form>
<table class="tftable">
    <thead>    
        <tr>
            <th>1</th>
            <th>2</th>
            <th>3</th>
        </tr>
    </thead>
    <tbody>
        <?php foreach ($r as $document): 
        $bson = MongoDB\BSON\fromPHP($document);
        $json = json_decode(MongoDB\BSON\toJSON($bson));
        ?>
            <tr>
                <td><?php echo $var1 ?></td> 
                <td><?php echo $var2 ?></td>
                <td><?php echo $var3 ?></td>
            </tr>
        <?php endforeach; ?>
    </tbody>
    <tr>
        <td>
            <form action="" method="POST">
            <label for="var1">var1</label><br>
            <input type="date" id="var1" name="var1">
        </td>
        <td>
        <label for="var2">var2</label><br>
            <input type="text" id="var2" name="var2">
        </td>
        <td>
        <label for="var3">var3</label><br>
            <input type="text" id="var3" name="var3">
        </td>
    </tr>
    <tr>
        <td>
            <input type="submit" value="Add Data"></form>
        </td>
    </tr>
</table>
</body></html>



<?php 
if(isset($_POST["pdf"])) {
    $html = ob_get_contents(); 
    ob_end_flush();
    $dompdf = new DOMPDF();
    $dompdf->loadHtml($html);
    $dompdf->render();
    $dompdf->stream('registre.pdf',array('Attachment'=>1));
}
?>

现在,当我单击打印时,我的 PHP 页面看起来正在快速重新加载,但没有其他任何反应,也没有显示 PDF。 如果将 $dompdf 的 PHP 部分放在 HTML 部分之前,我会得到一个空白 PDF 文件。

PHP v8.0.5

dompdf v1.0.2

谢谢。

【问题讨论】:

  • ob_end_flush 可能会发送数据 - 请尝试使用ob_get_flush 而不是调用ob_get_contents 和ob_end_flush
  • @NicoHaase 实际上我刚刚意识到“重新加载”在我的页面底部引发了一个错误,告诉我“无法流式传输 pdf:标头已发送”我尝试使用您的解决方案但没有帮助.关于这个错误,我尝试检查是否有任何剩余空间(没有找到任何空间)并删除表中的类和样式,但它没有帮助。我尝试删除 CSS 文件,还认为 domPDF 与其中的一行有冲突,但同样的问题。
  • "headers already sent"错误是调用ob_end_flush引起的。这告诉服务器将当前缓冲区内容发送到浏览器。当您之后调用$dompdf-&gt;stream() 时,Dompdf 会尝试设置标头,但它无法做到这一点。您应该调用 ob_end_clean() 来确保缓冲区中没有内容。进行这些更改后,您是否在删除该功能后仍会看到相同的错误?
  • @BrianS 谢谢!就是这样。我用 ob_end_clean() 替换了 ob_end_flush(),现在 PDF 被打印出来了!表格的行没有显示,但没关系,既然我有一个 PDF 工作,我会自己找到解决方案!
  • 添加为后代的答案

标签: php html pdf dompdf


【解决方案1】:

“标头已发送”错误是由对ob_end_flush 的调用引起的。这告诉服务器将当前缓冲区内容发送到浏览器。当您之后调用$dompdf-&gt;stream() 时,Dompdf 会尝试设置标头,但它不能这样做。您应该调用ob_end_clean() 来确保缓冲区中没有剩余内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-09
    • 2016-12-10
    • 2015-07-03
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 2014-07-31
    相关资源
    最近更新 更多