提问人:Ramiro Maldonado 提问时间:7/16/2022 最后编辑:Ramiro Maldonado 更新时间:7/16/2022 访问量:206
mPDF 版本 7 进度条解决方法
mPDF version 7 Progress bar workaround
问:
我将 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();
我用谷歌搜索了很多,以获得任何解决方法,但没有任何运气。
有没有机会做到这一点?
谢谢!
答:
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 进度条方法的整个应用程序,并且在全球范围内更改它,就像您的建议一样,这需要我没有的时间。这就是为什么我正在寻找一些解决方法。无论如何,谢谢!
评论