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.instanceInterface 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>
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>
init(): Result<Unit>Inicializa a impressora.
2.3) start(): Result<PayOsSdkPrinterStatus>
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>
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>
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>
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()Updated 17 days ago