TCPDF - Как сделать печать быстрее? Это очень очень медленно, 1320 записей заняли 40 минут - PullRequest
4 голосов
/ 18 ноября 2011

Используя Zend Framework и TCPDF, для печати Test.pdf требуется 40 минут. Теперь я понятия не имею, как сократить это ненормальное время до чего-то нормального?

set_time_limit(0);
$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
$pdf->SetHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE, PDF_HEADER_STRING);
$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN));
$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA));
$pdf->SetDefaultMonospacedFont(PDF_FONT_MONOSPACED);
$pdf->SetMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT);
$pdf->SetHeaderMargin(PDF_MARGIN_HEADER);
$pdf->SetFooterMargin(PDF_MARGIN_FOOTER);
$pdf->SetAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM);
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
$pdf->setLanguageArray($l);
$pdf->setFontSubsetting(true);
$pdf->SetFont('dejavusans', '', 8, '', true);
$pdf->AddPage();
/* Database mysql gives the records and it is wrapped with <table> */
$html = "<table>1310 records.... with some simple <tr><td></td></tr></table>";
$pdf->writeHTMLCell($w=0, $h=0, $x='', $y='', $html, $border=0, $ln=1, $fill=0, $reseth=true, $align='', $autopadding=true);
$pdf->Output('Test.pdf', 'I');
exit;

Продолжение: (настройка исполнения)

1) php.ini: memory_limit = 512M max_execution_time = 0

2) Кодирование $ Pdf-> setFontSubsetting (ложь); // true to false

3) Отладка показывает, следит за все время

$ pdf-> writeHTMLCell ($ w = 0, $ h = 0, $ x = '', $ y = '', $ html, $ border = 0, $ ln = 1, $ fill = 0, $ reseth = true, $ align = '', $ autopadding = true);

Ответы [ 3 ]

6 голосов
/ 20 ноября 2011

Поскольку других ответов не последовало, я очень рекомендую посмотреть на MPDF (GPL), поскольку он намного быстрее, чем TCPDF. У меня были операции на одном сервере, которые заняли около трех минут с использованием TCPDF, а с MPDF сократились до секунд. Я бы только предположил, что какой-то формат моего HTML -> PDF поражал какую-то неэффективную функцию в TCPDF.

В любом случае я представляю следующий код, который помог мне конвертировать HTML -> PDF.

$mpdf = new mPDF('c');
$mpdf->setDisplayMode('fullpage');
$stylesheet = file_get_contents('css/core.css');
$mpdf->WriteHTML($stylesheet,1);
$html = "<table>1310 records.... with some simple <tr><td></td></tr></table>";
$mpdf->WriteHTML($html); 
$mpdf->Output(standardize(ampersand('filename', false)) . '.pdf', 'D');

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

1 голос
/ 06 сентября 2012

Мы используем mpdf главным образом потому, что я могу просто «включить» его без установки. Был некоторый незначительный трюк, который нужно было добавить в php.ini, я думаю, mbstring.

Мне удалось получить от 75 страниц в минуту до 100 страниц в минуту, сжимая HTML-код, который я кормил глаголом WriteHTML. У нас нет никакой графики.

Затем я использую ghostscript для сортировки и отслеживания PDF-файлов (примерно 15 страниц) на человека, получающего их. Этот процесс занимает около 3 минут на 800-1000 страниц для 50 или 60 человек, получающих отчет в одном месте назначения.

Все это на ящике, в основном сидящем там ни за что.

0 голосов
/ 15 февраля 2018

Одной из причин низкой производительности TCPDF могут быть изображения, вставленные из внешних URL-адресов.Разрешение DNS и загрузка файлов занимают время и замедляют процесс создания PDF.

...