{"id":1762,"date":"2016-06-22T10:28:01","date_gmt":"2016-06-22T10:28:01","guid":{"rendered":"http:\/\/esferas.org\/msqlu\/?p=1762"},"modified":"2016-06-22T10:33:14","modified_gmt":"2016-06-22T10:33:14","slug":"miniaturas-graficas-de-archivos-pdf","status":"publish","type":"post","link":"https:\/\/esferas.org\/msqlu\/2016\/06\/22\/miniaturas-graficas-de-archivos-pdf\/","title":{"rendered":"Miniaturas gr\u00e1ficas de archivos PDF &#8230;"},"content":{"rendered":"<p>&#8230; para facilitar su visualizaci\u00f3n en el archivo.<\/p>\n<p><!--more--><\/p>\n<p>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\u00f1os y luego las copie (sic) a un disco externo.<\/p>\n<p>Cada a\u00f1o producimos unas quince mil facturas de venta, incluyendo las rectificativas, y pasarlas a formato PDF resulta en algo m\u00e1s de sesenta mil documentos para los \u00faltimos cinco a\u00f1os.\u00a0 Sesenta mil documentos que tengo que a\u00f1adir as\u00ed, 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.<\/p>\n<p>Me he puesto a ello y he creado un peque\u00f1o sistema de archivado de dichas facturas para poder producirlas desde un programa que estar\u00e1 funcionando varias semanas. Y son varias porque si lo lanzo a lo bestia en el sistema de facturaci\u00f3n le dejar\u00e9 de rodillas, no podr\u00e1n hacer casi nada de su trabajo diario, y luego vendr\u00e1n los gritos y los lloros.<\/p>\n<p>He dado forma a un mecanismo que genera un lote de facturas en formato PDF, les a\u00f1ade 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.<\/p>\n<p>S\u00ed, tambi\u00e9n podr\u00e1n abrir las carpetas y verlos directamente pero es que no he contado lo mejor:\u00a0 hay que crear un listado diario con los datos m\u00e1s significativos de las facturas, especialmente el cliente y su NIF, as\u00ed como los importes y una suma final.<\/p>\n<p>Esto es, lo que me han pedido para hacer en un rato es:<\/p>\n<ul>\n<li>Archivar varios miles de facturas en un directorio que se pueda copiar a un disco externo.<\/li>\n<li>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.<\/li>\n<li>Hacerlo ya pero sin dejar la escritura de los programas de migraci\u00f3n de datos no vaya a ser que no lleguemos a tiempo.<\/li>\n<\/ul>\n<p>As\u00ed que estos d\u00edas a ratos he ido creando lo siguiente:<\/p>\n<ul>\n<li>Una modificaci\u00f3n en el proceso de generaci\u00f3n de facturas para que s\u00f3lo las archive y las pase a un directorio de red con un bloqueo por fichero.<\/li>\n<li>Un programa que lanza el archivado anual de dichas facturas usando lo anterior.<\/li>\n<li>Un programa Perl y varios m\u00f3dulos que :\n<ul>\n<li>Vigilan un directorio usando <em>inotify<\/em> y lanzan el archivado de las facturas<\/li>\n<li>Toman un documento PDF y sus metadatos y los insertan en un \u00e1rbol de directorios por fecha (a\u00f1o\/mes\/d\u00eda\/&#8230;).<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Y me falta por a\u00f1adir lo siguiente:<\/p>\n<ul>\n<li>Un programa que cree los listados leyendo los archivos de metadatos para tenerlos diarios.<\/li>\n<li>Un m\u00e9todo para obtener miniaturas de los documentos PDF (de eso es de lo que iba a ir la entrada).<\/li>\n<li>M\u00e1s c\u00f3digo para crear p\u00e1ginas web est\u00e1ticas 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\u00eda bien de cara a consultas futuras listar las facturas por cliente -y a\u00f1o o mes- y por vendedor.<\/li>\n<li>Un repositorio <em>rsync<\/em> para que se pueda sincronizar f\u00e1cilmente el \u00e1rbol de facturas digitalizadas con un disco externo desde uno cualquiera de los puestos de trabajo. Esa, adem\u00e1s de la visualizaci\u00f3n web en un servidor virtual como <code>http:\/\/archivos.empresa.net<\/code>, son las opciones que se me han ocurrido para que se cumplan las condiciones lo m\u00e1s posible.<\/li>\n<\/ul>\n<h3>Obteniendo miniaturas<\/h3>\n<p>Tal y como sospechaba el paquete <a href=\"http:\/\/www.imagemagick.org\/\">ImageMagick<\/a> permite realizar las conversiones y obtener las miniaturas sin\u00a0 casi problemas. El blog de <span class=\"post-author vcard\"><span class=\"fn\">Duncan Lock<\/span><\/span> lo describe muy bien en un <a href=\"http:\/\/duncanlock.net\/blog\/2013\/11\/18\/how-to-create-thumbnails-for-pdfs-with-imagemagick-on-linux\/\">art\u00edculo<\/a>.<\/p>\n<p>Y lo he probado y va de miedo:<\/p>\n<pre class=\"lang:sh decode:true\">$ convert -thumbnail x300 -background white -alpha remove 2016A004215-lpez_romero_manuel.pdf image.png<\/pre>\n<p><a href=\"http:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2016\/06\/image.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1763\" src=\"http:\/\/esferas.org\/msqlu\/wp-content\/uploads\/sites\/12\/2016\/06\/image.png\" alt=\"Miniatura de factura de ventas\" width=\"212\" height=\"300\" \/><\/a>Lo he pasado bien, lo reconozco, aunque a\u00fan 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\u00a0 &#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8230; para facilitar su visualizaci\u00f3n en el archivo.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","webmentions_disabled_pings":false,"webmentions_disabled":false,"footnotes":""},"categories":[2],"tags":[629,628,52,222],"class_list":["post-1762","post","type-post","status-publish","format-standard","hentry","category-software","tag-archivo-de-documentos","tag-imagemagick","tag-mi-lugar-de-trabajo","tag-pdf"],"_links":{"self":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/1762","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/comments?post=1762"}],"version-history":[{"count":0,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/posts\/1762\/revisions"}],"wp:attachment":[{"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/media?parent=1762"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/categories?post=1762"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/esferas.org\/msqlu\/wp-json\/wp\/v2\/tags?post=1762"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}