# Controlar la impresora del dispositivo

Esta guía explica cómo interactuar con el hardware físico de impresión del dispositivo utilizando el `PrinterRepository`. Esto permite verificar la disponibilidad de papel e imprimir tanto recibos estándar como contenidos personalizados.

## Comprobar el estado del papel

Antes de intentar cualquier tarea de impresión, la mejor práctica es verificar que la impresora tiene papel. Utiliza la función `checkPaper` para consultar el estado del hardware.

**Repositorio**: `PrinterRepository`  
**Función**: `checkPaper`

### Ejemplo de implementación

Devuelve `true` si hay papel disponible, `false` en caso contrario.

```kotlin
suspend fun verifyPaperAvailability() {
    val result = printerRepository.checkPaper()

    when (result) {
        is RepositoryResult.Success -> {
            val hasPaper = result.data
            if (hasPaper) {
                println("✅ Printer is ready.")
            } else {
                println("⚠️ Printer is out of paper.")
            }
        }
        is RepositoryResult.ConnectionError -> println("❌ Connection Error")
        is RepositoryResult.ProtocolError -> println("❌ Error: ${result.type}")
        else -> {}
    }
}
```

## Imprimir un ticket estándar

El SDK proporciona un método integrado para generar e imprimir un recibo estándar utilizando datos de un objeto `Transaction`. Esto es útil para generar rápidamente recibos conformes sin tener que diseñar el diseño manualmente.

**Función**: `printDefaultTicket`

**Parámetros**:
* `context`: El contexto de la aplicación Android.  
* `headerIcon`: Una imagen `Bitmap` para imprimir en la parte superior del recibo (p. ej., el logotipo de tu comercio).  
* `transaction`: El objeto `Transaction` que contiene los detalles del pago.

### Ejemplo de implementación

```kotlin
suspend fun printReceipt(context: Context, logo: Bitmap, transaction: Transaction) {
    val result = printerRepository.printDefaultTicket(
        context = context,
        headerIcon = logo,
        transaction = transaction
    )

    handlePrintResult(result)
}
```

## Imprimir contenido personalizado (Bitmaps)

Si necesitas un control total sobre el diseño del recibo (p. ej., añadir cupones, códigos QR o diseños personalizados), puedes renderizar tu contenido en un `Bitmap` y enviarlo directamente a la impresora.

**Función**: `printBitmap`

**Parámetros**:
* `bitmap`: El objeto `Bitmap` a imprimir.

### Ejemplo de implementación

```kotlin
suspend fun printCustomDesign(myCustomBitmap: Bitmap) {
    val result = printerRepository.printBitmap(
        bitmap = myCustomBitmap
    )

    handlePrintResult(result)
}
```

## Gestión de resultados de impresión

Ambos métodos de impresión devuelven un `RepositoryResult<Boolean>`.

```kotlin
fun handlePrintResult(result: RepositoryResult<Boolean>) {
    when (result) {
        is RepositoryResult.Success -> {
            if (result.data) {
                println("✅ Print job completed successfully.")
            } else {
                println("❌ Print job failed.")
            }
        }
        is RepositoryResult.ConnectionError -> println("❌ Connection Error")
        is RepositoryResult.ProtocolError -> println("❌ Protocol Error: ${result.type}")
        else -> {}
    }
}
```

## Próximos pasos

* [**Configurar Pagos Bizum**](/es/get-smart/get-smart-sdk/integration-guides/alternative-payment-methods-apms/configure-bizum-payments): Guías de integración para Bizum.
* [**Configurar Alipay y WeChat QR**](/es/get-smart/get-smart-sdk/integration-guides/alternative-payment-methods-apms/configure-alipay-and-wechat-qr): Guías para pagos mediante códigos QR.
* [**Gestionar Ajustes del Dispositivo**](/es/get-smart/get-smart-sdk/integration-guides/device-and-quality-assurance/manage-device-settings): Aprende a gestionar los ajustes del dispositivo.
* [**Tokenizar Credenciales de Tarjeta**](/es/get-smart/get-smart-sdk/integration-guides/device-and-quality-assurance/tokenize-card-credentials): Aprende a gestionar tokens.