I'm not sure if there is anything easier than htmldoc. You can just pass it your HTML and it spits back a PDF document. At this point I think it even supports CSS Styles.
http://www.htmldoc.org/
Here's a little function I wrote awhile back that calls the htmldoc and takes care of headers.
function PrintPDF($data_string) {
if ( !eregi("%PDF-1.3",$data_string) ) {
$tmpfile = tempnam("/var/tmp","PICK");
$tmp = fopen($tmpfile,"w");
fputs($tmp,$data_string);
fclose($tmp);
header("Cache-control: private");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"" . Date("U") . ".pdf\"");
passthru("/usr/bin/htmldoc --footer ... --header ... --size letter --left 10pt --top 10pt --right 10pt --bottom 10pt --fontsize 8.0 -t pdf --jpeg --webpage $tmpfile");
unlink($tmpfile);
} else {
header("Cache-control: private");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"" . Date("U") . ".pdf\"");
echo $data_string;
}
}
The important portion is the passthru command, the rest of it just generates a tmp file to pass to htmldoc and sets the headers up so it downloads correctly.