Impressão

👍

Disponível a partir do Bundle Stone 7.4.5

Versão do pacote de apps Stone instalado na maquininha POS.

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

CampoDescrição
SHOW_FEEDBACK_SCREENMostrar ou não no final do fluxo a tela de sucesso ou erro
SCHEME_RETURNDetermina para onde será o retorno do deeplink. Deve ser o mesmo valor configurado no lugar da variável scheme no AndroidManifest
PRINTABLE_CONTENTArquivo 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

CampoVariaçãoDescrição
typetext | line | imageTipo de impressão
contentApenas para campos de textoTexto que será impresso
aligncenter | right | left

Apenas para texto customizado
Alinhamento do texto customizado
sizebig | medium | small

Apenas para texto customizado
Tamanho do texto customizado
imagePathFormato 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.

ResultadoDescrição
SUCCESSCaso a impressão tenha sido efetuada com sucesso
PRINTER_OUT_OF_PAPERImpressora sem papel ou com a tampa de bobina aberta
PRINTER_INIT_ERRORErro ao inicializar a impressora
PRINTER_LOW_ENERGYMáquina com baixa energia
PRINTER_BUSYImpressora ocupada, ocorre quando já está imprimindo algo
PRINTER_UNSUPPORTED_FORMATAlgum formato enviado não corresponde ao padrão de texto, imagem ou texto customizado
PRINTER_INVALID_DATALimite máximo do buffer foi ultrapassado
PRINTER_OVERHEATINGSuperaquecimento da impressora
PRINTER_PAPER_JAMPapel preso na caixa de bobina
PRINTER_PRINT_ERRORErro genérico da impressora