mPDF 版本 7 进度条解决方法

mPDF version 7 Progress bar workaround

提问人:Ramiro Maldonado 提问时间:7/16/2022 最后编辑:Ramiro Maldonado 更新时间:7/16/2022 访问量:206

问:

我将 mPDF 升级到版本 7,并注意到删除了进度条功能。

我正在寻找一些简单的东西:在 mPDF 处理输出文件时向用户显示一些 html 信息(即“正在处理文件...”)。

这是代码的简化版本,它工作正常:

$mpdf = new Mpdf();

$html_for_pdf = "<p>Hi, this is the html content to render the PDF file</p>";

$mpdf->WriteHTML( $html_for_pdf );
$mpdf->Output();

为了得到我想要的东西,到目前为止,我尝试了:

a) 回显“正在处理文件...”html 信息到屏幕,但是(由于我猜是缓冲)在处理过程中没有任何显示,直到输出的 PDF 文件最终出现。我尝试的代码是这样的:

$mpdf = new Mpdf();

$html_for_pdf = "<p>Hi, this is the html content to render the PDF file</p>";

$html_processing = "<p>Processing file...</p>";
echo $html_processing;

$mpdf->WriteHTML( $html_for_pdf );
$mpdf->Output();

b) 使用 ob_flush() 处理输出缓冲,这显示“正在处理文件...”html,但 mPDF 文件渲染中断,输出文件显示。我尝试的代码是这样的:

$mpdf = new Mpdf();

$html_for_pdf = "<p>Hi, this is the html content to render the PDF file</p>";

$html_processing = "<p>Processing file...</p>";
echo $html_processing;
ob_end_flush();
ob_flush();
flush();
ob_start();

$mpdf->WriteHTML( $html_for_pdf );
$mpdf->Output();

我用谷歌搜索了很多,以获得任何解决方法,但没有任何运气。

有没有机会做到这一点?

谢谢!

php progress-bar mpdf 输出缓冲

评论


答:

1赞 Finwe 7/16/2022 #1

在同一文档的 PDF 生成过程中尝试执行此操作没有多大意义。

甚至 mPDF 6.x 中的 ProgressBar 也使用 javascript 更新了信息。

最简单的方法是使用“Ajax”在单独的请求中处理 HTML。发送请求的任何选项都是可能的,Fetch API、XMLHttpRequest、jQuery.ajax()...

然后,您将使用 javascript 更新原始 HTML 文档的内容:

  • 在发送请求时,您将设置“正在处理文件...”发短信
  • 在请求完成时,您可以将此文本更改为链接到 生成的 PDF,或将 PDF 直接发送给用户下载。

使用 Fetch API 的简化示例:

<script>
    
// this code would be executed on a link click or form submit
document.getElementById('status').innerText = 'Processing file...';
fetch('http://example.com/pdf.php')
  .then((response) => {
    // check response.ok
    document.getElementById('status').innerText = 'File processed';
    // handle contents of the document
  })
    
</script>

评论

0赞 Ramiro Maldonado 7/17/2022
感谢您的输入@Finwe。我知道我可以按照你的建议走。我已经在我的一些应用程序上实现了类似的东西,在某些情况下包括非常详细的进度信息。问题是我有一个依赖于 mPDF v6.x 进度条方法的整个应用程序,并且在全球范围内更改它,就像您的建议一样,这需要我没有的时间。这就是为什么我正在寻找一些解决方法。无论如何,谢谢!