2016-10-10 132 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