Me han dado la tarea de averiguar como deben de ir formateados los documentos que se entregan en la Ventanilla Única para generar un Comprobante de Valor Electrónico o COVE. ¡Ay caramba!, si ustedes no entendieron yo menos, pero en fin, trataré de simplificarlo.
Requisitos.
La ventanilla única es un sitio del gobierno federal para hacer trámites relacionados con la importación, exportación y tránsito de mercancías de comercio exterior.
Resulta que para poder entregar un documento digitalizado debe de cumplir con los siguientes requisitos:

- Debe de ser en formato PDF que no contenga formularios, objetos OLE incrustados, código java script, etc. OK, este punto es más o menos claro, porque se pueden generar fácilmente archivos PDF con programas como PDFCreator , más adelante la historia se complica un poco.
- El tamaño máximo del archivo es de 3 MB.
- No debe contener páginas en blanco.
- Las imágenes contenidas deben de estar en escala de grises . Y aquí empiezan las confusiones, ¿Estamos hablando de un PDF o de una imagen?.
- La resolución debe de ser 300 dpi. Este fue el punto que me dio más problemas, debe de ser exacto, no más, no menos, exactamente 300 dpi, cualquier variación hará que el documento sea rechazado.
El software.
En mi caso utilizo un programa para generar el documento en formato PDF pero solamente para evitar la operación de imprimir el documento y luego escanearlo. En linux no hay problema, en windows mi favorito es el PDFCreator que había mencionado anteriormente.
Para editar las imágenes nada mejor que gimp y LibreOffice para generar nuevamente el PDF.
Manos a la obra.
1. Imprimir el documento en formato PDF.
Este paso solamente es para evitar imprimir el documento y escanearlo nuevamente. Con mi programa habitual genero el archivo en formato PDF, aqui no importan resoluciones ni colores, se hace de manera normal, se manda imprime el trabajo en la impresora virtual y como resultado me genera un archivo PDF.
2. Gimp entra en acción.
Como gimp puede abrir archivos en formato PDF, abriremos el documento generado en el paso anterior, pero al abrirlo le diremos que lo importe a 300 dpi, esto es muy importante. Si el documento tiene más de una página les sugiero que elijan la opción Abrir páginas como imágenes.

Importando el documento PDF en Gimp
A cada imagen abierta por Gimp vamos a ajustarlo a Escala de grises, para lograrlo hacemos clien en el menú Imagen - Modo - Escala de grises

Escala de grises
Si todo sale bien, al presionar Alt + Enter verán que la imagen editada tiene 300 dpi y tiene una profundidad de color de 8 bits o sea que esta en Escala de grises.

Resolución y Espacio de color
Exportamos el o los archivos en formato JPG.
3.Es el turno de LibreOffice.
En Writer, abrimos un archivo en blanco y al cual le insertaremos cada una de las imágenes que generamos con gimp en el paso anterior con el menú Insertar - Imagen - A partir de archivo.

Insertar imágenes en writer
Y para terminar, vamos a exportar el PDF con el menú Archivo - Exportar en formato PDF . Es muy importante tener seleccionada la opción Reducir resolución de imagen con 300 dpi.

Opciones para exportar a PDF
Si todo salió bien, la ventanilla única no tendrá problemas en aceptar nuestro documento.

Documento aceptado
Aclaraciones.
Tengo que aclarar que estos son los pasos que uso, me funcionan, pero no quiere decir que sea la forma óptima, el procedimiento puede ser perfectible, si tienes alguna duda, comentario o sugerencia, no dudes en compartirlas con tu comentario.
¿Quieres intentarlo con ImageMagick?
Se me ocurrió que podría simplificar el procedimiento usando ImageMagick un editor de imágenes en línea de comandos muy famoso y veterano en linux que también esta disponible en Windows.
Obtener un documento de referencia.
Hice un documento siguiendo las instrucciones del artículo que menciono al principio. El objetivo es tener un documento para comparar mis experimentos.
Me ayudé del paquete poppler y su comando pdfimages para obtener las propiedades del pdf resultante.
pdfimages -list pdf-referencia.pdf
page num type width height color comp bpc enc interp object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
1 0 image 2077 2688 gray 1 8 jpeg no 4 0 300 300 1409K 26%
Como pueden ver, es de tipo imagen, en escala de grises, con una resolución de 300x300 dpi, parece que todo esta bien con este documento de referencia.
Lucubrando el comando
La idea con imagemagick es lograr esto:
- Convertir las imágenes a escala de grises y con una resolución de 300 dpi.
- Convertir la imagen a PDF
- Asegurarme de que el pdf también este a 300 dpi.
Primer Intento

Comando propuesto usando imagemagick.
Tomando lo anterior en cuenta, este es mi primer intento. Tomo una imagen a color que fue escaneada. Se convierte a escala de grises, se ajusta su resolución a 300 dpi y se convierte a pdf.
convert -units PixelsPerInch img-color.jpg -type Grayscale -density 300 img-grayscale.pdf
pdfimages me da como resultado lo siguiente:
pdfimages -list img-grayscale.pdf
page num type width height color comp bpc enc interp object ID x-ppi y-ppi size ratio
--------------------------------------------------------------------------------------------
1 0 image 2315 3024 gray 1 8 jpeg no 8 0 300 300 176K 2.6%
Como ven es muy similar a los resultados que obtengo con mi documento de referencia … peeeeroooo …
Las pruebas
Hace poco tuve un breve acceso al sito de la Ventanilla Única. No estoy seguro, pero parece que el requisito de que la imagen tenía que estar en escala de grises fue eliminado.
Ahora lo importante es que cumpla con la resolución de 300 dpi y que el PDF sea menor de 10 MB.
Entonces el comando se simplifica un poco y quedaría así:
convert -units PixelsPerInch img-color.jpg -density 300 img-grayscale.pdf
El PDF resultante fue aceptado sin problemas. Pero me gustaría hacer más pruebas.
Si alguien quiere hacer las pruebas necesarias ¡Adelante! mejor si comparte sus resultados en los comentarios para saber si es necesario hacer más ajustes.
¡Buena suerte!
