The best way by far is wkhtmltopdf, because it uses webkit to render the page. Most other open source projects use a toy HTML renderer, which is not going to work for in-the-wild webpages.
Thanks for that link. Right now I'm doing something similar using a modified version of webkit2png.py that outputs into PDF instead. I'll have to check this out.
This is actually the only reason we're still running a ColdFusion server. About once every 6 months I look at the options out there, but until the FSF gets the momentum going behind GNU PDF (http://www.fsf.org/campaigns/priority-projects/), I think CFM'll still rule the roost.
I did something similar to this some time ago. There is software that will convert from html to postscript (html2ps), and then there is the ps2pdf project which will convert the postscript to a pdf file.
I had success with this approach, though I had to tune my html and a number of ghostscript settings to get it to produce exactly the output that I wanted.