Impresión de comprobantes

Impresión de comprobantes

ℹ️

Este proceso es opcional

La impresión del comprobante marca el cierre de una transacción y en esta sección se detallan los diferentes métodos que ofrece el SDK para imprimir un comprobante.

Requisitos

  • Datos de la transacción

Paso a paso

  1. Instanciar el objeto DevicePrintImpl y pasarle el contexto.
  2. Validar el estado de la impresora antes de usarla.
  3. Instanciar objeto TextFormat para el texto que se quiere imprimir.
  4. Agregar las líneas a la cola de impresión con el método addLine.
  5. Iniciar la impresión con el método startPrint dentro de un Thread

Métodos disponibles

MétodoDescripción
getStatus
  • Retorna el estado de la impresora.
  • 0x00 = Disponible
  • 0xF0 = No hay papel disponible.
  • 0xD1 = Batería muy baja para imprimir.
  • 0xF7 = Impresora ocupada.
addDoubleColumnTextAgrega 2 columnas en el ticket.
addLineAgrega una línea en el ticket.
addLinebreakAgrega saltos de línea.
addTripleColumnTextAgrega 3 columnas en el ticket.
addImageAgrega un bitmap en el ticket.
startPrintInicia el proceso de impresión.

Estos métodos posibilitan la creación de un formato de ticket personalizado, agregando los datos que se consideren necesarios. Sin embargo, a continuación se detallan los campos que son obligatorios por país:

Argentina
  • Fecha y hora de la transacción
  • Datos del comercio
    • Nombre
    • Dirección
  • Identificación
  • Monto de la transacción
  • Últimos 4 dígitos de la tarjeta
México
  • Fecha y hora de la transacción
  • Nombre del adquirente
  • Datos del comercio
    • Nombre
    • Dirección
    • Teléfono
  • Número de afiliación con la adquirencia
  • Identificador de la transacción
  • Marca y tipo de tarjeta
  • Número de serie de la terminal
  • Código de autorización
  • Monto de la transacción

Ejemplo de implementación

val devicePrintImpl = DevicePrintImpl(context = applicationContext)
val status = devicePrintImpl.getStatus()
Log.i(TAG, "status impresora: $status")
if (status == 0) {
    val thread = Thread {
        devicePrintImpl.addLine(
            TextFormat(align = Align.CENTER, bold = true, font = 1),
            "Nombre del comercio"
        )
        devicePrintImpl.addLine(
            TextFormat(align = Align.CENTER, bold = false),
            "Dirección del comercio"
        )
        devicePrintImpl.addLine(
            TextFormat(align = Align.CENTER, bold = false),
            "DNI del comercio"
        )
        devicePrintImpl.addLine(
            TextFormat(align = Align.CENTER, bold = false),
            "CUIT del comercio"
        )
 
        devicePrintImpl.addLinebreak(1)
        devicePrintImpl.addLine(
            TextFormat(align = Align.CENTER, bold = true),
            "Pago con Tarjeta de Crédito"
        )
 
        devicePrintImpl.addLinebreak(1)
        devicePrintImpl.addDoubleColumnText(
            TextFormat(),
            "Número de Operación",
            "#123456"
        )
        devicePrintImpl.addDoubleColumnText(
            TextFormat(),
            "Tarj: ***1234",
            "Visa"
        )
        devicePrintImpl.addDoubleColumnText(
            TextFormat(),
            "CONTACTLESS",
            ""
        )
        devicePrintImpl.addLinebreak(1)
        try {
            devicePrintImpl.addImage(
                getBitmap(
                    R.drawable.line,
                    applicationContext
                )
            )
        } catch (e: RemoteException) {
            e.printStackTrace()
        }
 
        devicePrintImpl.addDoubleColumnText(
            TextFormat(bold = true, font = 1),
            TOTAL_LABEL.uppercase(Locale.getDefault()),
            "10,00"
        )
        devicePrintImpl.addDoubleColumnText(
            TextFormat(), INSTALLMENT_LABEL, "01"
        )
 
        devicePrintImpl.addDoubleColumnText(
            TextFormat(),
            CURRENCY_LABEL,
            Currency.ARS.name
        )
        devicePrintImpl.addLinebreak(1)
 
        try {
            devicePrintImpl.startPrint()
            Handler(Looper.getMainLooper()).post {
                devicePrintImpl.result.observeForever(resultObserver)
            }
        } catch (e: Exception) {
            e.printStackTrace()
        }
    }
    thread.start()
}