# Controle a Impressora do Dispositivo

Este guia explica como interagir com o hardware físico de impressão do dispositivo utilizando o `PrinterRepository`. Isso permite verificar a disponibilidade de papel e imprimir tanto comprovantes padrão quanto conteúdos personalizados.

## Verificando o Status do Papel

Antes de tentar qualquer trabalho de impressão, a melhor prática é verificar se a impressora possui papel. Use a função `checkPaper` para consultar o status do hardware.

**Repositório**: `PrinterRepository`  
**Função**: `checkPaper`

### Exemplo de Implementação

Retorna `true` se houver papel disponível, `false` caso contrário.

```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 -> {}
    }
}
```

## Imprimindo um Comprovante Padrão

O SDK fornece um método integrado para gerar e imprimir um comprovante padrão utilizando dados de um objeto `Transaction`. Isso é útil para gerar rapidamente recibos em conformidade sem precisar desenhar o layout manualmente.

**Função**: `printDefaultTicket`

**Parâmetros**:
* `context`: O contexto da aplicação Android.  
* `headerIcon`: Uma imagem `Bitmap` para imprimir no topo do comprovante (ex: o logotipo do seu estabelecimento).  
* `transaction`: O objeto `Transaction` contendo os detalhes do pagamento.

### Exemplo de Implementação

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

    handlePrintResult(result)
}
```

## Imprimindo Conteúdo Personalizado (Bitmaps)

Se você precisar de controle total sobre o design do comprovante (ex: adicionar cupons, códigos QR ou layouts personalizados), você pode renderizar seu conteúdo em um `Bitmap` e enviá-lo diretamente para a impressora.

**Função**: `printBitmap`

**Parâmetros**:
* `bitmap`: O objeto `Bitmap` a ser impresso.

### Exemplo de Implementação

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

    handlePrintResult(result)
}
```

## Tratando Resultados de Impressão

Ambos os métodos de impressão retornam um `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 Passos

* [**Configurar Pagamentos Bizum**](/pt/get-smart/get-smart-sdk/integration-guides/alternative-payment-methods-apms/configure-bizum-payments): Guias de integração para o Bizum.
* [**Configurar Alipay e WeChat QR**](/pt/get-smart/get-smart-sdk/integration-guides/alternative-payment-methods-apms/configure-alipay-and-wechat-qr): Guias para pagamentos via QR Code.
* [**Gerenciar Configurações do Dispositivo**](/pt/get-smart/get-smart-sdk/integration-guides/device-and-quality-assurance/manage-device-settings): Saiba como gerenciar os ajustes do dispositivo.
* [**Tokenizar Credenciais de Cartão**](/pt/get-smart/get-smart-sdk/integration-guides/device-and-quality-assurance/tokenize-card-credentials): Saiba como gerenciar tokens de cartões.