Personalizar los PDF de factura en Prestashop 1.5


Prestashop nos ofrece ya integrado en su base un sistema para generar facturas en pdf. La generación de pdfs se hace con la librería TCPDF. Y en las últimas versiones además se ha facilitado la personalización de estas facturas, ya que tienen sus propios templates en smarty, como cualquier parte de la web.


En el directorio classes/pdf están las clases encargadas de cargar los datos que usan las plantillas de generación de pdf.

Uno de los cambios que podríamos realizar es limitar el tamaño del logo de la empresa. Si para la web lo tenemos bastante grande, quedará enorme en la factura. Podríamos dar un tamaño a mano en el tpl, pero necesitaríamos cambiarlo cada vez que cambiemos la imagen. Si queremos dar unos máximos, y que la imagen mantenga la proporcionalidad, la forma más sencilla es:

En el archivo HTMLTemplate.php, debajo de la línea 50, cuando ya se ha cargado la imagen y antes de asignar los valores a las variables de smarty, añadir:

if ($width>200 || $height > 100){
   $pw=$width/200;
   $ph=$height/100;
   if ($pw>$ph){
     $width=200;
     $height=$height/$pw;
   }else{
     $height=100;
     $width=$width/$ph;
   }
}

donde estamos limitando el tamaño a un máximo de 200 de ancho y 100 de alto, siempre manteniendo proporcionalidad.

En el directorio pdf en la raíz de prestashop, están las plantillas para las facturas. Hay plantillas para más cosas, como devoluciones o envíos. Todas ellas comparten la cabecera y el pie, en los ficheros header.tpl y footer.tpl. Son ficheros de plantilla smarty, por lo que es análogo a realizar cualquier modificación en la web. Al no usarse estas plantillas para nada que se le envíe al cliente en formato web, lo de usar separación de html y css me parece innecesario, así que al menos yo meto los cambios como parte del atributo style de cada etiqueta. Para cambiar el contenido de la factura, es el fichero invoice.tpl. Aunque utiliza alguna plantilla más, por ejemplo invoice-tax.tpl para la tabla donde se detalla el tipo de impuesto de cada producto, la llamada se hace con una orden {$tax-tab}, por lo que si no queremos la tabla, con comentar esa llamada en invoice.tpl sería suficiente.

Puede surgir un problema con las rutas de las imágenes. El generador de pdf no las coge sobre nombre de dominio, es decir algo como “www.midominio.com/img/mi-logo.jpg” no funcionará. Funciona con rutas locales, pero los pdfs se pueden generar desde distintas rutas (por ejemplo al volver de un pago en paypal se hace desde /paypal, por lo que puede no funcionar siempre. Usando / como raíz del servidor web tampoco funciona, así que hay que usar la siguiente variable:

{$smarty.server.DOCUMENT_ROOT}

y un ejemplo de ruta podría ser:

{$smarty.server.DOCUMENT_ROOT}/img/mi-logo.jpg

Con estas plantillas y las clases podemos hacer cambios de forma sencilla en los pdf de factura. Mucho mejor que como se hacía en versiones anteriores de prestashop (yo estas pruebas las he hecho sobre la versión 1.5.3).

Siempre hay que recomendar que si vamos a hacer algún cambio en serio lo hagamos mediante overrides y no directamente en el núcleo para evitar disgustos con actualizaciones.