Será disponibilizado a partir bundle 7.7.0
Encontramos um bug nas versões anteriores que faz com que o conteudo não seja impresso. Esse problema foi corrigido no bundle 7.7.0 e estamos trabalhando para liberar essa versão.
Enviar uma impressão customizada
Para conseguir imprimir, é importante que tenha o formato das imagens em Base64 e o conteúdo que gostaria de imprimir em formato JSON.
Pode ser impresso textos simples (chamado de line
), imagens (chamado de image
) e textos customizados (chamado de text
, com alinhamento e tamanho). Podem imprimir apenas imagens, apenas textos simples, apenas textos customizados ou tudo junto! Depende apenas da estrutura que montará no arquivo JSON.
Com essas informações, a criação do deeplink é via Intent.
val uriBuilder = Uri.Builder()
uriBuilder.authority("print")
uriBuilder.scheme("printer-app")
uriBuilder.appendQueryParameter("SHOW_FEEDBACK_SCREEN", "true/false")
uriBuilder.appendQueryParameter("SCHEME_RETURN", "deeplinktest-return")
uriBuilder.appendQueryParameter("PRINTABLE_CONTENT", "arquivoJSON")
val intent = Intent(Intent.ACTION_VIEW)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
intent.data = uriBuilder.build()
startActivity(intent)
Campos utilizados para envio
Todos os campos estão em formato String e são obrigatórios
Campo | Descrição |
---|---|
SHOW_FEEDBACK_SCREEN | Mostrar ou não no final do fluxo a tela de sucesso ou erro |
SCHEME_RETURN | Determina para onde será o retorno do deeplink. Deve ser o mesmo valor configurado no lugar da variável scheme no AndroidManifest |
PRINTABLE_CONTENT | Arquivo JSON do que será impresso |
Campos utilizados como parâmetros do arquivo JSON
Exemplo de como ficaria o arquivo com todos os tipos de impressão
[
{
"type": "text",
"content": "texto centro grande",
"align": "center",
"size": "big"
},
{
"type": "text",
"content": "texto direita médio",
"align": "right",
"size": "medium"
},
{
"type": "text",
"content": "texto esquerda pequeno",
"align": "left",
"size": "small"
},
{
"type": "line",
"content": "texto sem customização"
},
{
"type": "image",
"imagePath": "iVBORw0KGgoAAAANSUhEUgAAAHcAAAAuCAAAAAA309lpAAACMklEQVRYw91YQXLDIAyUMj027Us606f6RL7lJP0Ise/bg7ERSLLdZkxnyiVGIK0AoRVh0J+0l2ZITCAmSus8tYNNv9wUl8Xn2A6XZec8tsK9lN0zEaFBCxMc0M3IoHawBAAxffLx9/frY1kkEV0/iYjC8bjjmSRuCrHjcXMoS9zD4/nqePNf10v2whrkDRjLR4t8BWPXbdyRmccDgBMZUXDiiv2DeSK4sKwWrfgIda8V/6L6blZvLMARTescAohCD7xlcsItjYXEXHn2LIESzO3mDARPYTJXwiQ/VgWFobsYGKRdRy5x6/1QuAPpKdq89MiTS1x9EBXuYJyVZd46p6ndXVwAqfwJpd4C20uLk/LsUIilQ5Q11A4tuIU8Ti4bi8oz6lNX8iD8rNUdXDm3iMs81le4pUOLOJrGatzBx1VqVRSU8qAdNRc855GwHxcFblQbYTvqx3M0ZxZnZeBq+UoayI0h3y7QPMhOyQA9JMkO9aMIqs6Rmrw73T6ey9anvDX5kbinvT2PW7yYzj8ogrcYqBOJjNxc21d5EjmH0e/iaqUV9dXj3YgYtkvCjbjaqs5O+85MxVvwTcZdhR5YuFbckCSfNkHUolTcE9Cq9iQfXtV62bo9nUBIm8AXedPidimVFIjZCdYlTw4W8RtsatKC7Bt7D4t5tMle9qPD+y4uyL81FS/UnnVu3eMzhuj3G7CqzkHF77ISsaoraSsqVnRhq3rSZ+F5Ur//b5zOOVoAwDc6szxdC+PYAAAAAABJRU5ErkJggg=="
}
]
Todos os campos estão em formato String e são obrigatórios
Campo | Variação | Descrição |
---|---|---|
type | text | line | image | Tipo de impressão |
content | Apenas para campos de texto | Texto que será impresso |
align | center | right | left Apenas para texto customizado | Alinhamento do texto customizado |
size | big | medium | small Apenas para texto customizado | Tamanho do texto customizado |
imagePath | Formato Base64 Apenas para imagem | Imagem que será impressa |
Retorno da impressão
Para conseguir o retorno do deeplink de impressão, pode ser utilizada a função abaixo que captura a informação que foi retornada pela Intent.
override fun onNewIntent(intent: Intent?) {
super.onNewIntent(intent)
if (intent != null && intent.data != null) {
Log.d("PrintTest", intent.data.toString())
Toast.makeText(this, intent.data.toString(), Toast.LENGTH_LONG).show()
}
}
Mapear retorno da impressão
Se for preciso mapear os casos de sucesso ou erro, poderá utilizar o intent.data
com as seguintes possibilidades.
Resultado | Descrição |
---|---|
SUCCESS | Caso a impressão tenha sido efetuada com sucesso |
PRINTER_OUT_OF_PAPER | Impressora sem papel ou com a tampa de bobina aberta |
PRINTER_INIT_ERROR | Erro ao inicializar a impressora |
PRINTER_LOW_ENERGY | Máquina com baixa energia |
PRINTER_BUSY | Impressora ocupada, ocorre quando já está imprimindo algo |
PRINTER_UNSUPPORTED_FORMAT | Algum formato enviado não corresponde ao padrão de texto, imagem ou texto customizado |
PRINTER_INVALID_DATA | Limite máximo do buffer foi ultrapassado |
PRINTER_OVERHEATING | Superaquecimento da impressora |
PRINTER_PAPER_JAM | Papel preso na caixa de bobina |
PRINTER_PRINT_ERROR | Erro genérico da impressora |