2016-10-10 7 views
0

Как я могу получить ход dompdf. У меня много html, которое преобразуется в pdf, используя dompdf. Поскольку HTML много, требуется некоторое время, поэтому я хочу знать, можно ли его получить и показать его пользователю.DomPdf pdf progress progress

Edit:

По предложению я решил использовать блесну. Но мне нужно знать, когда файл получен пользователем. Я использую этот код для генерации PDF, который копируется из here:

$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-файл загружается и отображается в разделе «Загрузка».

Редактировать 2: Теперь я пытаюсь обрабатывать загрузку с помощью ajax. Я получаю данные, и я могу видеть это, когда я делаю console.log(), но как получить файл для сохранения в загрузках пользователей? Thanks

ответ

0

В настоящее время Dompdf не поддерживает средства представления информации о своем развитии. В то же время лучше всего использовать счетчик, чтобы пользователь знал, что процесс генерации PDF-файлов продолжается.

Если вы отправляете PDF в качестве вложения, вы не можете знать, когда пользователь получает его, так как не запускается событие. С другой стороны, использование чистого AJAX сложнее и зависит от браузера, поскольку для этого требуется определенная функциональность HTML5.

Вы можете использовать сочетание двух методов с помощью AJAX для запуска рендеринга PDF, сохранения PDF-файла, сгенерированного dompdf, в файловую систему сервера, возврата имени файла клиенту и, наконец, перенаправления на файл в обратном вызове 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

Thats отличная идея. Я начал делать то, что мне просто нужно знать, когда останавливать счетчик. Есть ли способ узнать, получен ли файл? – user3552551

+0

Можете ли вы описать поток? Что вызывает рендер? Кто получает файл и как? – BrianS

+0

Хорошо, я отредактирую вопрос – user3552551