HTML a PDF desde PHP

Si queremos añadir una funcionalidad a nuestra aplicación PHP para pasar HTML a PDF, tenemos bibliotecas y programas opensource para conseguirlo.

Sin embargo, ninguna solución es inmediata dado que en cada caso debemos tener en cuenta una consideración diferente: el subconjunto de HTML a usar, las limitaciones en la conservación del formato, el modo de instalación...

Éstas son todas las opciones que he probado, de las que me quedo con WKHTMLTOPDF:

Bibliotecas PHP

1. HTML2(F)PDF: En párrafos que intercalen diferentes formatos (texto en negrita, en color…) se producen saltos de línea al comienzo de cada cambio de formato. Además, la justificación de texto no se hace correctamente. A pesar de haber una solución para la justificación, en cuanto se combinan formatos, aparece un nuevo problema: el texto con formato se solapa sobre el que no tiene. Todo esto ocurre porque el analizador sintáctico separa cada texto entre etiquetas HTML para tratarlo como un bloque independiente.
Por otra parte, el código HTML necesario para su correcta impresión en PDF es muy diferente al que usaríamos para mostrarlo en un navegador. Se pueden interpretar todas las etiquetas, incluso el uso de CSS o Javascript, sin embargo, en necesario abusar de márgenes y paddings negativos para encontrar el espaciado deseado.

2. DOMPDF: En este caso, la impresión a PDF es bastante más fiel. La implementación del método para la justificación de texto es mejor que en el caso anterior ya que considera que cada carácter ocupa un ancho diferente, la solución es solo aproximada. Por otra parte, al igual que en la biblioteca anterior, debemos hacer ajustes en los márgenes y paddings para conseguir el espaciado que buscamos. 
Por último, está mejor documentada que el caso anterior.

3. HTML-ToPDF: Depende del programa html2ps y tiene como inconveniente que no interpreta CSS.

Servidor de impresión

CUPS-PDF: Esta solución no nos conviene dado que no se hace interpretación de código HTML, por lo que la impresión muestra tanto las etiquetas como el texto como si de un fichero de texto plano se tratase.

Programa externo

WKHTMLTOPDF: Esta aplicación ejecutable desde consola, imprime en PDF una web exactamente con el mismo formato que un navegador (comparado con Firefox 3.6.13 y Chrome 8.0.552.237). Sin embargo, como inconveniente, su instalación no es tan inmediata como en los casos anteriores. Compilemos el código fuente o descarguemos el binario, el programa depende de librerías de enlace dinámico. En Ubuntu son: libxrender1, libfontconfig1 y libxext6. Asunto que queda resuelto tanto en la versión Server como Desktop a partir de la 8.04 e instalando con el comando apt-get install nombre_de_la_biblioteca.