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.
¡Genial! Estaba buscando como limitar el tamaño del logo en las facturas.
Muchas gracias, muy útil.
Vicent Badia
¿Como puede ser que a estas alturas nadie haya subido ya las plantillas retocadas para que todo el mundo las tenga?, este problema del loggotipo enorme lo tenemos todos porque es la misma puñetera plantilla y tenemos que andar editando los html con el riesgo de tocar algo que no es y joder todo… es que vamos.
En mi caso no solo es el logo que se ve muy grande, es que los textos no caben en la horizontal de su recuadro no se si por culpa del logo también y al final se ve fea la factura y mal.
¿Nadie sabe donde se pueden descargar los archivos retocados de las facturas?.
Para el tamaño del logo de las facturas basta con subir una imagen con el tamaño deseado en el apartado de Correos o email (no me acuerdo qué pone) en el mismo sitio dónde pones el logo de tu tienda en el Back Office.
No encuentro el hueco donde debo de meter el código porque dices "línea 50" y yo no tengo enumeradas las líneas, abro los archivos con el bloc de nota y si no me decis la linea anterior para buscarla con el buscador que trae el bloc de notas no se donde tengo que meter el código…
Entre …
if (!empty($path_logo))
list($width, $height) = getimagesize($path_logo);
y …..
$this->smarty->assign(array(
'logo_path' => $path_logo,
'img_ps_dir' => 'http://' . Tools::getMediaServer(_PS_IMG_) . _PS_IMG_,
'img_update_time' => Configuration::get('PS_IMG_UPDATE_TIME'),
'title' => $this->title,
'date' => $this->date,
'shop_name' => $shop_name,
'width_logo' => $width,
'height_logo' => $height
));
Para editar este tipo de ficheros y muchos mas te aconsejo que olvides el bloc de notas, te puede cambiar el formato y joder el fichero, para eso el NotePad ++ es mucho mejor y por ejemplo te numera las lineas. Yo lo tengo asociado al Filezilla y modifico los ficheros al momento.
Buenos días, tengo problemas con algunas plantilla donde no me genera las lineas de los productos, o sea aparece el logo, los datos de la empresa, y abajo el total, pero no me aparecen las lineas con los productos, me podrían ayudar, muchas gracias
Donde se encuentra ese archivo template.php, no doy con él
En el directorio classes/pdf
Desde esta web, y gracias al trabajo desinteresado de este gente, podéis descargar y usar algunas de las plantillas que os ofrecen de manera desinteresada, simplemente sustituyendo los TPL
zecheru.com/prestashop-invoice-templates
Hola, quisiera saber como puedo modificar el PDF de la factura, en donde en el ancabezado de esta dice "factura", y esta cambiarlo por "Comprobante de Pago".
Muchas Gracias.
Saludos.