You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Dompdf生成PDF时表格显示异常问题排查

解决Dompdf生成PDF时出现多余表格内容的问题

看起来你遇到的问题大概率是HTML结构不完整、CSS引入方式错误或者缓冲处理逻辑混乱导致的,我帮你拆解一下问题点并给出修正方案:

问题分析

  1. HTML结构缺失:你的laporan.php只有表格代码,没有完整的<html>/<head>/<body>结构,而且CSS样式被放在表格之后输出,Dompdf在渲染时可能因为结构不规范出现异常,甚至重复渲染部分内容。
  2. CSS引入方式错误:用include加载.css文件是隐患——如果文件路径不对,PHP会输出警告信息,这些警告会被混入HTML中,最终在PDF里显示成多余内容;同时你用了HTML注释<!-- BOOTSTRAP STYLES-->放在<style>标签里,这会导致CSS解析错误。
  3. 无意义的代码干扰$abc= include $value;这种赋值完全没必要,include本身就会直接输出文件内容,赋值的只是include的成功/失败状态,反而容易混淆逻辑。
  4. CSS选择器错误.table-no-border tr td th这个选择器写错了,应该分开选中td和th,否则样式不会生效。

修正后的代码

1. 重构print.php的逻辑

把HTML结构、CSS、表格内容整合为标准的HTML文档,避免缓冲处理混乱:

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

// 加载CSS文件(用file_get_contents避免include的警告问题)
$cssFiles = [
    'assets/css/bootstrap.css',
    'assets/css/font-awesome.css',
    'assets/css/error.css',
    'assets/css/basic.css',
    'assets/css/custom.css'
];

$customStyles = "
table, td, th { border: 1px solid black; }
table { border-collapse: collapse; width: 100%; }
.table-no-border tr td, .table-no-border tr th { border : none; }
td { height: 50px; vertical-align: middle; text-align: center; }
";

// 拼接所有CSS内容
$allCss = $customStyles;
foreach ($cssFiles as $file) {
    if (file_exists($file)) {
        $allCss .= file_get_contents($file);
    } else {
        // 可以添加错误日志,避免警告混入HTML
        error_log("CSS文件不存在:$file");
    }
}

// 获取表格HTML
ob_start();
include 'laporan.php';
$tableHtml = ob_get_clean();

// 构建完整的HTML文档
$html = <<<HTML
<!DOCTYPE html>
<html lang="id">
<head>
    <meta charset="UTF-8">
    <title>Laporan Siswa</title>
    <style>$allCss</style>
</head>
<body>
    $tableHtml
</body>
</html>
HTML;

// 生成PDF
$dompdf = new Dompdf();
$dompdf->loadHtml($html);
$dompdf->setPaper('A4', 'landscape');
// 可选:启用HTML5解析(Dompdf 0.8+默认启用)
$dompdf->set_option('isHtml5ParserEnabled', true);
$dompdf->render();
// 输出PDF,指定正确的文件名
$dompdf->stream('laporan_siswa.pdf', ["Attachment" => 0]);
?>

2. 保持laporan.php不变

你的表格代码本身没问题,不需要修改,保留原有的table结构即可。

额外排查建议

  • 检查CSS文件路径:确保所有assets/css/下的文件都存在,避免PHP输出警告信息混入HTML。
  • 调试生成的HTML:直接访问print.php,查看网页上的HTML内容是否有多余的文字(比如警告、错误),这些就是PDF里的多余内容。
  • 调整表格宽度:如果表格还是有排版问题,可以给每个<th>/<td>添加width属性,比如<th width="5%">#</th>,强制分配宽度,避免Dompdf自动换行导致的异常。

内容的提问来源于stack exchange,提问作者Jalz Ae

火山引擎 最新活动