Nueva API de impresión

Esta API sólo está disponible en Android, de momento.

Para empezar a usar la nueva API de impresión en Android, es necesario descargarse el módulo xoneprintermodule desde xonesupport. Una vez instalado en el terminal, no veremos ningún icono nuevo en nuestra lista de aplicaciones, pues es un plugin del framework. Se puede desinstalar igualmente desde el administrador de aplicaciones de Android. A continuación procedemos a describir brevemente los métodos del objeto xoneprinter y debajo podemos ver el código completo una pequeña aplicación de prueba que lo utiliza.


Esta llamada es esencial. El primer parámetro indica a el módulo el driver de impresión que debe usar. Los drivers actualmente implementados son: “zebra”, “datecs”, “serial”, “brother” y “networkprinter”. No todos los driver implementan todas las funciones, ya sea porque no tienen sentido o no sea posible implementarlas. Consultar a CGSoft para una lista de impresoras homologadas.

DRIVER DESCRIPCION
Zebra Driver para impresoras de tickets de papel térmico Zebra. Soporta impresión de texto, imágenes y códigos de barras por Bluetooth.
Epson Driver para impresoras de tickets de papel térmico Epson. Soporta impresión de texto, imágenes y códigos de barras por Bluetooth.
Datecs Driver para impresoras de tickets de papel térmico Datecs DPP. Soporta impresión de texto, imágenes y códigos de barras por Bluetooth.
Brother Driver para impresoras de papel térmico DIN A4. Soporta impresión de documentos PDF por Bluetooth. No permite otro tipo de impresión. Por lo tanto, si se quiere usar esta impresora, se debe usar conjuntamente con el módulo de generación de PDFs de XOne.
networkprinter Driver genérico y experimental para impresoras de red.
Serial Driver para conectarse por puerto serie bluetooth.

Ejemplo de código:

printer01.SetDriver "zebra"

Indica el modelo de impresora a utilizar con el primer parámetro.Sólo disponible con los drivers brother y serial.

Ejemplo de código #1:

printer01.SetModel "PJ-662"

Con éste ajustamos la impresora modelo PJ-662.

Ejemplo de código #2:

printer01.SetModel "star"

Éste es para la impresora Star DP8340S.


Esta llamada invoca una pantalla de escaneo y selección de un dispositivo bluetooth donde podemos guardar la dirección MAC de la impresora por la cual imprimiremos. Esta llamada no bloquea el script, es decir, en cuanto se llame seguirá hacia adelante, por lo tanto no puede combinarse con las otras llamadas en el mismo script. La impresora seleccionada se guarda y persiste entre reinicios de la aplicación. No tiene parámetros.

Ejemplo de código:

printer01.SelectBluetoothPrinter

Es la llamada hermana de la anterior, pero ésta sirve para escanear IPs en el rango. Hay que tener en cuenta que escanear un rango de IPs puede ser un tanto pesados.

Ejemplo de código:

printer01.SelectNetworkedPrinter

Esta llamada indica al módulo que debe usar la impresora guardada con selectbluetoothprinter. Lógicamente no es necesaria si se ajusta la dirección manualmente con las dos siguientes funciones.

Ejemplo de código:

printer01.SelectBluetoothPrinter

Ajusta la dirección MAC de la impresora Bluetooth manualmente.

Ejemplo de código:

printer01.SetMACAddress "00:03:7A:4d:72:40"

Ajusta la dirección IP de la impresora de red manualmente.

Ejemplo de código:

printer01.SetIPAddress "101.101.101.11"

Ajusta el puerto a la escucha de la impresora Bluetooth al que se conectará el módulo manualmente.

Devuelve una cadena con la dirección IP o MAC ajustada actualmente en el objeto.

Devuelve el modo de conexión actual. Los valores posibles son “bluetooth”, “networked” o “undetermined”. Éste último se devuelve si no se ha llamado ninguna función que determine su valor, como por ejemplo setipaddress.


Para impresoras Brother. Ajusta el modo de alimentación automática de papel. Si se ajusta en “free”, cuando termine de imprimir no alimentará papel, con “endofpage” sacará todo el folio.

Para impresoras Zebra. Le indica que debe hecerse visible en modo Bluetooth. Útil cuando se está conectado por red.

Para impresoras Zebra. Le indica a la impresora que debe pedir contraseña Bluetooth. Útil cuando se está conectado por red.

Para impresoras Zebra. Ajusta la contraseña para conexiones Bluetooth. Útil cuando se está conectado por red.

Activa directamente el Bluetooth en el terminal. Pasarán unos segundos antes de que se active por completo.

Ejemplo de código:

printer01.EnableBluetooth

Desactiva el Bluetooth en el terminal.

Ejemplo de código:

printer01.DisableBluetooth 

Activa directamente el adaptador wifi en el terminal. Pasarán unos segundos antes de que se active por completo y otro tanto hasta que se conecte a una red.

Ejemplo de código:

printer01.EnableWiFi


Desactiva el wifi en el terminal.

Ejemplo de código:

printer01.DisableWiFi

Con esto se harán los pasos previos a la conexión con la impresora. El primer parámetro es opcional y decide el número de reintentos si la conexión fallase porque la impresora está apagada, ocupada o algún otro error. Por defecto 3.

Ejemplo de código:

printer01.Connect 3

Imprime una cadena de texto pasada por parámetro.

Ejemplo de código:

printer01.Print "probando"

Imprime una cadena de texto pasada por parámetro, concatenándole un salto de línea.

Ejemplo de código:

printer01.PrintLine "hola que tal"


Imprime una cadena de texto pasada por parámetro, concatenándole un salto de línea y centrado. Requiere que se haya especificado un total de caracteres por línea con el método setmaxcharacterwidth.

Ejemplo de código:

printer01.PrintLineCentered "texto centrado"

Lo mismo que la llamada anterior, esta vez alineado a la derecha.

Ejemplo de código:

printer01.PrintLineCentered "texto alineado a la derecha"

Imprime el número de saltos de línea que se le especifique por parámetro.

Ejemplo de código:

printer01.LineFeed 1

Imprime una imagen que se le pase en el primer parámetro. Si sólo se le especifica el nombre del fichero (como puede ser al pasarle sólo un prop de tipo foto o firma), lo buscará en la carpeta en la carpeta files de la aplicación. También acepta rutas completas y URLs de imágenes, las cuales intentará descargar primero. El segundo y el tercer parámetro es la resolución de la imagen, si no hace falta reescalar la imagen se le puede pasar a ambos parámetros -1. Algunas impresoras rechazarán silenciosamente imágenes que superen el ancho y/o alto del papel en el que se va a imprimir. El cuarto parámetro indica si debe imprimirse centrada la imagen (no implementado en todos los driver) y el quinto indica si se le debe añadir tramado (dither) a la imagen.

Ejemplo de código:

printer01.PrintImage this("MAP_PROPFOTO"), -1, -1, "center", 0

Sólo impresoras Brother. Imprime el archivo PDF especificado en el primer parámetro. Si no se le especifica como segundo parámetro el número de la página a imprimir, imprimirá todo el documento. Se le puede pasar una ruta completa, si sólo se le pasa el nombre del fichero, lo buscará en la carpeta files.

Ejemplo de código:

printer01.PrintPDF "fichero.pdf"

Disponible en todas las impresoras que soporten impresión de imágenes. Genera e imprime un código de barras con el formato especificado. El primer parámetro indica el tipo de código de barras a generar, el segundo los datos que contendrá dicho código y el tercero y el cuarto el ancho y el alto del código de barras respectivamente.

Ejemplo de código:

printer01.PrintBarcode "code128", 12345678, 500, 200

Corta el ticket en las impresoras que dispongan de mecanismo para ello, en el instante en el que es invocado. Sólo disponible en impresoras Epson.

Ejemplo de código:

printer01.CutPaper

Envía la lista de comandos especificada en el primer parámetro. Solamente suele ser útil en impresoras con soporte para puerto serie y capaces de enviar comandos eb bruto. Consultar el manual de la impresora para saber la lista de comandos.

Ejemplo de código:

printer01.SendCommands "20"

Ajusta la fuente preinstalada en la impresora. El parámentro a pasar aquí será el mismo que indique la documentación de la impresora. Sólo disponible en impresoras Epson.

Ejemplo de código:

printer01.SetFont "B"

Indica que las siguientes funciones de impresión de texto se imprimirán en cursiva, negrita, normal, etc… Sólo en las impresoras en las que se haya implementado. Viene a ser lo mismo que llamar a sendcommands con los comandos específicos para esa impresora en la mayoría de los casos. Valores posibles: “normal”, “underline”, “bold”

Ejemplo de código:

printer01.SetFontStyle "underline"

Lo mismo que la anterior, pero esta vez decidiendo el color del texto. Por ejemplo, sabemos que la impresora Star DP8340S es bicolor (rojo y negro), así pues este ejemplo serviría para colorear de rojo.

Ejemplo de código:

printer01.SetFontColor "#FF0000"

Al hacer esta llamada, una vez procesados todos los comandos previos comenzará el ciclo de conexión e impresión. Es importante pasarle como parámetro el tiempo de espera en segundos antes de dar por finalizada la impresión pues casi todas las impresoras no avisan de cuándo ha terminado de imprimir y se le debe dar un tiempo de gracia razonable.

Ejemplo de código:

printer01.Disconnect 20

Esta llamada ajusta el número de caracteres por línea, es necesario si se quieren usar las llamadas para imprimir justificado.

Ejemplo de código:

printer01.SetMaxCharacterWidth 60

Esta llamada ajusta el número de líneas por página, es necesario si se quieren imprimir una cabecera y/o un pie de página.

Ejemplo de código:

printer01.SetMaxLinesPerPage 80


Esta llamada indica que todas las funciones de impresión a partir de aquí pertenecen a la cabecera del documento y por lo tanto se repetirán al principio de cada página. Cuando se termine de definir el bloque de cabecera, hay que llamar a endheader.

Ejemplo de código:

printer01.BeginHeader

Indica que hemos terminado de definir la cabecera del documento.

Ejemplo de código:

printer01.EndHeader

De manera parecida a beginheader, esta llamada indica que todas las funciones de impresión a partir de aquí pertenecen al pie de página del documento y por lo tanto se repetirán al final de cada página. Cuando se termine de definir el bloque de pie de página, hay que llamar a endfooter.

Ejemplo de código:

printer01.BeginFooter

Indica que hemos terminado de definir el pie de página del documento.

Ejemplo de código:

printer01.EndFooter
<?xml version="1.0" encoding="iso-8859-1"?>
<xml>
  <app prefix="gen" version="0.0.0.95" autologon="true" entry-point="Usuarios"></app>
  <collprops type="general">
    <coll name="Empresas" title="la empresa" sql="SELECT t1.ID,t1.CODIGO FROM ##PREF##Empresa t1" shadow="false" objname="Empresa" updateobj="Empresa" progid="ASGestion.CASEmpresa" fontsize="9" nomenmask="8" editwidth="101" editheight="97" filter="" sort="">
      <group name="General" id="1" />
      <prop name="CODIGO" visible="3" group="1" type="N" fieldsize="4" autosearch="true" />
    </coll>
    <coll name="Usuarios" notab="true" title="el usuario" sql="SELECT t1.ID,t1.IDEMPRESA,t1.LOGIN,t1.PWD,t1.NOMBRE FROM ##PREF##Usuarios t1" shadow="false" objname="Usuarios" updateobj="Usuarios" progid="ASGestion.CASUser" dropdown="true" editwidth="101" editheight="97" fontsize="9" filter="" sort="">
      <frame name="todo" width="100%" height="100%" align="center" />
      <prop type="B" name="MAP_IMPRIMIR" frame="todo" group="1" visible="1" lines="2" labelwidth="13" method="ExecuteNode(imprimir)" lmargin="0" title="Imprimir" />
      <prop type="B" name="MAP_SELECCIONARIMPRESORA" frame="todo" group="1" visible="1" lines="2" labelwidth="13" method="ExecuteNode(seleccionar)" tmargin="1" lmargin="0" title="Seleccionar impresora" />
      <seleccionar>
        <action name="runscript">
          <script language="VBScript">
						'Creamos un objeto impresora.
						Set printer01 = CreateObject("XOnePrinter")
						'Esta llamada no es síncrona, por lo tanto debe llamarse aparte.
						'Lanza una pantalla de selección de impresora, y la guarda en el
						'fichero /sdcard/lastprinter.txt
						'printer01.SelectBluetoothPrinter
						printer01.SelectBluetoothPrinter
						Set printer01 = nothing
					</script>
        </action>
      </seleccionar>
      <imprimir>
        <action name="runscript">
          <script language="VBScript">
 
						'Creamos el objeto impresora, independiente del framework y que contiene
						'métodos según la versión del XOnePrinterModule. 
						Set printer01 = CreateObject("XOnePrinter")
 
						'Este método, si parámetro = true, indica no vamos a
						'imprimir, de verdad, si no que queremos enviarlo a
						'la consola de debug. Útil cuando todavía estamos
						'diseñando el ticket/documento. Las llamadas a imprimir
						'imágenes/códigos de barras simplemente las ignorará.
						'printer01.SetDebugMode true
						printer01.SetDebugMode false
 
						'Con esto ajustamos el driver de impresión a usar.
						'printer01.SetDriver "networkprinter"
						'printer01.SetDriver "brother"
						'printer01.SetDriver "datecs"
						'printer01.SetDriver "zebra"
						printer01.SetDriver "epson"
 
 
						'Si fuese necesario, ajustamos el modelo de impresora,
						'caso de las impresoras Brother y Epson.
						'printer01.SetModel "PJ-663"
						'printer01.SetModel "PJ-662"
						'printer01.SetModel "PJ-562"
						printer01.SetModel "TM-P60II"
 
						'printer01.SetIPAddress "192.168.1.77"
						'printer01.SetIPAddress "101.101.101.11"
						'printer01.SetMACAddress "00:03:7A:4d:72:40"
						'printer01.SetMACAddress "00:22:58:31:71:86"
						'printer01.EnableWiFi
						'printer01.DisableWiFi
						'printer01.EnableBluetooth
						'printer01.DisableBluetooth
 
 
						'UseStoredPrinter indica que se debe usar la última
						'impresora recordada. Para seleccionar una impresora y
						'guardarla para futuras impresiones, se debe llamar a
						'SelectBluetoothPrinter en otro botón. En este ejemplo,
						'está en el script del nodo anterior.
						printer01.UseStoredPrinter
 
 
						'Connect activará el bluetooth/wifi automáticamente
						'si no lo está ya y hará las funciones de conexión
						'necesarias según driver.
						printer01.Connect
						'printer01.PrintLine "! U1 JOURNAL"
						'printer01.PrintLine "! U1 SETFF 50 2"
 
						'SetFont ajusta la fuente, según las fuentes
						'preinstaladas en la impresora. Sólo disponible
						'en la Epson.
						'printer01.SetFont "A"
 
						'PrintLine imprime un texto con salto de línea.
						printer01.PrintLine "test01"
						'Print imprime texto sin formatear.
						printer01.Print "test02"
						printer01.PrintLine "hola que tal"
						printer01.PrintLine "test03"
 
						'LineFeed sacará tantas líneas en blanco como se
						'especifique por parámetro
						printer01.LineFeed 5
 
						'Para las impresoras que dispongan de mecanismo para
						'ello, CutPaper corta el papel. Útil para imprimir
						'varios tickets de golpe. Sólo disponible en impresoras
						'Epson.
						printer01.CutPaper
 
						'PrintImage imprime la imagen pasada por parámetro.
						'Si no es una ruta completa, deberá ser relativa a
						'la carpeta files de la aplicación. Como por ejemplo
						'el caso de un prop de tipo foto o firma. El segundo y
						'tercer parámetro indican que se debe resizear la
						'imagen. El cuarto parámetro indica que se debe imprimir
						'centrada la imagen y no está disponible en todos los
						'drivers. El sexto parámetro dejarlo a cero.
						printer01.PrintImage "callosa.png", 300, 300, "center", 0
 
						'PrintBarcode genera un código de barras del tipo
						'especificado en el primer parámetro, con los datos del
						'segundo y las dimensiones del tercero y cuarto.
						printer01.PrintBarcode "code128", 12345678, 500, 200
 
						'PrintPDF imprime un documento PDF que esté en la carpeta
						'files, o el que esté en la ruta absoluta que se le pase
						'por parámetro. Sólo disponible en impresoras Brother y no
						'compatible con el resto de llamadas
						'printer01.PrintPDF "/mnt/sdcard/xone/testpdf01.pdf"
 
						'Disconnect indica que se ha terminado de enviar los
						'documentos a la cola de impresión. Ahora comenzará
						'la impresión y esperará el tiempo especificado por
						'parámetro antes de desconectar. Es necesario darle
						'tiempo suficiente para que termine de imprimir.
						printer01.Disconnect 10
 
						Set printer01 = nothing
					</script>
        </action>
      </imprimir>
    </coll>
  </collprops>
</xml>