Impressão

1) Instanciando a PayOsSdkPrinter

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 setAlignMode(alignMode: Short): Result<Unit>
    fun fontSet(asciiFontType: EFontTypeAscii, cFontType: EFontTypeExtCode): Result<Unit>
    fun spaceSet(wordSpace: Byte, lineSpace: Byte): Result<Unit>
    fun step(step: Int): Result<Unit>
    fun printStr(str: String, charset: String?): Result<Unit>
    fun printBitmap(bitmap: Bitmap?): Result<Unit>
    fun printLine(width: Int, height: Int?): Result<Unit>
    fun leftIndent(indent: Int): Result<Unit>
    fun setGray(level: Int): Result<Unit>
    fun setDoubleWidth(isAscDouble: Boolean, isLocalDouble: Boolean): Result<Unit>
    fun setDoubleHeight(isAscDouble: Boolean, isLocalDouble: Boolean): Result<Unit>
    fun setInvert(isInvert: Boolean): Result<Unit>
}

1.1) Permissão

Caso vá fazer utilização da impressão, é necessário adicionar a permissão abaixo no arquivo AndroidManifest.xml.

<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 o processo de impressão for concluído, chamar novamente esta função fará com que o comprovante seja reimpresso;
  • O uso deve seguir a fórmula: número de pontos por linha = altura do caractere + espaço entre linhas. Número total de pontos = número de pontos por linha * número de linhas. O número total de pontos deve ser menor que 30.000, e a altura padrão do caractere é 24.

2.4) setAlignMode(alignMode: Short): Result<Unit>

Define o modo de alinhamento de impressão.

  • 0 - alinhamento à esquerda;
  • 1 - alinhamento ao centro;
  • 2 - alinhamento à direita.

2.5) fontSet(asciiFontType: EFontTypeAscii, cFontType: EFontTypeExtCode): Result<Unit>

Define a fonte para impressão.

asciiFontType - EFontTypeAscii

  • EFontTypeAscii.FONT_8_16:8x16 font (Base)
  • EFontTypeAscii.FONT_12_24:12x24 font (Base)
  • EFontTypeAscii.FONT_8_32:8x16 font (amplia verticalmente)
  • EFontTypeAscii.FONT_12_48:12x24 font (amplia verticalmente)
  • EFontTypeAscii.FONT_16_16:8x16 font (amplia horizontalmente)
  • EFontTypeAscii.FONT_24_24:12x24 font (amplia horizontalmente)
  • EFontTypeAscii.FONT_16_32:8x16 font (amplia para ambos os lados)
  • EFontTypeAscii.FONT_24_48:12x24 font (amplia para ambos os lados)

fontTypeExtCode - EFontTypeExtCode font set para caracteres de código estendidos

  • FONT_16_16 -16x16 font (Base)
  • FONT_24_24 -24x24 font (Base)
  • FONT_16_32 -16x16 font (amplia verticalmente)
  • FONT_24_48 -24x24 font (amplia verticalmente)
  • FONT_48_24 -16x16 font (amplia horizontalmente)
  • FONT_32_32 -24x24 font (amplia horizontalmente)
  • FONT_48_24 -16x16 font (amplia para ambos os lados)
  • FONT_48_48 -24x24 font (amplia para ambos os lados)

2.6) spaceSet(wordSpace: Byte, lineSpace: Byte): Result<Unit>

Define espaçamento de caracteres.

  • As configurações serão válidas até que sejam definidas novamente ou até que init() seja chamado;
  • O espaço entre caracteres na impressão é 0 por padrão;
  • O espaço entre linhas na impressão é 0 para impressoras térmicas e 2 para impressoras de agulha;
  • O espaço máximo entre linhas pode ser 255;
  • O espaço máximo entre caracteres pode ser 255 (para impressoras de agulha, o máximo é 60).

2.7) 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.8) printStr(str: String, charset: String?): Result<Unit>

  • Suporta os caracteres de controle '\n' (nova linha) e '\f' (nova página);
  • Se o pacote de dados de impressão for muito longo, o programa de impressão poderá sofrer overflow;
  • Se a string for maior que a largura da linha atual, a mudança de linha será automática e a impressão continuará;
  • O tamanho máximo do buffer é 2048 bytes;
  • Armazena str no buffer de impressão e imprime os dados do buffer em sequência após chamar start();
  • Parâmetros:
    • str – string a ser impressa
    • charset – quando o conjunto de caracteres for NULL, o padrão será UTF-8.

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

Imprime uma imagem criada como Bitmap.


2.10) printLine(width: Int, height: Int?): Result<Unit>

Imprime uma linha (como Bitmap) com a largura e altura definidos. A altura padrão é 2.


2.11) leftIndent(indent: Int): Result<Unit>

Define o limite esquerdo de impressão de caracteres. O valor padrão é 0. Se o valor informado exceder o máximo permitido, o valor máximo será utilizado.

Parâmetros:

  • indent – 0~300 pontos vazios no limite esquerdo, faixa permitida: 0 a 300.

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

Define o nível de tonalidade (gray level) da impressão.

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;
  • [50 ~ 500] – O nível de cinza é definido como uma porcentagem do valor padrão.
    • Se for 50, o nível será ajustado para 50% do padrão;
    • Se for 500, o nível será ajustado para 500% do padrão.

2.13) setDoubleWidth(isAscDouble: Boolean, isLocalDouble: Boolean): Result<Unit>

Define a fonte de impressão com base na fonte padrão para largura dupla.

Parâmetros:

  • isAscDouble – Define se a fonte de codificação simples (ASCII) terá largura dupla;
  • isLocalDouble – Define se a fonte de codificação múltipla (caracteres locais) terá largura dupla.

2.14) setDoubleHeight(isAscDouble: Boolean, isLocalDouble: Boolean): Result<Unit>

Define a fonte de impressão com base na fonte padrão para altura dupla.

Parâmetros:

  • isAscDouble – Define se a fonte de codificação simples (ASCII) terá altura dupla;
  • isLocalDouble – Define se a fonte de codificação múltipla (caracteres locais) terá altura dupla.

2.15) setInvert(isInvert: Boolean): Result<Unit>

Inverte a configuração de impressão da impressora, sendo normal o padrão.

Parâmetros:

  • true – Invertido;
  • false – Normal.

Exemplo

payOsSdkPrinterInstance.init()
payOsSdkPrinterInstance.setGray(3)
payOsSdkPrinterInstance.fontSet(
    EFontTypeAscii.FONT_12_24,
    EFontTypeExtCode.FONT_16_16
)
payOsSdkPrinterInstance.printStr("Printing test", "utf-8")
payOsSdkPrinterInstance.printStr("second line", "utf-8")
payOsSdkPrinterInstance.printLine(100, 4)
payOsSdkPrinterInstance.printStr("Testing", "utf-8")
payOsSdkPrinterInstance.step(150)
payOsSdkPrinterInstance.start()

Did this page help you?