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.

5 comentarios:

Anónimo dijo...

Perdon por mis palabras pobres en espanyol.

Soy estudianta de informatic-computer master en Egypt.

Encontrar tu web page manejando Google.

Existir solusiones en java platform para habilitar documents in PDF mode. Tu deber haber probado. Lo que escribís resultó muy interesante para cognosimiento general.

Mis congratulas.

Perdon de nuevo por mi poco nivel de espanyol.

Dalida Janu Dubua.

Pail dijo...

Hola Dalida,

Es cierto que existen soluciones Java para este asunto y son verdaderamente potentes. Yo uso JasperReport.

Además, siguiendo con scripts PHP, tenemos la posibilidad de ejecutar cualquier aplicación ejecutable desde consola, como puede ser el caso de una aplicación Java. Con la función exec() de PHP no tenemos ningún problema.

Gracias por la recomendación ;)

Anónimo dijo...

Muchas gracias y perdón por la tardansa en responder.

Muchas remembranzas.

Dalida Janu Dubua.

Anónimo dijo...

Hola, estoy usando esta libreria WKHTMLTOPDF y em esta pasando lo mismo que pasa con HTML2(F)PDF con la justificacion del texto,ejemplo: si tengo todo el texto justificado me sale alineado a la izquierda, que pudiera hacer al respecto?

 Pail dijo...

¿Podrías postear el código HTML que envuelve al texto que quieres ver justificado? Eso ayudaría a ver si hay un problema con los tags o estilos.