viernes, 27 de julio de 2012


Códigos de barras como marcas de ensobrado.

Las antiguas máquinas dobladoras y ensobradoras de papel usaban sus propias marcas de ensobrado, esas líneas que se veían a menudo (y todavía a veces las encontramos) en los bordes de nuestros documentos bancarios.

Las máquinas modernas leen códigos de barras estándar, lo cual simplifica la codificación de las marcas, ya que todos los productos del mercado pueden generar dichos códigos.

HP Exstream ofrece enormes posibilidades para configurar de forma automática los trabajos de postproceso en alto volumen, desde la doble cara hasta la impresión de varias páginas en una, pasando por las opciones de ensobrado, inserción, etcétera. La verdad es que las posibilidades son tan amplias que no me ha dado tiempo de hacer un ejemplo, como hubiera querido, utilizando algunas de ellas, por ejemplo la doble cara automática y otras interesantes, pero sí que he podido hacer un ejemplo sencillo de construcción “a mano” de un código de barras útil para máquinas de ensobrado.

En el ejemplo que he creado, la impresión es a una sola cara, por tanto hay marcas en todas las páginas (si la impresión es a doble cara, las marcas van solo en las páginas impares y hay que asegurarse de que se inserta una página en blanco al final cuando el número de páginas de un cliente es impar). Se trata, por tanto, de construir un código de barras que cumpla las especificaciones de la máquina ensobradora que lo va a interpretar.

Supongamos que dichas especificaciones son las siguientes:

-          El código debe situarse en la esquina superior derecha de la página, inclinado 90º (legible por tanto de arriba abajo).
-          Debe empezar a una distancia entre 0,50 y 0,75 pulgadas del borde superior y entre 0,25 y 0,50 del borde derecho.
-          Debe tener un ancho mínimo de 0,25 pulgadas y una longitud mínima de 1 pulgada y máxima de 1,50 pulgadas.
-          Debe estar codificado en Code-128 tipo A y contener los siguientes caracteres:
o   Cuatro caracteres para el contador de hojas, que empezará en 0 y aumentará en uno con cada página; si llega a 9999, la siguiente página empezará desde 0 de nuevo.
o   Tres caracteres para posibles inserciones de hojas en el sobre. Cada carácter valdrá 1 si hay que insertar la hoja correspondiente, y 0 si no.
o   Un carácter para señalar cuándo se deben ensobrar las hojas disponibles en ese momento. Valdrá 1 cuando haya que ensobrar y 0 cuando no.

El último carácter, por tanto, valdrá 1 para la última página de cada documento a cliente.

En cuanto a los insertos, por nuestra parte solo vamos a usar 2 posibles insertos, por tanto el tercer carácter de inserción valdrá siempre 0, pero hay que ponerlo igual para que la ensobradora entienda el código correctamente. Nuestros dos insertos serán un sobre de respuesta comercial, que se insertará para cada cliente, y una hoja de publicidad, que irá solo a nuestros clientes más nuevos (los que tienen un código de cliente superior a 200000).

Pondremos los valores correspondientes a uno solo cuando se cumplan las condiciones expuestas y además haya que ensobrar, para que la máquina, en el momento de doblar las hojas del documento y antes de meterlas en el sobre, añada los insertos que toquen.

HP Exstream proporciona diferentes variables de número de páginas, algunas de las cuales vamos a utilizar:

-          SYS_PageTotalInRun: Esta variable empieza en 1 y aumenta en 1 con cada página, y no se pone a cero al cambiar de cliente, sino que sigue aumentando.
-           SYS_PagePrintEnd: Esta variable indica en qué número de página termina el documento en cuestión. Por ejemplo, para un documento de 5 páginas, valdrá siempre 5, aunque estemos en una página anterior.
-          SYS_PageInDocument: Esta variable indica en qué número de página estamos, dentro del documento.

Crearemos una variable propia basada en SYS_PageTotalInRun, teniendo en cuenta que tendremos que restarle 1 (ya que nuestro contador debe empezar en 0) y restarle 10000 cuando pase de 9999. Esa variable formará los cuatro primeros caracteres de nuestro código. Hay que definirla como “Fórmula” y especificar que se compute en cada página. Su fórmula es la siguiente:

Value = SYS_PageTotalInRun – 1
Do While Value >= 10000
   Value = Value – 1
Loop

(En realidad he puesto 10 en lugar de 10000, para comprobar que salta a cero cuando corresopnde sin tener que generar 10000 páginas).

Por otro lado, cuando SYS_ PagePrintEnd y SYS_ PageInDocument sean iguales querrá decir que estamos en la última página, por tanto pondremos a uno nuestros caracteres octavo (ensobrado de hojas disponibles) y quinto (inserción de sobre para respuesta comercial). La fórmula de la variable correspondiente es:

If SYS_PagePrintEnd = SYS_PageInDocument Then
   Value = 1
Else
   Value = 0
End If

Si además el código de cliente es mayor que 200000, pondremos también a 1 el sexto carácter (inserción de publicidad para nuevos clientes). El séptimo carácter permanecerá siempre a cero. La fórmula:

If SYS_PagePrintEnd = SYS_PageInDocument Then
   If Ensobrado_codigo > 200000 Then
      Value = 1
   Else
      Value = 0
   End If
Else
   Value = 0
End If

En la carpeta usuarios\jfblanco\Ensobrado hay un PDF de ejemplo de salida, organizado por HP Exstream en clientes>documentos>páginas. Hay cuatro clientes, cada uno con un documento. El documento del primer cliente tiene 5 páginas, el del segundo 4, el del tercero 6 y el del cuarto 9 (veinte páginas en total). Se muestran los valores intermedios que se han usado para configurar el código de barras. Este aparece en su posición de lectura, inclinado, cumpliendo las especificaciones de posición, altura y anchura, y sin caracteres legibles. Para poder comprobar los valores, he puesto otro código de barras con los mismos valores pero en horizontal y con caracteres legibles.

viernes, 6 de julio de 2012

Tipos de Códigos de Barras




Hola a todos.

Ahora mismo los dos códigos de barras definidos por nuestro cliente en HP Exstream generan siempre Code-128 tipo C. Para cambiar a Code-128 tipo A o Code-128 tipo B hay que hacer lo siguiente:

-      Arrastrar el código de barras correspondiente a la ventana Property panel.
-      Seleccionar la lengüeta Basic.
-      Activar la casilla de verificación Hex que aparece junto a la ventana del parámetro Map String.
Al hacer esto, en la ventana del parámetro Map String aparecen los valores hexadecimales del mapa de caracteres del código. Este mapa no debe modificarse, salvo las dos primeras cifras, que corresponden al valor hexadecimal del primer carácter del mapa (carácter de comienzo). Este carácter define el tipo de código según lo siguiente:
o   Tipo A: valor hexadecimal 87.
o   Tipo B: valor hexadecimal 88.
o   Tipo C: valor hexadecimal 89.
-      Por tanto, debe ajustarse dicho valor hexadecimal al tipo requerido. En nuestro caso, por tanto, deberá cambiarse 89 por 87 y reempaquetar las aplicaciones afectadas.

Importante: Los valores anteriores son válidos para nuestro cliente y para nuestra máquina virtual de HPExstream, pero es posible que en otros entornos se usen otros valores, pues la documentación al respecto es confusa. En todo caso parece claro que siempre se trata de tres caracteres hexadecimales consecutivos, por lo que bastaría identificar el tipo que se está usando y, si se necesita cambiarlo, identificar el valor actual del primer carácter del Map String y aumentarlo o disminuirlo en una o dos unidades, según sea necesario.

Cuando se imprime Code-128, cada carácter viene definido por las seis primeras barras (tres blancas y tres negras), excepto el carácter final o de parada, que viene definido por siete barras (es decir, lleva una barra negra adicional). Los grosores relativos de las seis barras del primer carácter, correspondientes a los tres diferentes tipos, son:

Tipo A: 2 (negro) 1 (blanco) 1 (negro) 4 (blanco) 1 (negro) 2 (blanco)

Tipo B: 2 (negro) 1 (blanco) 1 (negro) 2 (blanco) 1 (negro) 4 (blanco)

Tipo C: 2 (negro) 1 (blanco) 1 (negro) 2 (blanco) 3 (negro) 2 (blanco)

Gráficamente sería así (he puesto azul en vez de blanco para que se vea mejor el grosor de cada barra):



Identificando a cuál de estos tres patrones corresponden las primeras barras del código se establece, por tanto, el tipo, y con ese dato se puede cambiar el carácter hexadecimal de la forma adecuada.

Incluyo a continuación una imagen en la que se explica cómo configurar el código de barras de nuestro cliente (que usa siempre 27 caracteres) para que salga lo más parecido posible al que usaba en su herramienta anterior, con el texto legible centrado y todo eso.

No se ve muy bien, más bien se adivina. Si la necesitáis, podéis pedírmela.



Saludos,

José Fernando


martes, 24 de abril de 2012

Numeración automática importando un RTF

Bueno... pues nos encontramos con el siguiente problema.... Importamos un RTF a través de una variable placeholder... y cuando generamos la salida PDF... la numeración hace lo que le dá la gana...

No hay forma... vamos al manual y nos dice:


Numbered Lists
HP Exstream correctly imports numbered lists that you manually number. A list with numbering generated by

Microsoft Word is imported without numbers and tabs.



Parece que ha quedado claro... Pues bien... si cojemos el RTF que ha sido creado con Microsoft Word, lo abrimos con WordPad y grabamos el documento con otro nombre, Al importar este nuevo documento funciona!!!!

Seguimos con pruebas para saber la fiabilidad de esta solución, pero ya es curioso.

martes, 13 de marzo de 2012

BookMarks en PDF

Bonita solución. El cliente necesita saber que archivos externos está utilizando el Output que genera en la llamada al motor.... y "ta chan".... creación de marcadores en PDF con el nombre de los .rtf que se están usando en documento.

Primero, definimos en la creación del documento que variables van a ser identificadas como ID bookmarks.... y luego en la generación del PDF Output.... customer bookmarks.... by documents....

And.... You get it!!