La impresión en odoo …

… aspectos técnicos sobre la versión 8 (aunque aplicable a versiones superiores) y otras rarezas.

Dado que me ha tocado medio mantener una instalación odoo (versión 8) he tenido que aprender mucho más de lo que quería sobre cómo imprime. Y no es mal sistema, desde luego, pero me sorprende que una parte tan básica como la obtención de informes impresos quede en manos de un programa de terceros tan peculiar como wkhtmltopdf.

¿ Cómo interactúan ? Pues es simple: odoo crea los informes como páginas web, con hojas de estilo muy concretas, que luego convierte a documentos PDF con la citada herramienta.

La parte de odoo está clara, ¿ no ? Una página HTML es más una declaración de intenciones que un contenido concreto, y crearla desde cualquier lenguaje de programación está chupado. Si además le añadimos un buen puñado de hojas de estilo, que pretenden moldear la presentación del contenido en pantalla, ya hemos resuelto lo principal. Podemos lavarnos las manos con tranquilidad. Oye, que esto he dicho que va centrado; si no es así es cosa del navegador o de cualquier otro menos yo.

Bien, quedan detalles adaptativos como por ejemplo los saltos de página arbitrarios y las cifras que cambian con ellos (subtotales los llamábamos), pero si los consideramos vestigios podemos más o menos ignorarlos o, en el mejor de los casos, hacer algún apaño que simule su falta. Son otros tiempos.

Y ahora que tenemos un precioso documento HTML vamos a ver cómo funciona wkhtmltopdf. Este programa parte de una página web, bien obtenida como archivo, bien mediante una URL. Luego,  y empleando un juego de herramientas externo como Webkit, dibuja la página como previo a convertirla en un documento PDF. Ojo, eso incluye cargar referencias externas como las hojas de estilo y las imágenes.

Sencillo mientras la página lo sea. Es lógico pensar que no va a poder con todas tal y como está el patio de las páginas web pero en general hace un trabajo muy bueno. Así que el esquema queda como en el siguiente gráfico:

 

El documento que recibe de odoo incluye un buen paquete de referencias a hojas de estilo referentes al servidor local que wkhtmltopdf, convenientemente instruido, solicita al servidor local que viene a ser el propio programa odoo. De esta forma se puede controlar desde la aplicación qué contenidos generales como encabezados y logotipos deben aparecer, y qué forma van a tener en el resultado final.

El mecanismo es ingenioso pero tiene un par de puntos débiles: la versión empleada de wkhtmltopdf debe ser muy concreta; en el caso de odoo 8 sería la 0.12.1. Cualquier variación hará que los listados salgan descolocados o no lleguen a salir de ninguna manera. En este último caso odoo envía la página web previa para que el usuario la vea y la imprima empleando el mecanismo de su navegador.

El otro punto débil es que, por mucho que nos empeñemos, todo el mecanismo se basa en adaptar un contenido destinado a un medio voluble -y casi intangible- como una pantalla de ordenador, a un medio con límites férreos como es el papel. No estamos hablando de usar un programa final que sabe que va a imprimir y controla tipografías, márgenes físicos o modos de impresión.

Y aunque el conjunto funciona con bastante éxito sigue siendo algo confuso al usuario habitual de listados en papel. No llega a entender muy bien por qué todo pasa por el PDF que descarga y luego tiene que mandar a imprimir. Pasos que antes, al menos en Linux, no existían.

 

Enlaces y referencias