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
- Instanciar el objeto
DevicePrintImpl
y pasarle el contexto. - Validar el estado de la impresora antes de usarla.
- Instanciar objeto
TextFormat
para el texto que se quiere imprimir. - Agregar las líneas a la cola de impresión con el método
addLine
. - Iniciar la impresión con el método
startPrint
dentro de unThread
Métodos disponibles
Método | Descripción |
---|---|
getStatus |
|
addDoubleColumnText | Agrega 2 columnas en el ticket. |
addLine | Agrega una línea en el ticket. |
addLinebreak | Agrega saltos de línea. |
addTripleColumnText | Agrega 3 columnas en el ticket. |
addImage | Agrega un bitmap en el ticket. |
startPrint | Inicia 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()
}