Impressão

1) Instanciando a PayOsSdkPrinter

A PayOsSdkPrinter está disponível para os terminais Pax e PagBank. O flavor Nexgo não publica a classe.
Obtendo a instância da SDK:

private val payOsSdkPrinterInstance = PayOsSdkPrinter.instance

Interface exposta pela PayOsSdkPrinter:

interface PayOsSdkPrinter {
    fun configure(context: Context)
    fun getStatus(): Result<PayOsSdkPrinterStatus>
    fun init(): Result<Unit>
    fun start(): Result<PayOsSdkPrinterStatus>
    fun step(step: Int): Result<Unit>
    fun printBitmap(bitmap: Bitmap?): Result<Unit>
    fun setGray(level: Int): Result<Unit>
}

1.1) Permissão

A permissão abaixo já é declarada pela SDK e é mesclada no AndroidManifest.xml do aplicativo. Não é necessário adicioná-la manualmente.

<uses-permission android:name="com.pax.permission.PRINTER"/>

1.2) Configuração

Para começar, é necessário chamar o método de configuração. O funcionamento de todos os outros métodos está atrelado à configuração, já que o context da aplicação é utilizado por todo o SDK.
É necessário que este método seja chamado apenas uma vez. Recomenda-se chamá-lo no lifecycle de onCreate da aplicação.

payOsSdkPrinterInstance.configure(applicationContext)

2) Operações e valores

Sobre as operações da PayOsSdkPrinter.

2.1) getStatus(): Result<PayOsSdkPrinterStatus>

Retorna o status da impressora.
Retornos:

  • PayOsSdkPrinterStatus.SUCCESS - Sucesso;
  • PayOsSdkPrinterStatus.PRINTER_IS_BUSY - A impressora está ocupada;
  • PayOsSdkPrinterStatus.OUT_OF_PAPER - Sem papel;
  • PayOsSdkPrinterStatus.FORMAT_PRINT_PACKET_ERROR - Erro no formato do pacote de dados de impressão;
  • PayOsSdkPrinterStatus.PRINTER_MALFUCTION - Mau funcionamento da impressora;
  • PayOsSdkPrinterStatus.PRINTER_OVER_HEATS - Superaquecimento da impressora;
  • PayOsSdkPrinterStatus.PRINTER_VOLTAGE_IS_TO_LOW - A voltagem da impressora está muito baixa;
  • PayOsSdkPrinterStatus.PRINTING_IS_UNFINISHED - Impressão não finalizada;
  • PayOsSdkPrinterStatus.FONT_LIBRARY_NOT_INSTALLED - A impressora não possui biblioteca de fontes instalada;
  • PayOsSdkPrinterStatus.DATA_PACKAGE_TO_LONG - Pacote de dados muito longo;
  • PayOsSdkPrinterStatus.ERROR - Erro não identificado;
  • PayOsSdkPrinterStatus.UNKNOWN - Status não identificado.

2.2) init(): Result<Unit>

Inicializa a impressora.

2.3) start(): Result<PayOsSdkPrinterStatus>

Inicia a impressora e imprime os dados no buffer. Deve ser chamado ao final da configuração do buffer a ser impresso. Esta é uma interface síncrona.

  • Após chamar esta função, a impressora executará a tarefa de impressão e só retornará depois de concluir toda a tarefa;
  • Após finalizar toda a impressão, esta função retornará o status da impressora no valor de retorno. Portanto, não é necessário verificar o status da impressora separadamente;
  • Se a impressora estiver sem papel, o retorno é o status de erro do hardware, e não sucesso;
  • Se o processo de impressão for concluído, chamar novamente esta função fará com que o comprovante seja reimpresso;
  • O número total de pontos de uma impressão deve ser menor que 30.000.

2.4) step(step: Int): Result<Unit>

Define espaçamento de layout de impressão.

  • Se o valor do pixel for positivo, o papel avançará. Se for negativo, o papel retrocederá. Se for 0, nenhuma ação será realizada.
  • Esta é uma ação única.
  • Para a impressora de agulha, não haverá ação quando o valor do pixel for menor que -255 ou maior que 255.

2.5) printBitmap(bitmap: Bitmap?): Result<Unit>

Imprime uma imagem criada como Bitmap.

  • Armazena o bitmap no buffer de impressão e imprime os dados do buffer em sequência após chamar start();
  • A largura recomendada é 384 pixels, que corresponde à largura útil da bobina.

2.6) setGray(level: Int): Result<Unit>

Define o nível de tonalidade (gray level) da impressão. A faixa aceita é de 0 a 4; valores fora dessa faixa são limitados ao valor mais próximo dela.
Parâmetros:

  • 0 – Reservado;
  • 1 – Nível padrão, impressão normal;
  • 2 – Reservado;
  • 3 – Impressão térmica em duas camadas;
  • 4 – Impressão térmica em duas camadas, nível de cinza mais alto que o nível 3.
    O comprovante padrão do SDK utiliza o nível 4.

Exemplo

Criando o bitmap:

val bitmap = Bitmap.createBitmap(384, 120, Bitmap.Config.ARGB_8888)
bitmap.eraseColor(Color.WHITE)
val paint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
    color = Color.BLACK
    textSize = 24f
}
val canvas = Canvas(bitmap)
canvas.drawText("Printing test", 0f, 32f, paint)
canvas.drawText("second line", 0f, 64f, paint)
canvas.drawRect(0f, 80f, 100f, 84f, paint)

Imprimindo o bitmap:

payOsSdkPrinterInstance.init()
payOsSdkPrinterInstance.setGray(4)
payOsSdkPrinterInstance.printBitmap(bitmap)
payOsSdkPrinterInstance.step(150)
payOsSdkPrinterInstance.start()

Did this page help you?