Есть простая задачка: сконвертировать html страничку в pdf файл.
На страничке имеем:
Буду тестировать библиотеки:
fpdf тестировать не буду, но упомянуть о ней стоит обязательно.
FPDF - достаточно мощный инструмент для формирования pdf файлов. НО! Без лишних телодвижений нельзя просто так взять и сконвертировать html в pdf с помощью fpdf.
Для этого нужно писать некий парсер html, и делать я этого не хочу, так как
это приведет к появлению библиотеки diFPDF . Как вы уже догадались - на
базе FPDF построены другие библиотеки, но об этом ниже.
TCPDF - в фичах заявлено очень много всего интересного (и юникод, и изображения, и javascript). Не буду томить - сразу перейду к примеру использования.
<?php define ('K_PATH_CACHE', $_SERVER['DOCUMENT_ROOT'] . '/tmp/'); require_once("tcpdf/tcpdf.php"); try { $pdf = new TCPDF('P', 'mm', 'A4', true, 'UTF-8', false); $pdf->AddPage(); $pdf->writeHTML(file_get_contents('http://digitorum.ru/files/1688/html2pdf.html'), false, false, true, false, ''); $pdf->Output('tcpdf.pdf', 'I'); } catch (Exception $e) { print $e->getMessage(); } ?>
В результате получаем вот такой pdf. Скажем так - далеко от идеала. Бэкграунд (изображение) потерялся, абсолютное позиционирование то же, табличка уехала за картинку.
mPDF - основан на FPDF и HTML2FPDF (который базируется на FPDF). Разработчики заявляют, что mPDF более "прокачан", поверим им на слово.
<?php define('_MPDF_TEMP_PATH', $_SERVER['DOCUMENT_ROOT'] . '/tmp/'); require_once("MPDF56/mpdf.php"); try { $pdf = new mPDF(); $pdf->writeHTML(file_get_contents('http://digitorum.ru/files/1688/html2pdf.html'), false, true, true); $pdf->Output('mpdf.pdf', 'I'); } catch (Exception $e) { print $e->getMessage(); } ?>
Результат так же не идеален. Так же нет бэкграунда (который картинкой), так же абсолютное позиционирование потеряно. Но выглядит все несколько аккуратнее. Так что да - разработчики не соврали.
HTML2PDF - базируется на FPDF и TCPDF.
<?php require_once('html2pdf_v4.03/html2pdf.class.php'); $html2pdf = new HTML2PDF('P','A4'); $html2pdf->WriteHTML(file_get_contents('http://digitorum.ru/files/1688/html2pdf.html')); $html2pdf->Output('html2pdf.pdf'); ?>
В результате pdf так же с косяками. Все те же проблемы с бэкграундом, абсолютно позиционированная картинка встала на место, но таблица уехала вниз. Обнаружились проблемы с кодировками, то есть придется еще шрифты искать.
DOMPDF - обладает кучей зависимостей от экстеншнов, но, при этом, очень гибкой настройкой, позволяющей эти зависимости обойти. Мы, конечно же, делать этого не будем.
<?php require_once("dompdf/dompdf_config.inc.php"); try { $dompdf = new DOMPDF(); $dompdf->set_paper('A4'); $dompdf->load_html_file('http://digitorum.ru/files/1688/html2pdf.html'); $dompdf->render(); $dompdf->stream("dompdf.pdf"); } catch (Exception $e) { print $e->getMessage(); } ?>
Результат - все на месте, все правильно.
На сегодня все