He usado PhantomJS para generar imágenes png desde páginas web y también puede producir PDF y la calidad es buena. La propiedad se llama captura de pantalla y se describe here. Los formatos admitidos son PNG, JPEG, GIF y PDF.
Cuando se convierten a PDF, los textos de las páginas se conservan como textos.
Después de probar algunas otras bibliotecas o programas, PhantomJS encontró la solución más perfecta. PhantomJS usa WebKit, un motor de diseño y representación real.
Algunos ejemplos están en https://github.com/ariya/phantomjs/wiki/Examples. En la sección Rendering/rasterización se menciona la siguiente secuencia de comandos que le ayuda en el proceso:
rasterize.js rasterizes a web page to image or PDF
PhantomJS QuicStart Guide dice:
Producir salida PDF es posible, por ejemplo, de un artículo de Wikipedia:
phantomjs rasterize.js 'http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes' jakarta.pdf
o cuando se crea de impresora preparada hoja de trucos:
phantomjs rasterize.js http://www.nihilogic.dk/labs/webgl_cheat_sheet/WebGL_Cheat_Sheet.htm webgl.pdf
Probé pdf generación de pocas páginas y si la página sigue las normas, que produce buenos resultados. El texto es seleccionable e imprimible como de alta calidad, pero en algunas páginas el diseño en pdf no es el mismo que en png.A continuación se muestra dos capturas de pantalla que se generan utilizando comandos:
$ phantomjs rasterize.js 'http://windows.microsoft.com/en-US/windows/home' microsoft.png
$ phantomjs rasterize.js 'http://windows.microsoft.com/en-US/windows/home' microsoft.pdf

Probé también http://lab.simurai.com/buttons/. El pdf y png era muy idéntico y debajo hay una muestra de pdf que rasterizó a 5641 px de ancho y recortó una región. Como en el ejemplo de PDF anterior, el texto se puede seleccionar en PDF y, como puede ver, el texto es nítido (¡no hay antialias!).

INSTALACIÓN
Probé primero en instalar la biblioteca Qt y PhantomJS en CentOS5 compilar desde el código fuente, pero no hubo suerte. A continuación, en Ubuntu 11.10 y el proceso fue rápido:
he descargado http://phantomjs.googlecode.com/files/phantomjs-1.7.0-linux-x86_64.tar.bz2 y extrajeron usando
tar -xjvf phantomjs-1.7.0-linux-x86_64.tar.bz2
Y luego copiado PhantomJS ejecutable para dir bin del sistema:
$ cp phantomjs-1.7.0-linux-x86_64/bin/phantomjs /usr/local/bin/phantomjs
y PhantomJS estaba listo correr.
Si el PDF generado no es bueno, puede intentar actualizar Webkit, pero supongo que el resultado debería ser suficiente. El PhantomJS tiene un excelente ciclo de actualización, por lo que los errores se deben corregir en un tiempo razonable.
PhantomJS FAQ también tiene una buena información de posibilidades.
¿Por qué este todavía está cerrado? Cada pregunta causa más "solicite debate, argumentos, encuestas o discusiones extensas" que esto. –
wkhtml2pdf ahora * does * render canvas ... ver wkhtmltopdf.org. Pulgares arriba para wkhtml2pdf ... es simplemente increíble tener un solo ejecutable en lugar de tratar con más de 7000 clases de java de Fop –