我如何获得dompdf的进展。我有很多使用dompdf转换成pdf的html。因为HTML很多,所以需要一段时间,所以我想知道是否可以获得进度并将其显示给用户。
编辑:
根据建议,我决定使用旋转器。但我需要知道用户何时收到该文件。 我使用此代码生成从here复制的pdf:
$dompdf = new Dompdf();
$dompdf->loadHtml('hello world');
// (Optional) Setup the paper size and orientation
$dompdf->setPaper('A4', 'landscape');
// Render the HTML as PDF
$dompdf->render();
// Output the generated PDF to Browser
$dompdf->stream();
当用户按下执行此代码的链接时,将生成pdf。 pdf下载并显示在下载部分。
编辑2:现在我正在尝试使用ajax处理下载。我正在接收数据,当我执行console.log()时可以看到它但是如何将文件保存在用户下载中? 感谢
答案 0 :(得分:0)
Dompdf目前不支持报告其进度的方法。在此期间,您最好的选择可能是使用微调器让用户知道PDF生成正在进行中。
如果您将PDF作为附件发送,则无法确切知道用户何时收到该PDF,因为没有触发任何事件。另一方面,使用纯AJAX更难以依赖浏览器,因为它需要某些HTML5功能。
您可以使用两种方法混合使用AJAX来触发PDF渲染,将dompdf生成的PDF保存到服务器的文件系统,将文件名返回给客户端,最后重定向到AJAX回调中的文件。
假设jQuery + blockUI(对于懒惰的开发者),这是一个简化的例子。
首先是客户端代码:
<script>
$('.pdf').click( function {evt} (
$.blockUI();
$.get('generate_pdf.php', function (data) {
$.unblockUI();
location.href = data;
});
));
</script>
<button class="pdf">Generate PDF</button>
和服务器:
<?php
// require dompdf autoloader, then...
$dompdf = new Dompdf();
$dompdf->loadHtml('hello world');
$dompdf->render();
$filename = sprintf('pdf_%s.pdf', date('ymd'));
file_put_contents($filename, $dompdf->output());
echo $filename;
?>
您需要制作符合您需求的代码。当然,您可以通过构建更多错误处理来使其更加强大。另外,您需要进行某种清理以删除旧文件。
当然,如果你真的想用AJAX做这一切,那肯定是可能的,而且已经有很多relevant questions。