Я использую библиотеку mPDF для генерации документов PDF непосредственно из вывода HTML.Проблема в том, что эта библиотека mPDF написана как есть и генерирует десятки уведомлений (неопределенный индекс, неопределенное смещение и т. Д.).Я пытался что-нибудь остановить, чтобы вывести их, но пока ничего не помогло.
Я пытался поместить error_reporting(E_ALL ^ E_NOTICE);
, а также error_reporting(E_ALL & ~E_NOTICE);
, который я вставил в мой index.php, в класс и метод, который напрямую включает mpdf.php, а также в начале mpdf.php.Я также пробовал сочетания с ini_set('display_errors', 0);
- все эти директивы работают для всего веб-приложения, но для mpdf.Поэтому даже когда PDF может быть правильно сформирован и действителен, я не могу вывести его (пусть пользователь загрузит его).
Также проблема возникает с моим HTML (простая таблица, действительно ничего особенного), в то время как примеры работают нормально ибез уведомлений.
Так что помощь, которая мне понадобится: либо избавьтесь от уведомлений, либо лучше помогите мне выяснить, почему mPDF не работает для меня.
Если я использую этот код:
include_once(DIR_MPDF.'mpdf.php');
$mpdf = new mPDF();
$mpdf->useOnlyCoreFonts = true;
$mpdf->SetDisplayMode('fullpage');
$mpdf->SetAutoFont(0);
$mpdf->WriteHTML('<table><tr><td>HELLO WORLD</td></tr></table>');
$mpdf->Output();
exit;
все работает хорошо, но если я пытаюсь вывести этот HTML-код:
$mpdf->WriteHTML('<table><tr><td>HELLO WORLD</td><td>HELLO WORLD</td></tr></table>');
Я получаю уведомления, и поэтому PDF не может быть выведен.
Если я сохранювывод из mPDF в файл (с использованием, например, file_put_contents()
), PDF является действительным и, следовательно, читаемым, даже если я использую сложный HTML - но все же Уведомления печатаются в браузере.В любом случае мне нужно, чтобы PDF-файл предлагался для загрузки, а не сохранялся в файловой системе.
Хорошо, я нашел одно решение, хотя это не лучшая практика (но оно работает): я заключаю код с ob_start();
и ob_end_clean();
при обнаружении строки $ pdf, которую я выводил вместо mPDF.
Окончательный код:
ob_start();
include(DIR_MPDF.'mpdf.php');
$html = $this->render(TRUE);
$mpdf = new mPDF('utf-8','A4');
$mpdf->useOnlyCoreFonts = true;
$mpdf->SetDisplayMode('fullpage');
$mpdf->SetAutoFont(0);
$stylesheet = file_get_contents(DIR_APPLICATION.'view/stylesheet/declaration.css');
$mpdf->WriteHTML($stylesheet,1);
$mpdf->WriteHTML($html);
$pdf = $mpdf->Output('', 'S');
$ob = ob_get_contents();
ob_end_clean();
if (headers_sent())
die('Some data has already been output to browser, can\'t send PDF file');
header('Content-Description: File Transfer');
header('Content-Transfer-Encoding: binary');
header('Cache-Control: public, must-revalidate, max-age=0');
header('Pragma: public');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Content-Type: application/force-download');
header('Content-Type: application/octet-stream', false);
header('Content-Type: application/download', false);
header('Content-Type: application/pdf', false);
if (!isset($_SERVER['HTTP_ACCEPT_ENCODING']) OR empty($_SERVER['HTTP_ACCEPT_ENCODING'])) {
header('Content-Length: '.strlen($pdf));
}
header('Content-disposition: attachment; filename="invoice.pdf"');
echo $pdf;
exit;