DomPdf pdf创建进度


DomPdf pdf creation progress

如何获得dompdf的进度?我有很多html被转换成pdf使用dompdf。因为HTML很长,所以需要一段时间,所以我想知道是否有可能获得进度并将其显示给用户。

编辑:

根据建议,我决定使用旋转器。但是我需要知道用户什么时候收到文件。我用这段代码来生成从这里复制的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()时,我可以看到它,但是我如何获得要保存在用户下载中的文件??由于

Dompdf目前不支持报告其进度的方法。在此期间,您最好的选择可能是使用旋转器让用户知道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来完成这一切,这当然是可能的,并且已经存在许多相关的问题。