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

mPDF 7版本进度条功能移除后,如何实现处理中提示?

解决mPDF 7生成PDF时显示“处理中”提示的方案

核心问题是PHP输出缓冲和PDF响应头的冲突——HTTP响应只能返回一种内容类型,直接混合输出HTML提示和PDF会导致格式混乱。正确的做法是用前端异步触发PDF生成,分离提示显示和PDF输出流程:

实现步骤

1. 前端页面:先显示提示,异步请求生成PDF

<!-- 提示元素 -->
<div id="loadingTip" style="padding: 1rem; background: #f5f5f5; display: none;">处理文件中...</div>
<!-- 触发按钮 -->
<button id="createPdfBtn">生成PDF</button>

<script>
document.getElementById('createPdfBtn').addEventListener('click', function() {
    const loadingEl = document.getElementById('loadingTip');
    loadingEl.style.display = 'block';

    // 异步请求PDF生成接口
    fetch('generate_pdf.php')
        .then(res => {
            if (!res.ok) throw new Error('请求失败');
            return res.blob();
        })
        .then(pdfBlob => {
            // 隐藏提示,触发下载
            loadingEl.style.display = 'none';
            const downloadUrl = URL.createObjectURL(pdfBlob);
            const link = document.createElement('a');
            link.href = downloadUrl;
            link.download = 'result.pdf';
            link.click();
            URL.revokeObjectURL(downloadUrl);
        })
        .catch(err => {
            loadingEl.style.display = 'none';
            alert('PDF生成失败:' + err.message);
        });
});
</script>

2. 后端接口(generate_pdf.php):专注生成并输出PDF

<?php
require_once __DIR__ . '/vendor/autoload.php';

// 延长执行时间(如果PDF内容量大)
set_time_limit(0);

// 初始化mPDF并生成内容
$mpdf = new \Mpdf\Mpdf();
$mpdf->WriteHTML('<h1>PDF内容示例</h1><p>这是通过mPDF 7生成的文档</p>');

// 设置PDF响应头,输出二进制内容
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="result.pdf"');
// 用'S'参数获取PDF字符串,直接输出
echo $mpdf->Output('', 'S');
exit;
?>

为什么之前的方案失败?

  • 方案a:直接echo提示后输出PDF,由于PHP缓冲和HTTP响应头的限制,浏览器会等待所有内容输出完成后才解析,导致提示无法提前显示。
  • 方案b:使用ob_flush()强制输出提示,会打乱后续PDF的响应头(先输出了HTML的Content-Type),浏览器无法正确识别PDF格式,导致渲染失败。

异步方案通过两个独立的HTTP请求解决了这个问题:第一个请求返回显示提示的页面,第二个请求专门处理PDF生成和输出,两者互不干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 20:01:07