Impressão

Para realizar a impressão, basta montar uma URL com o seguinte formato:

lio://print?request=$base64&urlCallback=order://response

Abaixo, você encontra exemplos de impressão aplicados aos seguintes cenários:

Quais são as permissões necessárias para a impressão?

Para que a funcionalidade de impressão funcione corretamente nos terminais Cielo Smart, é necessário incluir as seguintes permissões no aplicativo Android:

uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"

A permissão android:requestLegacyExternalStorage="true" deve ser inserida na tag application.

O contrato de impressão é o mesmo para todos os modelos de terminais Cielo (DX8000, L400 e L300).

Texto

Para otimizar a performance ao usar o Printer Manager para imprimir textos com múltiplas linhas, é aconselhável evitar a invocação do método de impressão para cada linha individualmente. Em vez disso, recomenda-se a formatação do texto completo, incluindo todas as linhas, e a realização de uma única chamada a operação PRINT_TEXT. Isso reduz o número de chamadas ao método de impressão, melhorando a eficiência do processo.

{
  "operation": "PRINT_TEXT",
  "styles": [{}],
  "value": ["TEXTO PARA IMPRIMIR NA PRIMEIRA LINHA\nTEXTO PARA IMPRIMIR NA SEGUNDA LINHA\nTEXTO PARA IMPRIMIR NA TERCEIRA LINHA\n\n"]
}

Neste exemplo, o conteúdo textual é estruturado como uma única string, onde cada linha é separada pelo caractere de quebra de linha (“\n”).

Imagem

Para imprimir imagens, é necessário informar o caminho completo do arquivo armazenado no dispositivo. O exemplo abaixo demonstra como realizar essa operação utilizando o comando `PRINT_IMAGE

ℹ️

A imagem enviada para impressão deve ter largura de 384 px para garantir a qualidade de impressão.

{
  "operation": "PRINT_IMAGE",
  "styles": [{}],
  "value": ["/storage/emulated/0/saved_images/Image-5005.jpg"]
}
👍

Para permitir o salvamento de arquivos, é necessário incluir o atributo android:requestLegacyExternalStorage="true" na tag application do arquivo Manifest.xml do Android.

Múltiplas colunas

Quando há necessidade de imprimir conteúdos organizados em colunas, é possível utilizar o comando PRINT_MULTI_COLUMN_TEXT. Cada coluna pode ser personalizada com estilos específicos, como alinhamento, tamanho da fonte e tipo de letra.

{
  "operation": "PRINT_MULTI_COLUMN_TEXT",
  "styles": [
    {
      "key_attributes_align": 1,
      "key_attributes_textsize": 30,
      "key_attributes_typeface": 0
    },
    {
      "key_attributes_align": 0,
      "key_attributes_textsize": 20,
      "key_attributes_typeface": 1
    },
    {
      "key_attributes_align": 2,
      "key_attributes_textsize": 15,
      "key_attributes_typeface": 2
    }
  ],
  "value": [
    "Texto alinhado à esquerda.\n\n\n",
    "Texto centralizado\n\n\n",
    "Texto alinhado à direita\n\n\n"
  ]
}

Mapas de estilos de impressão

Você pode formatar a sua impressão criando mapas de estilos utilizando os parâmetros disponíveis:

AtributoDescriçãoValores
key_attributes_alignAlinhamento da impressão0 - Center
1 - Left
2 - Right
key_attributes_textsizeTamanho do textoValores inteiros
key_attributes_typefaceFonte do texto (de 0 a 8, cada número representando uma fonte diferente)0 a 8
key_attributes_marginleftMargem esquerdaValores inteiros
key_attributes_marginrightMargem direitaValores inteiros
key_attributes_margintopMargem superiorValores inteiros
key_attributes_marginbottomMargem inferiorValores inteiros
key_attributes_linespaceEspaçamento entre as linhasValores inteiros
key_attributes_weightPeso da coluna em impressão com múltiplas colunasValores inteiros
form_feedEspaçamento após impressão de imagem para plataformas que não sejam a LIO0 - sem espaçamento. 1 - com espaçamento

Exemplo de estilos de impressão

HashMap<String, Integer> alignLeft =  new HashMap<>();
alignLeft.put("key_attributes_align", 1);
alignLeft.put("key_attributes_typeface", 0);
alignLeft.put("key_attributes_textsize", 20);

HashMap<String, Integer> alignCenter =  new HashMap<>();
alignCenter.put("key_attributes_align", PrinterAttributes.VAL_ALIGN_CENTER);
alignCenter.put("key_attributes_typeface", 1);
alignCenter.put("key_attributes_textsize", 20);

HashMap<String, Integer> alignRight =  new HashMap<>();
alignRight.put("key_attributes_align", PrinterAttributes.VAL_ALIGN_RIGHT);
alignRight.put("key_attributes_typeface", 2);
alignRight.put("key_attributes_textsize", 20);

HashMap<String, Integer> withFormFeed =  new HashMap<>();
withFormFeed.put("form_feed", 1);

HashMap<String, Integer> withoutFormFeed =  new HashMap<>();
withoutFormFeed.put("form_feed", 0);
ℹ️

Em plataformas diferentes da Cielo Smart, ao realizar a impressão de imagens, pode ocorrer de parte da imagem permanecer dentro da impressora após o término da impressão. Para evitar esse comportamento, é possível utilizar o atributo form_feed dentro da propriedade styles. Se esse parâmetro não for especificado, o valor padrão será 0, o que significa que não haverá espaço adicional após a imagem. Para garantir que a imagem seja completamente ejetada da impressora, basta definir o valor como 1. Consulte exemplos na seção Mapa de estilos de impressão.


Para otimizar a performance ao usar o Printer Manager para imprimir textos com múltiplas linhas, é aconselhável evitar a invocação do método de impressão para cada linha individualmente. Em vez disso, recomenda-se a formatação do texto completo, incluindo todas as linhas, e a realização de uma única chamada a operação PRINT_TEXT. Isso reduz o número de chamadas ao método de impressão, melhorando a eficiência do processo.

{
  "operation": "PRINT_TEXT",
  "styles": [{}],
  "value": ["TEXTO PARA IMPRIMIR NA PRIMEIRA LINHA\nTEXTO PARA IMPRIMIR NA SEGUNDA LINHA\nTEXTO PARA IMPRIMIR NA TERCEIRA LINHA\n\n"]
}

Neste exemplo, o conteúdo textual é estruturado como uma única string, onde cada linha é separada pelo caractere de quebra de linha (“\n”).

Imagem

Para imprimir imagens, é necessário informar o caminho completo do arquivo armazenado no dispositivo. O exemplo abaixo demonstra como realizar essa operação utilizando o comando PRINT_IMAGE:

{
  "operation": "PRINT_IMAGE",
  "styles": [{}],
  "value": ["/storage/emulated/0/saved_images/Image-5005.jpg"]
}
👍

Para permitir o salvamento de arquivos, é necessário incluir o atributo android:requestLegacyExternalStorage="true" na tag application do arquivo Manifest.xml do Android.

Múltiplas colunas

Quando há necessidade de imprimir conteúdos organizados em colunas, é possível utilizar o comando PRINT_MULTI_COLUMN_TEXT. Cada coluna pode ser personalizada com estilos específicos, como alinhamento, tamanho da fonte e tipo de letra.

{
  "operation": "PRINT_MULTI_COLUMN_TEXT",
  "styles": [
    {
      "key_attributes_align": 1,
      "key_attributes_textsize": 30,
      "key_attributes_typeface": 0
    },
    {
      "key_attributes_align": 0,
      "key_attributes_textsize": 20,
      "key_attributes_typeface": 1
    },
    {
      "key_attributes_align": 2,
      "key_attributes_textsize": 15,
      "key_attributes_typeface": 2
    }
  ],
  "value": [
    "Texto alinhado à esquerda.\n\n\n",
    "Texto centralizado\n\n\n",
    "Texto alinhado à direita\n\n\n"
  ]
}

Mapas de estilos de impressão

Você pode formatar a sua impressão criando mapas de estilos utilizando os parâmetros disponíveis:

AtributoDescriçãoValores
key_attributes_alignAlinhamento da impressão0 - Center
1 - Left
2 - Right
key_attributes_textsizeTamanho do textoValores inteiros
key_attributes_typefaceFonte do texto (de 0 a 8, cada número representando uma fonte diferente)0 a 8
key_attributes_marginleftMargem esquerdaValores inteiros
key_attributes_marginrightMargem direitaValores inteiros
key_attributes_margintopMargem superiorValores inteiros
key_attributes_marginbottomMargem inferiorValores inteiros
key_attributes_linespaceEspaçamento entre as linhasValores inteiros
key_attributes_weightPeso da coluna em impressão com múltiplas colunasValores inteiros
form_feedEspaçamento após impressão de imagem para plataformas que não sejam a LIO0 - sem espaçamento.
1 - com espaçamento

Exemplo de estilos de impressão

HashMap<String, Integer> alignLeft =  new HashMap<>();
alignLeft.put("key_attributes_align", 1);
alignLeft.put("key_attributes_typeface", 0);
alignLeft.put("key_attributes_textsize", 20);

HashMap<String, Integer> alignCenter =  new HashMap<>();
alignCenter.put("key_attributes_align", PrinterAttributes.VAL_ALIGN_CENTER);
alignCenter.put("key_attributes_typeface", 1);
alignCenter.put("key_attributes_textsize", 20);

HashMap<String, Integer> alignRight =  new HashMap<>();
alignRight.put("key_attributes_align", PrinterAttributes.VAL_ALIGN_RIGHT);
alignRight.put("key_attributes_typeface", 2);
alignRight.put("key_attributes_textsize", 20);

HashMap<String, Integer> withFormFeed =  new HashMap<>();
withFormFeed.put("form_feed", 1);

HashMap<String, Integer> withoutFormFeed =  new HashMap<>();
withoutFormFeed.put("form_feed", 0);
ℹ️

Em plataformas diferentes da Cielo Smart, ao realizar a impressão de imagens, pode ocorrer de parte da imagem permanecer dentro da impressora após o término da impressão. Para evitar esse comportamento, é possível utilizar o atributo form_feed dentro da propriedade styles. Se esse parâmetro não for especificado, o valor padrão será 0, o que significa que não haverá espaço adicional após a imagem. Para garantir que a imagem seja completamente ejetada da impressora, basta definir o valor como 1. Consulte exemplos na seção Mapa de estilos de impressão.

Exemplos de retorno e de sucesso

Retorno de sucesso

order://response?response=eyJjb2RlIjowLCJtZXNzYWdlIjoiU1VDQ0VTUyJ9

Após a decodificação da string Base64, o conteúdo é convertido em um objeto JSON estruturado, que facilita a interpretação:

{
    "code":0,
    "message":"SUCCESS"
}

Retorno de erro

order://response?response=eyJjb2RlIjoyLCJtZXNzYWdlIjoiamF2YS5sYW5nLlRocm93YWJsZTogUFJJTlQgRVJST1I6IFBS

Após a decodificação da string Base64, o conteúdo é convertido em um objeto JSON estruturado, que facilita a interpretação do erro:

{
   "code":2,
   "message":"PRINT ERROR MESSAGE"
}

Retorno de erro por falta de bobina

order://response?response=eyJjb2RlIjoxLCJtZXNzYWdlIjoiV0lUSE9VVCBQQVBFUiJ9

Após a decodificação da string Base64, o conteúdo é convertido em um objeto JSON estruturado, que facilita a interpretação do erro:

{
   "code":1,
   "message":"WITHOUT PAPER"
}

Did this page help you?