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
applicationdo 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:
| Atributo | Descrição | Valores |
|---|---|---|
key_attributes_align | Alinhamento da impressão | 0 - Center 1 - Left 2 - Right |
key_attributes_textsize | Tamanho do texto | Valores inteiros |
key_attributes_typeface | Fonte do texto (de 0 a 8, cada número representando uma fonte diferente) | 0 a 8 |
key_attributes_marginleft | Margem esquerda | Valores inteiros |
key_attributes_marginright | Margem direita | Valores inteiros |
key_attributes_margintop | Margem superior | Valores inteiros |
key_attributes_marginbottom | Margem inferior | Valores inteiros |
key_attributes_linespace | Espaçamento entre as linhas | Valores inteiros |
key_attributes_weight | Peso da coluna em impressão com múltiplas colunas | Valores inteiros |
form_feed | Espaçamento após impressão de imagem para plataformas que não sejam a LIO | 0 - 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_feeddentro da propriedadestyles. 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
applicationdo 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:
| Atributo | Descrição | Valores |
|---|---|---|
key_attributes_align | Alinhamento da impressão | 0 - Center 1 - Left 2 - Right |
key_attributes_textsize | Tamanho do texto | Valores inteiros |
key_attributes_typeface | Fonte do texto (de 0 a 8, cada número representando uma fonte diferente) | 0 a 8 |
key_attributes_marginleft | Margem esquerda | Valores inteiros |
key_attributes_marginright | Margem direita | Valores inteiros |
key_attributes_margintop | Margem superior | Valores inteiros |
key_attributes_marginbottom | Margem inferior | Valores inteiros |
key_attributes_linespace | Espaçamento entre as linhas | Valores inteiros |
key_attributes_weight | Peso da coluna em impressão com múltiplas colunas | Valores inteiros |
form_feed | Espaçamento após impressão de imagem para plataformas que não sejam a LIO | 0 - 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_feeddentro da propriedadestyles. 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=eyJjb2RlIjowLCJtZXNzYWdlIjoiU1VDQ0VTUyJ9Apó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=eyJjb2RlIjoyLCJtZXNzYWdlIjoiamF2YS5sYW5nLlRocm93YWJsZTogUFJJTlQgRVJST1I6IFBSApó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=eyJjb2RlIjoxLCJtZXNzYWdlIjoiV0lUSE9VVCBQQVBFUiJ9Apó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"
}Updated about 1 month ago