Я обновляю приложение, используя старую версию fPDF, до последней версии 8 mPDF.
Мой вопрос заключается в том, как уменьшить обсуждаемую медленность с помощью таблиц HTML в mPDF.
В текущем коде fPDF используется метод Cell , и файл PDF создается менее чем за секунду. Для сравнения: при написании некоторого простого HTML для использования в mPDF аналогичный PDF-файл генерируется примерно за 12-15 секунд.
В моем тестировании используется около 3500 записей, но для некоторых результатов это может легко привести к записи 10 тыс. *. 1009 *
Загрузка
Я загружаю объект mpdf следующим образом;
$mpdf = new \Mpdf\Mpdf(array(
"tempDir" => "/tmp/pdf",
"mode" => "utf-8",
"format" => "Letter-P",
"margin_left" => "10",
"margin_top" => "10",
"margin_right" => "10",
"margin_bottom" => "10"
));
$mpdf->WriteHTML(file_get_contents("css/pdf.css"), \Mpdf\HTMLParserMode::HEADER_CSS);
$mpdf->simpleTables = true;
Мой css / pdf. css file
.cdrTable {
width: 25cm;
}
.cdrTable td {
text-align: center;
}
Writing
Я сохранил HTML как можно более простым, чтобы предотвратить любые проблемы с автоматическим изменением размера.
Сохраните это html в переменной и запишите один раз, используя $ mpdf-> Write HTML ($ html);
<h2>Results for this run</h2>
<p><strong>Sources are:</strong>
[pbx] From PBX
[sdc] From DC
</p>
Сохраните таблицу из 50 записей и запишите один раз, используя $ mpdf-> Write HTML ($ html);
<table class='cdrTable'>
<tr>
<th>#</th>
<th>Call Started</th>
<th>Call From</th>
<th>Call To</th>
<th>Duration</th>
<th>Ext</th>
<th>Ext Label</th>
<th>Data Src</th>
</tr>
<tr>
<td>1</td>
<td>02-07-2020 04:52:39 PM</td>
<td>Polycom VVX601 [11]</td>
<td>Conference [86]</td>
<td>0:13</td>
<td>101</td>
<td>My Phone</td>
<td>pbx</td>
</tr>
.. Up to 50 records ..
</table>
Сохраните html в переменной и запишите один раз, используя $ mpdf-> Write HTML ($ html);
<table>
<tr>
<td>3555 records matched</td>
<td>Total: 1965:11</td>
</tr>
</table>
Наконец
$ mpdf-> Output ("report") .pdf ", \ Mpdf \ Output \ Destination :: DOWNLOAD);
Заключение
Вывод этого в браузер происходит быстро; Peak Mem: 6,82 M, время: 0,055243015289307
Создание PDF не так быстро; Пиковая память: 14,52 М, время: 13,560908079147
Я попытался записать 100, 200, 1000 и весь набор результатов одновременно без большой разницы во времени.
Могу ли я что-нибудь сделать чтобы сделать это быстрее?
Должен ли я использовать что-то кроме HTML таблиц или пропустить вообще с помощью HTML?