DomPdf pdf创作进度

时间:2016-10-10 16:03:04

标签: php ajax dompdf

我如何获得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()时可以看到它但是如何将文件保存在用户下载中? 感谢

1 个答案:

答案 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