You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP、MySQL和HTML2PDF生成多个独立PDF文件

解决方法

你的代码核心问题是输出缓冲位置错误、循环逻辑混乱,导致所有样本的内容被合并到同一个PDF中。以下是修正后的完整代码:

<?php
require_once dirname(__FILE__).'/vendor/autoload.php';

use Spipu\Html2Pdf\Html2Pdf;
use Spipu\Html2Pdf\Exception\Html2PdfException;
use Spipu\Html2Pdf\Exception\ExceptionFormatter;

$tablename = 'run01122017'; // 运行名

// 获取所有唯一的样本ID(idEcht)
$query2 = "SELECT DISTINCT SUBSTRING(TABLE_NAME, 12, 8) AS idEcht FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME LIKE '{$tablename}%'";
$result2 = mysqli_query($conn, $query2) or die("查询失败");

// 遍历每个样本ID,生成独立PDF
while ($row2 = mysqli_fetch_assoc($result2)) {
    $idEcht = $row2['idEcht'];
    
    // 开启输出缓冲,单独捕获当前样本的HTML内容
    ob_start();
    
    // 查询当前样本对应的患者信息
    $FetchIdPat = "SELECT Firstname, Lastname FROM PAT WHERE idEcht = '{$idEcht}'";
    $PerformIdPAT = mysqli_query($conn, $FetchIdPat) or die(mysqli_error($conn));
    $rowIDPat = mysqli_fetch_assoc($PerformIdPAT);
    ?>
    <!DOCTYPE html>
    <html>
    <body>
        Patid:&nbsp;<b><?php echo $rowIDPat["Lastname"] . "&nbsp;" . $rowIDPat["Firstname"]; ?></b>
        <!-- 可在此添加更多当前样本的报告内容 -->
    </body>
    </html>
    <?php
    
    // 获取当前样本的HTML内容并清空缓冲
    $content = ob_get_clean();
    
    try {
        // 为每个样本创建独立的Html2Pdf实例
        $html2pdf = new Html2Pdf('P', 'A4', 'fr');
        $html2pdf->pdf->SetDisplayMode('fullpage');
        $html2pdf->writeHTML($content, isset($_GET['vuehtml']));
        // 输出独立PDF文件,文件名包含样本ID
        // 若需直接下载可移除第二个参数'F';若需保存到服务器则保留(需确保目录有写入权限)
        $html2pdf->Output("{$tablename}-{$idEcht}-Report.pdf", 'F');
    } catch (Html2PdfException $e) {
        $formatter = new ExceptionFormatter($e);
        echo $formatter->getHtmlMessage();
        exit;
    }
}
?>

关键修改说明:

  • 输出缓冲本地化:将ob_start()和ob_get_clean()移到样本循环内部,确保每个样本的HTML内容被单独捕获,不会累积合并。
  • 循环逻辑简化:直接遍历查询到的每个样本ID,避免了未定义变量$i的问题,逻辑更清晰。
  • 数据库查询修正:每个样本单独查询对应患者信息,不再错误拼接多个ID,确保查询条件精准匹配单个样本。
  • 独立实例创建:在循环内部新建Html2Pdf实例,保证每个PDF的生成环境独立,不会互相干扰。
  • 异常处理规范:使用正确的Html2PdfException异常类,并通过官方提供的ExceptionFormatter格式化错误信息。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 17:10:27