El otro día me encontré con un problema al generar un PDF de factura en Prestashop. La pantalla se quedaba en blanco y tardaba mucho en generarlo, llegando al punto de que daba un error y no se llegaba a generar.

prestashop

Revisando errores en el Log

Activando el modo debug de Prestashop pude determinar el error que estaba sucediendo.

Fatal error: Uncaught exception 'ImagickException' with message 'unable to open image `/httpdocs/cache/tcpdf/mska_fb834670e9598553dc57a74c3995df8e': No such file or directory' in /httpdocs/tools/tcpdf/tcpdf.php:8613 Stack trace: #0 /httpdocs/tools/tcpdf/tcpdf.php(8613): Imagick->writeimage('/var/www/vhosts...') #1 /httpdocs/tools/tcpdf/tcpdf.php(8073): TCPDF->ImagePngAlpha('/var/www/vhosts...', 10.980722222222, -13.069277777778, 283, 61, 94.01935, 20.265654946996, 'PNG', '', 'B', false, 300, '', 'fb834670e959855...') #2 /httpdocs/tools/tcpdf/tcpdf.php(23813): TCPDF->Image('/var/www/vhosts...', 10.980722222222, -13.069277777778, 99.836111111111, 21.519444444444, '', '', 'B', false, 300, '', false, false, 0, false, false, true) #3 /httpdocs/tools/tcpdf/tcpdf.php(23209): TCPDF->openHTMLTagHandler(Array, 2, true) #4 /httpdocs/tools/tcpdf/tcpdf.php on line 8613

Sino, desde el servidor en los logs de Apache se ve también:

Logs Apache Prestashop error 500 PDF facturas

Este primer error que obtuve me indicaba, tras comprobar las carpetas en el servidor, que la carpeta /cache/tcpdf no existía en mi servidor. La creé, le dí permisos 777 para que pudiera escribir, y volví a probar el pdf de la factura. Realmente, tras pruebas posteriores, esta carpeta no es necesario que exista ya que la carpeta cache tiene permiso de escritura y borrado y la creará y borrará cuando se genere la factura. Por lo que no es necesario que exista permanentemente.

Ampliar memoria del servidor

El error que obtuve tras esta segunda prueba fue de memoria:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 51789 bytes) in /httpdocs/tools/tcpdf/tcpdf.php on line 8079

A partir de aquí, inicié muchas líneas de investigación:

  • Amplié la memoria del servidor, modificando la variable max_limit del php.ini a 256mb
  • Amplié el tiempo máximo de ejecución a 60 segundos

Actualizar la versión de TCPDF

Pero eso no era suficiente, seguía sin generarse. Por lo que actualicé la versión de TCPDF, ya que uno de los problemas que vi que ocurría es que la carpeta cache/tcpdf se llenaba de miles de archivos de pocos kb de tamaño llegando a ocupar 1.6Gb de espacio del servidor. Cogí la carpeta tools/tcpdf de una versión más antigua de prestashop en la que sí me funcionaba (v1.5.2.0) y la reemplacé en mi prestashop 1.5.3.1 que era donde me daba problemas, y tampoco se solucionaba el problema.

Otra vía de investigación que tomé fue descargarme la web completa en mi PC e instalarlo en Xampp y ver qué ocurría. Tras probar, los pdfs se generaban correctamente y en pocos segundos. El problema parecía estar en el servidor ya que en local no conseguía reproducirlo, ya que funcionaba correctamente. Pero no conseguía dar con la solución en el servidor.

Solución para generar la factura en Prestashop

Al final, investigando mucho, encontré en el foro de Prestashop que alguién averiguó que el problema estaba en el logo de la web. Un poco extraño, pero sí. Si el logo de las facturas está en PNG sucede este problema. Lo subí de nuevo en JPG y el problema desapareció. Las facturas se generaban correctamente en PDF. Aun así, sigo pensando de que en el servidor ha ocurrido algún cambio que desconozco, ya que mi cliente genera todas las facturas de sus pedidos al finalizar el trimestre para la declaración del IVA y hasta ahora no había tenido problemas.

Pero bueno, misterio resuelto, y a seguir vendiendo con Prestashop ;).

Conclusiones

Así que si os sucede algo similiar, ya sabéis que una de estas cosas puede resolver vuestro problema. Resumo:

  • Ampliar la memoria del servidor
  • Ampliar el tiempo máximo de ejecución
  • Actualizar la versión de TCPDF
  • Cambiar el logo de las facturas por uno que esté en JPG

Espero que os haya servido y no se os convierta este problema en un expediente x como me pasó a mí.

Guardar

Guardar

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies