Het omzetten van HTML-pagina’s naar een PDF

PDF is toch wel de standaard voor een veelvoud aan digitale communicatie. Zonder een PDF-reader op je computer kom je dan ook niet ver. Het wordt veel gebruikt voor: brochures, flyers, facturen etc.

Het omzetten van een HTML-pagina naar PDF

Er zijn maar weinig programma’s die een HTML-pagina zo goed omzetten naar PDF als wkhtmltopdf. Het programma maakt gebruik van de open-source engine WebKit, welke onder andere wordt gebruikt door de webbrowsers Google Chrome en Safari. In feite is wkhtmltopdf een webbrowser naar PDF.

Dit is onder andere handig voor:

  • Het automatiseren van digitale facturatie. De factuur wordt dynamisch, vanuit een database, gegenereerd naar HTML en omgezet naar PDF.
  • Het dynamisch genereren van brochures. Bijvoorbeeld voor het woningaanbod van een makelaar.

Download wkhtmltopdf

Op de download-pagina van wkhtmltopdf worden er verschillende versies aangeboden. Het is belangrijk dat je een static-versie download. Dit betekent dat je geen andere libaries hoeft te installeren. Ikzelf heb de onderstaande versie gedownload.

wkhtmltopdf-0.10.0_rc2-static-amd64.tar.bz2

Pak het bestand uit en zet deze vervolgens in een geschikte map op je website.

PHP-toepassing

Website: 

Als voorbeeld heb ik het onderstaand PHP-script gemaakt.

<?php

/****************************
 BEGIN CONFIG
****************************/

// path naar het programma wkhtmltopdf
$conf['wkhtmltopdf'] = "/var/www/wkhtmltopdf-amd64";

// argumenten voor het programma wkhtmltopdf
// bijvoorbeeld: --margin-top 50 --margin-bottom 30
// zie: http://code.google.com/p/wkhtmltopdf/w/list
$conf['wkhtmltopdf_arg'] = "";

/****************************
 END CONFIG
****************************/

// controleer url
$pattern = "/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i";
if (!preg_match($pattern, $_REQUEST['url'])) {
	die("Geen geldige URL");
}

// tijdelijk bestand
$output = "/tmp/output.pdf";

// haal de html-pagina op
$html = file_get_contents($_REQUEST['url']);

// haal de titel op
preg_match("/\<title\>(.+)\<\/title\>/is", $html, $matches);

// controleer of we een titel hebben
if (empty($matches[1])) {
	$matches[1] = "output.pdf";
}

// create pdf from html
system($conf['wkhtmltopdf'] . " " . $conf['wkhtmltopdf_arg'] . " " . $_REQUEST['url'] . " " . $output);

// output pdf naar browser
header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=\"" . $matches[1] . ".pdf\"");
readfile($output);

// verwijder pdf
unlink($output);

exit(0);
?>

Mocht je hulp nodig hebben bij de implementatie van wkhtmltopdf neem dan vrijblijvend contact op.