2016-06-06 2 views
-4

Мне нужно создать 270 PDF и использовать DOMPDF. Проблема в том, что после генерации 20 PDF я получаю внутреннюю ошибку сервера. Я также установил ограничение по времени на ноль. Что было бы лучшим способом генерации большого количества PDF-файлов?Создайте сотни PDF

+0

Возможно, по одному за раз? –

+0

@MarkBaker я создаю pdf в то время как .. и в таблицу есть 270 записей – Eliana

+1

Код состояния «Внутренняя ошибка сервера» (или пустая страница) означает, что ваш скрипт выдает ошибку, но вы не настроили PHP на отображать сообщения об ошибках. Это то, что вам нужно адресовать, прежде чем идти дальше, потому что сложно правильно закодировать без помощи сообщений об ошибках. Правило большого количества сообщений об ошибках должно отображаться при разработке и входе в систему. В качестве отправной точки я предлагаю вам отредактировать общесистемный файл 'php.ini' на компьютере, на котором вы разрабатываете и настраиваете директивы' error_reporting' и 'display_errors' ([подробнее здесь] (http://stackoverflow.com/ а/5680885/13508)). –

ответ

1

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

Синтаксис прост, как может быть:

wkhtmltopdf http://google.com google.pdf 

Это позволит сделать PDF из Google домашней страницы.

+0

Стоит отметить, что wkhtmltopdf запускает фактический (безголовый) браузер, поэтому он не является ни легким, ни особенно быстрым. Это не может быть хорошей альтернативой пакетной обработке, особенно. если работа не связана с сложными макетами. –

+0

Уверен, что это действительно зависит от данных, которые нужно преобразовать. Сложные макеты могут выглядеть не очень хорошо. Вы также можете использовать 'tcpdf' для ручной компоновки страниц. Таким образом, вы получаете больше энергии за конечный результат, но также требуется немного больше усилий для создания/кодирования. Это может быть и быстрее, если у вас есть приложение для проверки работоспособности. – cb0

+0

@ cb0 Я генерирую вывод динамически ... поэтому у меня есть переменная $ output = "my html", и мне нужно сохранить pdf в папку. В этом случае я могу это: wkhtmltopdf $ output /folder/mypdf.pdf или нет? – Eliana

2

Чтобы создать большое количество документов с использованием Dompdf, я создавал внешний процесс для каждого рендеринга. Это может быть как более быстрым, так и менее ресурсоемким (а именно, с использованием памяти) [ref].

шаги, которые я использовал в прошлом для подобной задачи были:

  1. Сформировать каждый HTML-документ для визуализации (возможно сохранить в файл).
  2. Создайте процесс визуализации этого HTML в PDF.
  3. Если HTML был сохранен в файл, удалите HTML.

Так шаг 2 будет что-то вроде этого:

foreach ($htmldocs as $htmldoc) { 
    exec("php dompdf.php $htmldoc"); 
} 

И dompdf.php будет сценарий, который конкретизирует DOMPDF и делает файл HTML.

$dompdf = new Dompdf(); 
$dompdf->load_html_file($argv[1]); 
$dompdf->render(); 
$filename = basename($argv[1], '.html').'.pdf'; 
file_put_contents($filename, $dompdf->output()); 

Информация Bonus: Когда I've done something similar я был на самом деле создает довольно большой документ с легкостью определенных страниц. В качестве четвертого шага в этом процессе я использовал pdftk для объединения предоставленных PDF-документов в один PDF-файл.

$exec_cmd = 'pdftk'; 
for ($html_doc = 1; $html_doc <= count($html_docs); $html_doc++) { 
    $exec_cmd .= ' ' . TEMP_DIR . '/' . $filenames[$html_doc] . '.pdf'; 
} 
$exec_cmd .= ' cat output ' . FILESTORE_DIR . '/' . $packet_gen_info['packet_code'] . '.pdf'; 
exec($exec_cmd, $pdftk_output, $pdftk_return_code); 
Смежные вопросы