Dompdf错误:将PHP文件转换为PDF时出现“找不到第4行”

php*_*wbs 5 php mysql dompdf

我正在尝试从PHP页面生成动态PDF,它给了我这个错误:

致命错误:C:\ xampp \ htdocs \ Gokujou \ dompdf \ src \ Cellmap中出现未捕获的异常“ Dompdf \ Exception”,消息为“找不到第4行,请在跟踪器中提交带有HTML代码的问题”。 php:417堆栈跟踪:#0 C:\ xampp \ htdocs \ Gokujou \ dompdf \ src \ FrameReflower \ TableRow.php(62):Dompdf \ Cellmap-> get_frame_height(Object(Dompdf \ FrameDecorator \ TableRow))#1 C: \ xampp \ htdocs \ Gokujou \ dompdf \ src \ FrameDecorator \ AbstractFrameDecorator.php(893):Dompdf \ FrameReflower \ TableRow->回流(NULL)#2 C:\ xampp \ htdocs \ Gokujou \ dompdf \ src \ FrameReflower \ TableRowGroup。 php(51):Dompdf \ FrameDecorator \ AbstractFrameDecorator-> reflow()#3 C:\ xampp \ htdocs \ Gokujou \ dompdf \ src \ FrameDecorator \ AbstractFrameDecorator.php(893):Dompdf \ FrameReflower \ TableRowGroup-> reflow(NULL) #4 C:\ xampp \ htdocs \ Gokujou \ dompdf \ src \ FrameReflower \ Table.php(488):Dompdf \ FrameDecorator \ AbstractFrameDecorator-> reflow()#5 C:\ xampp \ htdocs \ Gokujou \ dompdf \ src \ FrameDecorator \ AbstractFrameDecorator.php (893):Dompdf \ FrameReflower \ Table-> reflow(Object(Dompdf \ FrameDecorator \ Block))在C:\ xampp \ htdocs \ Gokujou \ dompdf \ src \ Cellmap.php在第417行

我有一个按钮,按“结帐”会使用以下代码生成PDF页面:

<?php
    require_once 'dompdf/autoload.inc.php';
    use Dompdf\Dompdf;

    $dompdf = new Dompdf();
    $dompdf->loadHTML(file_get_contents('receipt.php'));
    $dompdf->setPaper('A4', 'landscape');
    $dompdf->render();
    $dompdf->stream('samplepdf1');
?>
Run Code Online (Sandbox Code Playgroud)

receive.php文件里面是什么:

<?php
    include 'config.php';
?>

<!DOCTYPE html>
<html>
<head>
    <title>Gokujou Japanese Restaurant</title>
    <link rel="stylesheet" type="text/css" href="CSS/receipt.css">
</head>
<body>
    <div class="receiptContainer">
        <center>
            <img src="Images/logo.png" width="175px">
            <h4>GOKUJOU JAPANESE RESTAURANT</h4>
            <p>Total Gas Station, Hibbard Ave., Looc,<br>Dumaguete City, 6200 Negros Oriental, Philippines <br>
            09985555175 | 422-1435 <br>
            <?php echo date("Y-m-d h:i:sA"); ?>
            </p>

            <table width="90%" style="text-align: center;">
                <tr>
                    <th>DESCRIPTION</th>
                    <th>QTY</th>
                    <th>PRICE</th>
                    <th>TOTAL</th>
                </tr>
                <tr>
                    <td></td>
                </tr>
                <?php
                    $query = mysqli_query($con, "SELECT * FROM orders WHERE customerID = '".$_SESSION['customer']."' AND status = 'Checked Out'");
                    while($row = mysqli_fetch_row($query)){
                ?>
                <tr>
                    <td><?php echo $row[3]; ?></td>
                    <td><?php echo $row[5]; ?></td>
                    <td><?php echo $row[4]; ?></td>
                    <td><?php echo $row[6]; ?></td>
                </tr>
                <?php
                    }
                    $total = mysqli_query($con, "SELECT SUM(total) AS grandTotal FROM orders WHERE customerID = '".$_SESSION['customer']."' AND status = 'Checked Out' GROUP BY customerID");
                    $row = mysqli_fetch_row($total);
                    $sum = $row[0];
                ?>
                <tr>
                    <!-- break space -->
                    <tr></tr><tr></tr><tr></tr><tr></tr>
                    <tr></tr><tr></tr><tr></tr><tr></tr>
                    <tr></tr><tr></tr><tr></tr><tr></tr>

                    <td colspan="1" style="text-align: left">GRAND TOTAL: <?php echo $sum; ?></td>
                    <td colspan="3"></td>
                </tr>
                <tr style="text-align: left">
                    <td colspan="1">CASH: <?php echo $_SESSION['cash']; ?></td>
                    <td colspan="3"></td>
                </tr>
                <tr style="text-align: left">
                    <td colspan="1">CHANGE: <?php echo $_SESSION['cash'] - $sum; ?></td>
                    <td colspan="3"></td>
                </tr>
            </table>
        </center>
    </div>  <!-- fullContainer -->
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

当我在loadHTML()语句上放一个字符串时,它可以工作,但是当我放一个PHP文件甚至一个静态HTML时,它返回一个错误,但是一个静态HTML将返回第3行而不是第4行。

Dav*_*ist 7

经过大量测试,我得出的结论是DOMPDF确实不喜欢空标签。

例:

<tr></tr><tr></tr><tr></tr><tr></tr>
<tr></tr><tr></tr><tr></tr><tr></tr>
<tr></tr><tr></tr><tr></tr><tr></tr>
Run Code Online (Sandbox Code Playgroud)

我的代码也包含其中一些内容(用于制作POC原型),当我删除它们时,我得到了可以正确呈现的表格

(我猜DomPDF不能计算空标签的尺寸时会阻塞)

希望这可以帮助

问题,解决方案和结果的屏幕截图