Miniaturas gráficas de archivos PDF …

… para facilitar su visualización en el archivo.

Por razones que ahora mismo se me escapan un poco resulta que han iniciado una cruzada contra el papel en la empresa y, sorpresa, me han pedido que digitalize las facturas de venta de varios años y luego las copie (sic) a un disco externo.

Cada año producimos unas quince mil facturas de venta, incluyendo las rectificativas, y pasarlas a formato PDF resulta en algo más de sesenta mil documentos para los últimos cinco años.  Sesenta mil documentos que tengo que añadir así, como quien no quiere la cosa, a los discos del sistema para proceder a copiarlos a un disco externo y que, me supongo, ellos puedan palpar y revisar.

Me he puesto a ello y he creado un pequeño sistema de archivado de dichas facturas para poder producirlas desde un programa que estará funcionando varias semanas. Y son varias porque si lo lanzo a lo bestia en el sistema de facturación le dejaré de rodillas, no podrán hacer casi nada de su trabajo diario, y luego vendrán los gritos y los lloros.

He dado forma a un mecanismo que genera un lote de facturas en formato PDF, les añade un archivo con metadatos sobre la factura, y los pasa a un directorio compartido por NFS. Cuando en el sistema principal se detecta la existencia de cierto fichero se leen todas las facturas, sus metadatos, y se instala en directorios especiales para poder visionarlos desde un navegador web.

Sí, también podrán abrir las carpetas y verlos directamente pero es que no he contado lo mejor:  hay que crear un listado diario con los datos más significativos de las facturas, especialmente el cliente y su NIF, así como los importes y una suma final.

Esto es, lo que me han pedido para hacer en un rato es:

  • Archivar varios miles de facturas en un directorio que se pueda copiar a un disco externo.
  • Crear listados diarios de las facturas (presentes, pasadas y futuras -hasta que se ponga en marcha el nuevo ERP en odoo-) que pueda ver e imprimir (eso es importante, ojo) el contable de turno para verificarlas.
  • Hacerlo ya pero sin dejar la escritura de los programas de migración de datos no vaya a ser que no lleguemos a tiempo.

Así que estos días a ratos he ido creando lo siguiente:

  • Una modificación en el proceso de generación de facturas para que sólo las archive y las pase a un directorio de red con un bloqueo por fichero.
  • Un programa que lanza el archivado anual de dichas facturas usando lo anterior.
  • Un programa Perl y varios módulos que :
    • Vigilan un directorio usando inotify y lanzan el archivado de las facturas
    • Toman un documento PDF y sus metadatos y los insertan en un árbol de directorios por fecha (año/mes/día/…).

Y me falta por añadir lo siguiente:

  • Un programa que cree los listados leyendo los archivos de metadatos para tenerlos diarios.
  • Un método para obtener miniaturas de los documentos PDF (de eso es de lo que iba a ir la entrada).
  • Más código para crear páginas web estáticas que faciliten los recorridos por las facturas. Y digo recorridos porque aprovechando que en los metadatos aparecen el cliente y el vendedor, entre otros, estaría bien de cara a consultas futuras listar las facturas por cliente -y año o mes- y por vendedor.
  • Un repositorio rsync para que se pueda sincronizar fácilmente el árbol de facturas digitalizadas con un disco externo desde uno cualquiera de los puestos de trabajo. Esa, además de la visualización web en un servidor virtual como http://archivos.empresa.net, son las opciones que se me han ocurrido para que se cumplan las condiciones lo más posible.

Obteniendo miniaturas

Tal y como sospechaba el paquete ImageMagick permite realizar las conversiones y obtener las miniaturas sin  casi problemas. El blog de lo describe muy bien en un artículo.

Y lo he probado y va de miedo:

$ convert -thumbnail x300 -background white -alpha remove 2016A004215-lpez_romero_manuel.pdf image.png

Miniatura de factura de ventasLo he pasado bien, lo reconozco, aunque aún quedan demasiados flecos y lo mismo la cosa deja de hacer gracia, especialmente cuando vean lo que obtienen a cambio de lo que han pedido  …