digitorum.ru

Как меня найти

Профиль

icq: 4415944

HTML 2 PDF: php libs (fpdf,tcpdf,mpdf,html2pdf,dompdf)

pdf, php

Есть простая задачка: сконвертировать html страничку в pdf файл.

На страничке имеем:

  • css
  • изображения
  • бэкграунды (как цвет, так и изображение)
  • абсолютно позицианировыанный блок

Буду тестировать библиотеки:

fpdf тестировать не буду, но упомянуть о ней стоит обязательно.

FPDF v1.7

FPDF - достаточно мощный инструмент для формирования pdf файлов. НО! Без лишних телодвижений нельзя просто так взять и сконвертировать html в pdf с помощью fpdf.

Для этого нужно писать некий парсер html, и делать я этого не хочу, так как это приведет к появлению библиотеки diFPDF . Как вы уже догадались - на базе FPDF построены другие библиотеки, но об этом ниже.

TCPDF 6.0.020

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 5.6

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 v4.03

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 0.6.0 beta 3

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();
		
	}
	
?>

 

Результат - все на месте, все правильно.

На сегодня все

Возможно будет интересно: