2016-10-10 122 views
0

我怎样才能获得dompdf的进展。我有很多使用dompdf转换为pdf格式的html。由于HTML很多,需要一段时间,所以我想知道是否有可能获得进展并将其显示给用户。DomPdf pdf创建进度

编辑:

根据建议,我决定使用微调。但我需要知道用户何时收到文件。 我使用这个代码,以生成其从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

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了。

+0

这是一个好主意。我已经开始这样做了,我只需要知道什么时候停止微调。有没有办法知道是否收到了一个文件? – user3552551

+0

你能描述一下流程吗?什么触发渲染?谁在收到该文件以及如何? – BrianS

+0

好的,我会编辑这个问题 – user3552551