Generar PDF dinámicos
En la empresa en la que trabajo tenemos un catálogo de más de 1000 productos vendibles que tienen su descripción, fotos, especificaciones, etc. Toda esta información está almacenada en bases de datos, hojas de cálculo y demás soportes y hasta ahora el proceso de generación de las fichas comerciales de los productos era realizada a mano por una persona del departamento de diseño.
Pues bien, ya que la información está disponible desde varias fuentes a las que se puede acceder por medio de un script PHP, me han encargado la tarea de automatizar el proceso.
Librerías de generación de PDFs en PHP
En la búsqueda de librerías de generación de PDFs dinámicos he encontrado las siguientes opciones:
Se trata de una librería de pago con bindeos para muchos lenguajes de programación que permite componer los PDFs objeto a objeto. Está perfectamente integrada en PHP y ofrece dos versiones, dependiendo de si trabajamos con PHP4 o PHP5 orientado a objetos.
También tiene una versión PDFLib Lite que es gratuita y tiene casi todo lo necesario.
Esta es una versión libre, más limitada y lenta que la anterior. En este caso no podremos utilizar las funciones incorporadas en PHP sino que usaremos métodos de una clase desarrollada "a pelo" para generar nuestros PDFs. Sin embargo, la filosofía detrás de esta librería es la misma que en PDFLib.
Igual que la anterior, pero parece aun más limitada.
Esta librería es un wrapper que utilizará como backend de generación PDFLib, R&OS CPDF o GD para contruir los PDFs. Es un misterio para mi cómo hacen para generar PDFs con GD, pero sospecho que generan una "foto" de cada página y se lo enchufan a un fichero con formato PDF de alguna manera.
Conclusión
Si no me quedara más remedio que construir a mano los PDFs en PHP seguramente usaría DOMPDF o PDFLib Lite. Sin embargo, creo que la mejor opción es la que voy a describir a continuación:
SVG: La alternativa que gusta a pequeños y mayores
SVG: Scalable Vector Graphics. Se trata de un lenguage de marcado creado por la W3C para contener dibujos vectoriales. Se supone que será uno de los standards para ficheros de dibujo vectorial más usados en los próximos años.
La estructura de un SVG es la de un XML. Cada etiqueta define propiedades del documento y objetos como bloques de texto, párrafos, imágenes, formas, etc.
Este formato gustará a todos y todas porque las personas responsables del diseño podrán utilizar magnificas aplicaciones de diseño vectorial como Inkscape en las que podrán dar rienda suelta a su creatividad y nosotros, los encargados de rellenar de contenido sus diseños, podremos utilizar sencillas funciones de reemplazo de texto para tratar el contenido XML del fichero SVG y "producir" un documento final. El programador más habilidoso podrá incluso utilizar sus funciones preferidas de modificación del árbol DOM de XML para trabajar con el documento e incluso crear objetos on-the-fly.
Una vez creado un SVG final, podemos usar una infinidad de aplicaciones para convertir el SVG en PDF (o en el formato que nos dé literalmente la gana). El propio Inkscape permite ser ejecutado en línea de comandos y de la siguiente manera conseguiremos un radiante PDF:
$ inkscape -A documento.pdf documento.svg
Para más info hacer un 'man inkscape'. El programa permite definir parámetros de exportación de las imágenes del documento para definir sus DPIs, por ejemplo.
